Очистка ForeignSecurityPrincipals в Active Directory
Добрый день! Уважаемые читатели и гости, крупного IT блога Pyatilistnik.org. Продолжаем с вами постигать все тонкости активного каталога, после того как мы рассмотрели основные вводные понятия Active Directory, нам следует более подробно ознакомиться с его основными контейнерами и организационными единицами. В сегодняшней заметке, мы рассмотрим назначение такого контейнера ForeignSecurityPrincipals, научимся его правильно очищать от лишнего мусора, который может накапливаться со временем.
Назначение ForeignSecurityPrincipals
И так давайте рассмотрим, что такое, этот контейнер ForeignSecurityPrincipals в Active Directory. FSP - это контейнер в Active Directory (AD), который указывает на принципала безопасности (пользователя, компьютера или группы) из домена другого леса. Красная стрелка представляет этих участников безопасности. Если проще, то это контейнер в котором хранятся SID пользователей из других доверительных лесов, которых вы добавили в свои группы безопасности.
Классическая ситуация, есть два леса Actvie Directory, между которыми настроены доверительные отношения. Логично, что пользователям из разных лесов и доменов, можно предоставлять доступ к ресурсам других серверов или папок, находящихся за пределами их леса. Включая такого пользователя в группу безопасности другого леса, информация о его SID записывается в контейнер ForeignSecurityPrincipals.
Очистка ForeignSecurityPrincipals
С течением времени, когда удалятся учетная запись компьютера, пользователя, состоящих в группах безопасности другого домена, информация, о нем в контейнере ForeignSecurityPrincipals удалена не будет, и такая запись будет осиротевшей. AD создает FSP в домене в первый раз после добавления принципала безопасности домена из другого леса в группу. И когда кто-то удаляет принципала безопасности, на который указывает FSP, FSP определяет его сиротой, потому что он указывает на несуществующего принципала безопасности.
При условии:
- FSP указывает на принципала безопасности другого домена по его номеру SID
- После удаления и повторного создания принципала безопасности он никогда не имеет того же SID
Легко понять, что сирота FSP останется сиротой - навсегда! И поскольку в AD нет встроенного механизма для мониторинга того, сохраняются ли участники безопасности, соответствующие FSP, сироты FSP все еще остаются, пока кто-то их не удалит.
Как определить и очистить сиротские FSP с помощью GUI
Вы можете найти все FSP в консоли Active Directory - пользователи и компьютеры (ADUC) в контейнере с именем ForeignSecurityPrincipals. Однако сначала необходимо включить дополнительные функции в консоли. В противном случае контейнер ничего не покажет. Заходим в "Вид - Дополнительные компоненты"
У вас появится список всех принципалов безопасности из другого леса. Теперь, чтобы найти осиротевших вам нужно удостовериться, чтобы на против такого принципала в поле "Считываемое имя" было пусто, я для удобства отфильтровал столбец, и сверху получил все устаревшие записи. Щелкаем по ним правым кликом и из контекстного меню выберите пункт "Удалить".
Как определить и очистить сиротские FSP с помощью PowerShell
Все то же самое можно сделать и через PowerShell. Откройте оснастку PowerShell от имени администратора и введите команду для получения списка:
Чтобы их удалить введите
Тем не менее, существует оговорка: если в то же время вы ищете FSP, и возникает проблема сетевого подключения между контроллерами домена и контроллерами домена из других трастовых лесов, вы не сможете увидеть читаемые имена. Таким образом, вы ошибочно определите, что они сироты. Вот почему я не рекомендую автоматически удалять всех сирот FSP без какого-либо контроля с помощью метода выше. Вместо этого я написал небольшой модуль с именем OrphanForeignSecurityPrincipals,
Модуль содержит два командлета:
- Get-OrphanForeignSecurityPrincipal , который отображает список сиротских FSP и также может экспортировать список в файл с разделителями табуляции.
- 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.
Включая такого пользователя в группу безопасности другого леса, информация о его SID записывается в контейнер ForeignSecurityPrincipals.
***********
Грамматическая ошибка. Предложение несогласованно. (Включая — записывается)
для определения сетевой доступности других доменов я использую следующий фрагмент:
# Проверка доступности доверенных доменов из других лесов
$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
}
}