Подробный гайд по управлению SID History групп в Active Directory через PowerShell

Практичный гайд по управлению SID History групп в Active Directory через PowerShell: просмотр, добавление, удаление, массовые операции и ошибки.

2026.08.31                  


Подробный гайд по управлению SID History групп в Active Directory через PowerShellПодробный гайд по управлению SID History групп в Active Directory через PowerShell Управление атрибутом SID History (история идентификаторов безопасности) для групп в Active Directory — это критически важный процесс при миграции между доменами или лесами. Он позволяет новой (мигрированной) группе получать доступ к ресурсам, в списках контроля доступа (ACL) которых указан SID старой группы.


Важное предупреждение о безопасности

Ручное изменение sIDHistory потенциально опасно. Злоумышленник (или администратор по ошибке) может добавить SID группы «Администраторы домена» (Domain Admins) в рядовую группу пользователей, что приведет к неявному повышению привилегий.



  • Используйте этот метод только в рамках контролируемой миграции.
  • В промышленных сценариях миграции лучше использовать ADMT (Active Directory Migration Tool), который управляет историей SID автоматически.

1. Подготовка и проверка прав

Для выполнения команд вам потребуются:

  1. Установленный модуль ActiveDirectory (компоненты RSAT на клиентской машине или запуск на контроллере домена).
  2. Права уровня Администраторы домена (Domain Admins) или Администраторы предприятия (Enterprise Admins) в целевом домене (где находится новая группа).

Откройте PowerShell от имени администратора и импортируйте модуль:

Import-Module ActiveDirectory

2. Просмотр текущего значения SID History у группы

Чтобы узнать, есть ли уже у группы записи в истории, используйте Get-ADGroup. Атрибут sIDHistory не входит в набор свойств по умолчанию, поэтому его нужно запрашивать явно через -Properties.

Get-ADGroup -Identity "Имя_Группы" -Properties sIDHistory | Select-Object Name, ObjectSID, sIDHistory

Пример вывода:

Name      ObjectSID                                      sIDHistory
----      ---------                                      ----------
IT-Admins S-1-5-21-111111111-222222222-333333333-1105   {S-1-5-21-999999999-888888888-777777777-512}

3. Добавление SID в историю (Метод через Set-ADGroup)

Начиная с Windows Server 2012, командлет Set-ADGroup поддерживает параметр -SIDHistory.

Добавление одного старого SID:

Set-ADGroup -Identity "New_Domain_Group" -SIDHistory @{Add="S-1-5-21-OLD-DOMAIN-SID-1234"}

Добавление нескольких SID одновременно:

Если группе нужно передать историю нескольких старых групп, передайте массив:

$oldSIDs = @("S-1-5-21-OLD-1111", "S-1-5-21-OLD-2222")
Set-ADGroup -Identity "New_Domain_Group" -SIDHistory @{Add=$oldSIDs}

4. Удаление и очистка SID History

Удаление конкретного SID из истории:

Если в историю попал неверный SID, его можно точечно удалить:

Set-ADGroup -Identity "New_Domain_Group" -SIDHistory @{Remove="S-1-5-21-OLD-DOMAIN-SID-1234"}

Полная очистка истории (сброс атрибута):

Если нужно полностью удалить все старые SID у группы (например, после успешного завершения миграции и перенастройки прав на ресурсы):

Set-ADGroup -Identity "New_Domain_Group" -Clear "sIDHistory"

Или через обнуление значения:

Set-ADGroup -Identity "New_Domain_Group" -SIDHistory $null

5. Массовое добавление (Скрипт для миграции)

Обычно группы мигрируются пачками. Удобно подготовить CSV-файл.

Формат файла C:\Migration\groups_sid.csv:

GroupName,OldSID
"IT-Support","S-1-5-21-111111111-222222222-333333333-1001"
"HR-Managers","S-1-5-21-111111111-222222222-333333333-1002"

PowerShell-скрипт с обработкой ошибок:

$csvPath = "C:\Migration\groups_sid.csv"
$groups = Import-Csv -Path $csvPath -Encoding UTF8

foreach ($group in $groups) {
    try {
        # Проверяем, существует ли группа
        $adGroup = Get-ADGroup -Identity $group.GroupName -ErrorAction Stop

        # Добавляем SID History
        Set-ADGroup -Identity $adGroup -SIDHistory @{Add=$group.OldSID} -ErrorAction Stop
        Write-Host "[SUCCESS] SID History добавлен для группы: $($group.GroupName)" -ForegroundColor Green
    }
    catch {
        Write-Warning "[ERROR] Не удалось обновить группу '$($group.GroupName)': $($_.Exception.Message)"
    }
}

6. Альтернативный метод (через Set-ADObject)

Иногда командлет Set-ADGroup может выдавать ошибки из-за особенностей схемы или версий модуля. В таком случае универсальным является использование низкоуровневого Set-ADObject или прямого редактирования атрибута.



$groupDN = (Get-ADGroup "New_Domain_Group").DistinguishedName
$oldSID = "S-1-5-21-OLD-DOMAIN-SID-1234"

Set-ADObject -Identity $groupDN -Add @{sIDHistory=$oldSID}

Для удаления:

Set-ADObject -Identity $groupDN -Remove @{sIDHistory=$oldSID}

7. Частые ошибки и их решения (Troubleshooting)

Ошибка: The server is unwilling to process the request или Access Denied

* Причина 1 (Кросс-доменная миграция):

Если вы пытаетесь добавить SID из другого домена/леса, целевой домен должен доверять исходному, а фильтрация истории SID (SID Filtering) должна быть отключена.

Решение:

Проверьте настройки доверия.

В некоторых случаях требуется отключить изоляцию карантинного домена:

    # Выполняется для доверия между доменами (пример для netdom)
    netdom trust TargetDomain /domain:SourceDomain /quarantine:no

* Причина 2 (Недостаточно прав):

Учетная запись не входит в группу Domain Admins целевого домена.


Ошибка: The attribute value already exists

  • Причина: Указанный SID уже находится в атрибуте sIDHistory данной группы.
  • Решение: Сначала выполните Get-ADGroup -Properties sIDHistory и убедитесь, что значения там нет.

Ошибка: the directory service cannot perform the requested operation on the rdnc или невалидный SID

  • Причина: Вы пытаетесь добавить SID группы, которая находится в том же самом домене, что и целевая группа. Windows Server защищает от создания "петель" (циклических ссылок) внутри одного домена. Атрибут sIDHistory исторически предназначен для хранения SID из других доменов.

Важно

Используйте конструкцию Set-ADGroup -SIDHistory @{Add="<старый_SID>"} для точечных задач и циклы с Set-ADObject или Set-ADGroup при массовых миграциях, обязательно проверяя наличие прав администратора домена и корректность настроек доверия (если домены разные).


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта