如何我列出在Active Directory计算机对象的权限为“已验证写入服务主体名称”和“写入服务主体名称为”

问题描述:

能有人帮我用下面的如何我列出在Active Directory计算机对象的权限为“已验证写入服务主体名称”和“写入服务主体名称为”

我试图做一些非常相似这个帖子

Powershell: How do you set the Read/Write Service Principal Name AD Permissions?

基本上我并不需要设置/更改的权利,而是读权限

上的计算机对象在AD(Active Directory)中你“允许”用户,组或比较uter对象(无论是在相同的计算机或另一计算机对象)“烧录”右到计算机对象的下列属性/属性

已验证写入到服务主体名写入服务主体名

因此,让我们在计算机对象Server01上说,用户Domain \ Fred是'允许'到'验证写入服务主体名称'还有'允许'写入服务主体名称

而保罗,约翰和苏珊都有与Fred相同的权利

现在可以说我有在AD域500台计算机与上述权利的组合

我想要得到的计算机对象(我知道如何使用PowerShell或ADSI,.NET做到这一点)

那么我想列出谁拥有这些计算机对象的上述权利(并且这是我卡住的位)如何列出列出权利(而不是每次检查每个用户,组和计算机以查看如果他们拥有这些权利),查看谁可以为我的域中的计算机设置这些SPN相关值。

在此先感谢 __AAnotheruser

非常要弄清楚哪些访问控制项(ACE)授予你在谈论的权利,首先你需要知道的对象类型的GUID是在寻找。 servicePrincipalName属性的GUID为f3a64788-5306-11d1-a9c5-0000f80367c1。已验证的写入共享其属性的GUID,所以我们仍然只是在寻找一个。由于SPN是“公共信息”属性组中的一员,你需要注意它的GUID,也:e48d0154-bcf8-11d1-8702-00c04fb96050

所以,你要寻找的是满足下列条件之一的ACE:

  • 写属性的AccessMask和要么没有对象类型或空GUID 对象类型,因为这将意味着所述ACE授予写 所有性质的能力和属性设置
  • AccessMask写属性的和 f3a64788-5306-的对象类型GUID 11d1-a9c5-0000f80367c1
  • 写属性的AccessMask和 e48d0154-bcf8-11d1-8702-00c04fb96050
  • 自AccessMask(这意味着验证写入)和一个对象类型 的f3a64788-5306-11d1-a9c5-0000f80367c1
GUID的对象类型GUID

另外,'GenericWrite'可以用来代替上面的WriteProperty。也许这样的事情在PowerShell中:

$ServicePrincipalNameProperty = [guid] 'f3a64788-5306-11d1-a9c5-0000f80367c1' 
$PublicInformationPropertySet = [guid] 'e48d0154-bcf8-11d1-8702-00c04fb96050' 
$ValidatedWrite = [System.DirectoryServices.ActiveDirectoryRights]::Self 
$WriteProperty = [System.DirectoryServices.ActiveDirectoryRights]::WriteProperty 
$GenericWrite = [System.DirectoryServices.ActiveDirectoryRights]::GenericWrite 

Get-ADComputer ComputerName -Properties ntSecurityDescriptor | ForEach-Object { 
    $SD = $_.ntSecurityDescriptor 

    $SD.Access | where { 
     # Look for the access rights that would grant write capabilities 
     ($_.ActiveDirectoryRights -band $ValidatedWrite) -eq $ValidatedWrite -or 
     ($_.ActiveDirectoryRights -band $WriteProperty) -eq $WriteProperty -or 
     ($_.ActiveDirectoryRights -band $GenericWrite) -eq $GenericWrite 
    } | where ObjectType -in $null, ([guid]::Empty), $ServicePrincipalNameProperty, $PublicInformationPropertySet 
} 

我认为这工作向你展示你感兴趣的的ACE如果你只关心的IdentityReference,你可以拉说出来,扔剩下的路程。如果您将Get-ADComputer调用更改为使用-Filter,则这应该适用于多台计算机(您可以使用Add-Member将samAccountName添加到每个ACE,以便将它们区分开来)。

还有一件事:这不考虑继承和传播标志或InheritedObjectTypes,所以你可能会看到一些ACE在技术上不会授予你正在寻找的权利......