我注意到,当我使用 Powershell 获取 Active Directory 域安全组的组成员身份时,Powershell cmdletGet-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
参数,以便 cmdlet 针对特定的 DC,然后在重现错误时检查该 DC 上的安全日志,并且没有生成相关的安全故障审核。我打开了密钥中的所有诊断注册表项,services\NTDS\Diagnostics
但这也没有在目录服务日志中产生任何有趣的内容。
如果我从 MyGroup 中删除驻留在其他域中的组成员,则该 cmdlet 可以正常运行。
有趣的是,我注意到,如果我在 DC 本身上本地运行该命令,它会起作用。但是当我使用相同的用户帐户(域管理员)从成员服务器远程运行该命令时,它会失败。
知道什么地方出了问题吗?
答案1
Active Directory Powershell cmdlet,例如Get-ADGroupMember
使用 Active Directory Web 服务 (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.............
.........
将注意力转向票证标志字段。缺少某些内容。此票证不可转发。
为什么票不能转发?
我取消选中该复选框,用刷新我的 Kerberos 票证klist purge
,通过执行任何需要获取新 tgt 的网络活动来获取一个新的 tgt(如果我还没有 tgt,)(gpupdate
是一个很好的例子),再次检查 TGT,我注意到它现在包含可转发标志。
现在,Powershell cmdlet 可以在成员服务器上按预期工作。
当组包含来自另一个域的安全主体(用户或组)时,将返回必须追踪的引荐。为了追踪该引荐,ADWS 必须模拟进行原始调用的用户。如果该用户帐户上的 Kerberos 委派被禁用,则无法进行模拟/委派。
答案2
随着最近的 Windows Server 安全更新,此行为已经改变。
- Windows Server(PFE 版)中跨信任的票证授予票证 (TGT) 委派的更改
- Windows Server 中跨传入信任的 TGT 委派更新
- 运行 netdom /EnableTGTDelegation:No 后无法枚举具有 FSP 成员的组的组成员身份
现在,安全默认设置是禁用跨林信任的 TGT 委派。因此,在 Microsoft 决定修复此问题之前,Get-ADGroupMember 将在具有跨林外部安全主体的组上失败。在此之前,一种解决方法是使用:Get-ADGroup -Properties member