Pull to refresh

Работа с AD: Поиск по атрибуту SIDHistory

Reading time2 min
Views9.1K
Предлагаю Вашему вниманию мой метод работы с атрибутом Active Directory sIDHistory. А именно — будем производить поиск объекта по этому атрибуту.

Но вначале поговорим о самом атрибуте. sIDHistory служит для создания соответствия объектов в Active Directory, необходим он, например, при миграции учетных записей и групп из одного домена/леса в другой.

Что нам это дает? А дает это нам возможность не переназначать права на ресурсы, а оставить их «как есть».
Пример: в домене A.local есть группа A-G1, в нее входит пользователь A-U1.
Мы имеем файловый ресурс \\server01\share на который назначен доступ группе A-G1

Случилось так, что мы мигрировали в домен B.local, создали там пользователя B-U1 и прописали ему атрибут sIDHistory от пользователя A\A-U1

Теперь пользователь B\B-U1 без каких-либо дополнительных действий может входить на \\server01\share

Предположим, что пользователей у нас мигрировало 5000, некоторые из них могли полностью переименоваться, а sIDHistory выглядит как куча непонятных для администратора цифр. Найти какому пользователю в домене A соответствует пользователь из домена B просто становиться невозможно.

Скрипт на Powershell, с использованием QUESTовских коммандлетов, который выведет все объекты указанному атрибуту.

#Указываем пользователя, у которого будем искать sIDHistory
$user="B-U1"

#Выбираем нужные нам атрибуты из AD
$obj=(Get-qADObject -Identity $user -service "B.local" -includedproperties sIDHistory | select name,dn,sIDHistory)

#Формируем LDAP запрос
$ldap="LDAP://{0}" -f $obj.dn

#Создаем объект .NET, преобразуем цифры в SID
$indents=([ADSI]$ldap).getex(“sidhistory”) | % { (new-object System.Security.Principal.SecurityIdentifier $_ ,0).value }

# По скольку sIDHistory может содержать много строк соответствий, то ищем все
foreach ($indent in $indents) {
     get-qadobject -identity $indent -service "A.local"
}


Условия для работы скрипта:
  • Точно знаем домен пользователя


На вход можно подавать и CSV и выгрузку из групп:
users.txt:
name
B-U1


import-csv -delimiter "`t" -path "users.txt" | % {

#Указываем пользователя, у которого будем искать sIDHistory
$user=$_.name

#Выбираем нужные нам атрибуты из AD
$obj=(Get-qADObject -Identity $user -service "B.local" -includedproperties sIDHistory | select name,dn,sIDHistory)

#Формируем LDAP запрос
$ldap="LDAP://{0}" -f $obj.dn

#Создаем объект .NET, преобразуем цифры в SID
$indents=([ADSI]$ldap).getex(“sidhistory”) | % { (new-object System.Security.Principal.SecurityIdentifier $_ ,0).value }

# По скольку sIDHistory может содержать много строк соответствий, то ищем все
foreach ($indent in $indents) {
      get-qadobject -identity $indent -service "A.local"
}
}
Tags:
Hubs:
Total votes 13: ↑11 and ↓2+9
Comments4

Articles