Active directory Ldap查询以获取ACL

Active directory Ldap查询以获取ACL,active-directory,ldap,acl,ldap-query,Active Directory,Ldap,Acl,Ldap Query,有没有办法通过使用LDAP查询获取Active Directory中对象的ACL?我浏览了一遍,但找不到任何相关的东西,可以作为获取对象ACL的示例 我看到了一个问题,但没有答案。我试图获得如下示例中的数据,其中可以看到主体的所有权限- 任何显示如何检索的示例或文档都会很有帮助。任何对象的权限都保存在一个名为nTSecurityDescriptor的文件中。这是一个二进制属性,需要进一步解释,可能使用比shell更好的编程语言 棘手的是,除非您以管理员身份绑定到AD,否则您将无权获取安全描述符

有没有办法通过使用LDAP查询获取Active Directory中对象的ACL?我浏览了一遍,但找不到任何相关的东西,可以作为获取对象ACL的示例

我看到了一个问题,但没有答案。我试图获得如下示例中的数据,其中可以看到主体的所有权限-


任何显示如何检索的示例或文档都会很有帮助。

任何对象的权限都保存在一个名为
nTSecurityDescriptor
的文件中。这是一个二进制属性,需要进一步解释,可能使用比shell更好的编程语言

棘手的是,除非您以管理员身份绑定到AD,否则您将无权获取安全描述符的系统ACL(SACL)部分,因此域控制器根本不会返回描述符。但是,您可以包含其他信息,以表明您只对安全描述符的其他部分(所有者、组和/或DACL)感兴趣。您在窗口中看到的权限是DACL的一部分

ldapsearch的示例:

$ ldapsearch -Q -LLL -o ldif-wrap=no -h addc.domain.local -b "dc=domain,dc=
local" -E '!1.2.840.113556.1.4.801=::MAMCAQc=' "sAMAccountName=Domain Admins" nTSecurityDescriptor

dn: CN=Domain Admins,CN=Users,DC=domain,DC=local
nTSecurityDescriptor:: AQAEnHQWAACQFgAAAAAAABQAAAAEAGAWawAAAAUKSAAHAAAAAwAAAAHJdcnqbG9LgxnWf0VElQYUzChINxS8RZsHrW8BXl8oAQUAAAAAAAUVAAAA/XexVgt12XaDPStG3BcAAAUKSAAHAAAAAwAAAAHJdcnqbG9LgxnWf0VE...
这使用
-E
开关使用附加的搜索控件,其值为
MAMCAQc=
,这是ASN.1结构的base64编码BER编码值,标志值为7(表示获取所有者、组和DACL信息-除SACL外的所有信息):

如果您只对DACL感兴趣,可以使用值4,即:

$ printf "\x30\x03\x02\x01\x04" | base64
MAMCAQQ= 
解析安全描述符值非常复杂,我建议使用一些库,例如用于Java实现

$ printf "\x30\x03\x02\x01\x04" | base64
MAMCAQQ=