Назад | Перейти на главную страницу

Get-ADGroupMember $ Group не работает, если $ Group содержит участников из других доменов

Я заметил, что когда я использую Powershell для получения членства в группе безопасности домена Active Directory, командлет Powershell Get-ADGroupMember $Group выдает сообщение об ошибке:

PS C:\> get-adgroupmember MyGroup
get-adgroupmember : An operations error occurred
At line:1 char:1
+ get-adgroupmember MyGroup
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (MyGroup:ADGroup) [Get-ADGroupMember], ADException
    + FullyQualifiedErrorId : ActiveDirectoryServer:8224,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember

Я попытался указать -server $DC таким образом, чтобы командлет нацелен на конкретный контроллер домена, а затем я проверяю журналы безопасности на этом контроллере домена, воспроизводя ошибку и не создавая соответствующих аудитов сбоев безопасности. Я обнаружил все записи реестра диагностики в services\NTDS\Diagnostics key, и это также не приводит к появлению ничего интересного в журналах служб каталогов.

Если я удалю из MyGroup членов группы, которые находятся в другом домене, командлет не будет работать.

Интересно, что я заметил, что если я запускаю команду локально на самом DC, она работает. Но когда я запускаю команду удаленно с рядового сервера, используя ту же учетную запись пользователя (который является администратором домена), это не удается.

Есть идеи, что случилось?

Командлеты Active Directory Powershell, такие как Get-ADGroupMember использовать веб-службы Active Directory (ADWS).

Заявление, такое как

"она отлично работает, когда я запускаю команду локально на сервере, но не работает, когда я запускаю ее с удаленного сервера"

Часто является признаком того, что основная проблема заключается в делегировании Kerberos.

Многие службы используют делегирование Kerberos, и ADWS не исключение.

Итак, давайте посмотрим на мой билет на выдачу билетов Kerberos (TGT):

C:\> klist tgt

Current LogonId is 0:0x95ec6

Cached TGT:

ServiceName        : krbtgt
TargetName (SPN)   : krbtgt
ClientName         : Administrator
DomainName         : FABTOSO.COM
TargetDomainName   : FABTOSO.COM
AltTargetDomainName: FABTOSO.COM
Ticket Flags       : 0xe10000 -> renewable initial pre_authent name_canonicalize
Session Key        : KeyType 0x12 - AES-256-CTS-HMAC-SHA1-96
                   : KeyLength 32 - 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00
StartTime          : 4/21/2016 18:42:34 (local)
EndTime            : 4/22/2016 4:42:34 (local)
RenewUntil         : 4/28/2016 18:42:34 (local)
TimeSkew           :  + 0:00 minute(s)
EncodedTicket      : (size: 1109)
0000  61 82 04 51 30 82 04 4d:a0 03 02 01 05 a1 0d 1b  a..Q0..M........
0010  0b 46 41 42 54 4f 53 4f:2e 43 4f 4d a2 20 30 1e  .FABTOSO.COM. 0.
0020  a0 03 02 01 02 a1 17 30:15 1b 06 6b 72 62 74 67  .......0...krbtg
0030  74 1b 0b 46 41 42 54 4f:53 4f 2e 43 4f 4d a3 82  t..FABTOSO.COM..
0040  04 13 30 82 04 0f a0 03:02 01 12 a1 03 02 01 02  ..0.............
.........

Обратите внимание на поле Ticket Flags. Что-то пропало. Этот билет не пересылаемый.

Почему билет нельзя пересылать?

Я снимаю этот флажок, сбрасываю билеты Kerberos с помощью klist purge, получите новый tgt, выполнив любую сетевую активность, которая требует получения нового tgt, если у меня его еще нет, (gpupdate - хороший пример), еще раз проверьте TGT, и я заметил, что теперь он включает флаг пересылки.

Теперь командлет Powershell работает должным образом от рядового сервера.

Когда группа содержит участников безопасности (пользователей или группы) из другого домена, возвращается ссылка, которую необходимо отслеживать. Чтобы преследовать этого реферала, ADWS должен выдавать себя за пользователя, который совершил исходный звонок. Если делегирование Kerberos отключено для этой учетной записи пользователя, олицетворение / делегирование невозможно.

Это поведение изменилось с последними обновлениями безопасности Windows Server.

По умолчанию теперь по умолчанию отключено делегирование TGT через доверительные отношения лесов. Из-за этого Get-ADGroupMember не сможет работать в группах с участниками внешней безопасности между лесами, пока Microsoft не решит проблему. А пока можно использовать следующее решение: Get-ADGroup -Properties member