Очистка ForeignSecurityPrincipals в Active Directory

active directory logo

Добрый день! Уважаемые читатели и гости, крупного IT блога Pyatilistnik.org. Продолжаем с вами постигать все тонкости активного каталога, после того как мы рассмотрели основные вводные понятия Active Directory, нам следует более подробно ознакомиться с его основными контейнерами и организационными единицами. В сегодняшней заметке, мы рассмотрим назначение такого контейнера ForeignSecurityPrincipals, научимся его правильно очищать от лишнего мусора, который может накапливаться со временем.

Назначение ForeignSecurityPrincipals

И так давайте рассмотрим, что такое, этот контейнер ForeignSecurityPrincipals в Active Directory. FSP - это контейнер в Active Directory (AD), который указывает на принципала безопасности (пользователя, компьютера или группы) из домена другого леса. Красная стрелка представляет этих участников безопасности. Если проще, то это контейнер в котором хранятся SID пользователей из других доверительных лесов, которых вы добавили в свои группы безопасности.

Классическая ситуация, есть два леса Actvie Directory, между которыми настроены доверительные отношения. Логично, что пользователям из разных лесов и доменов, можно предоставлять доступ к ресурсам других серверов или папок, находящихся за пределами их леса. Включая такого пользователя в группу безопасности другого леса, информация о его SID записывается в контейнер ForeignSecurityPrincipals.

ForeignSecurityPrincipals

Очистка ForeignSecurityPrincipals

С течением времени, когда удалятся учетная запись компьютера, пользователя, состоящих в группах безопасности другого домена, информация, о нем в контейнере ForeignSecurityPrincipals удалена не будет, и такая запись будет осиротевшей. AD создает FSP в домене в первый раз после добавления принципала безопасности домена из другого леса в группу. И когда кто-то удаляет принципала безопасности, на который указывает FSP, FSP определяет его сиротой, потому что он указывает на несуществующего принципала безопасности.

При условии:

  • FSP указывает на принципала безопасности другого домена по его номеру SID
  • После удаления и повторного создания принципала безопасности он никогда не имеет того же SID

Легко понять, что сирота FSP останется сиротой - навсегда! И поскольку в AD нет встроенного механизма для мониторинга того, сохраняются ли участники безопасности, соответствующие FSP, сироты FSP все еще остаются, пока кто-то их не удалит.

Как определить и очистить сиротские FSP с помощью GUI

Вы можете найти все FSP в консоли Active Directory - пользователи и компьютеры (ADUC) в контейнере с именем ForeignSecurityPrincipals. Однако сначала необходимо включить дополнительные функции в консоли. В противном случае контейнер ничего не покажет. Заходим в "Вид - Дополнительные компоненты"

Включение ForeignSecurityPrincipals

У вас появится список всех принципалов безопасности из другого леса. Теперь, чтобы найти осиротевших вам нужно удостовериться, чтобы на против такого принципала в поле "Считываемое имя" было пусто, я для удобства отфильтровал столбец, и сверху получил все устаревшие записи. Щелкаем по ним правым кликом и из контекстного меню выберите пункт "Удалить".

удаление ForeignSecurityPrincipals

Как определить и очистить сиротские FSP с помощью PowerShell

Все то же самое можно сделать и через PowerShell. Откройте оснастку PowerShell от имени администратора и введите команду для получения списка:

Get-ADObject -Filter {ObjectClass -eq 'ForeignSecurityPrincipal'}

Чтобы их удалить введите

$ForeignSecurityPrincipalList = Get-ADObject -Filter {ObjectClass ‑eq 'foreignSecurityPrincipal'}
foreach($FSP in $ForeignSecurityPrincipalList)
{
    Try
    {$null=(New-Object System.Security.Principal.SecurityIdentifier($FSP.objectSid)).Translate([System.Security.Principal.NTAccount])}
    Catch
    {Remove-ADObject -Identity $FSP}
}

Тем не менее, существует оговорка: если в то же время вы ищете FSP, и возникает проблема сетевого подключения между контроллерами домена и контроллерами домена из других трастовых лесов, вы не сможете увидеть читаемые имена. Таким образом, вы ошибочно определите, что они сироты. Вот почему я не рекомендую автоматически удалять всех сирот FSP без какого-либо контроля с помощью метода выше. Вместо этого я написал небольшой модуль с именем OrphanForeignSecurityPrincipals,

Модуль содержит два командлета:

  1. Get-OrphanForeignSecurityPrincipal , который отображает список сиротских FSP и также может экспортировать список в файл с разделителями табуляции.
  2. Remove-OrphanForeignSecurityPrincipal , который удаляет FSP, предоставленные параметром DistinguishedName, конвейер или файл с разделителями табуляции.

Восстановить удаленный FSP

Для этого вы можете использовать один из следующих способов:

  • Восстановите FSP из корзины. Однако обратите внимание, что функция корзины должна быть активной до того, как произойдет удаление. Корзина Windows Server 2008 R2 и корзина Active Directory Windows Server 2012 R2.
  • Через Powershell: Найдите свой объекты с запросом наподобие этого: Get-ADObject -Filter 'IsDeleted -eq $ TRUE' -IncludeDeletedObjects | Where-Object {$ _. DistinguishedName-like "CN = S- *"}. Как только вы настроили свой запрос на возврат только объектов, которые хотите восстановить, переведите результат в Restore-ADObject

Траблшутинг ForeignSecurityPrincipals

Ну и еще приведу пример, траблшутинга. Да леса и в каждом по одному домену. Вы пытаетесь открыть группу безопасности в одном домене, через оснастку Active DirectoryUsers and Computers, но вот список членов группы появляется очень долго. Список членов открывается, и вместо имен вы видите их SID. Так же из 4-х контроллеров домена, только на на одном есть содержимое в контейнере ForeignSecurityPrincipals. Проблема была в том, что у трёх из четырёх DC домена pyatilistnik.org не было доступа к одному из контроллеров домена pyatilistnik.ru по порту 445. Порты открыли и провели принудительную синхронизацию. После чего все наладилось.

Если остались вопросы, то пишите их в комментариях, я рад буду ответить. С вами был Иван Семин, автор и создатель IT портала Pyatilistnik.org.

Оцените статью
Настройка серверов windows и linux
Добавить комментарий

  1. Александр

    Включая такого пользователя в группу безопасности другого леса, информация о его SID записывается в контейнер ForeignSecurityPrincipals.

    ***********
    Грамматическая ошибка. Предложение несогласованно. (Включая — записывается)

  2. Игорь Манашов

    для определения сетевой доступности других доменов я использую следующий фрагмент:

    # Проверка доступности доверенных доменов из других лесов
    $Domains =Get-ADTrust -Filter * | Select-Object -Property Target | ForEach-Object {$_.Target}
    $Return = $true
    [string[]]$Mes = $null
    foreach ($Item in $Domains) {
    try {
    $null = Get-ADForest -Identity $Item
    }
    catch {
    $Mes +=»Недоступен лес из связки с доверительными отношениями — $Item»
    $Return = $false
    }
    }