我注意到,当我使用 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 本身上本地运行该命令,它就可以工作。但是,当我使用相同的用户帐户(域管理员)从成员服务器远程运行命令时,它会失败。
知道有什么问题吗?
Active Directory Powershell cmdlet,例如
Get-ADGroupMember
使用 Active Directory Web 服务 (ADWS)。声明如
通常是一个危险信号,表明潜在的问题是 Kerberos 委派。
许多服务都利用了 Kerberos 委派,ADWS 也不例外。
那么让我们看看我的 Kerberos 票证授予票证(TGT):
将注意力转向 Ticket Flags 字段。缺了点什么。此票不可转寄。
为什么机票不能转发?
我取消选中该复选框,使用 刷新我的 Kerberos 票证
klist purge
,通过执行任何需要获取新 tgt(如果我还没有)的网络活动来获取新 tgt,(gpupdate
是一个很好的例子,)再次检查 TGT,并且我注意到它现在包含了可转发标志。现在,Powershell cmdlet 在成员服务器上按预期工作。
当组包含来自另一个域的安全主体(用户或组)时,将返回一个必须跟踪的引用。为了追逐该推荐,ADWS 必须冒充发起原始呼叫的用户。如果在该用户帐户上禁用了 Kerberos 委派,则无法进行模拟/委派。
此行为已随着最近的 Windows Server 安全更新而改变。
现在的安全默认设置是禁用跨林信任的 TGT 委派。因此,在 Microsoft 决定解决此问题之前,Get-ADGroupMember 将在具有跨林外部安全主体的组上失败。在此之前,一种解决方法是使用:
Get-ADGroup -Properties member