我尝试构建一个到 MS Active Directory 的 ldap 查询。我发现有一个 LDAP_MATCHING_RULE_IN_CHAIN 类型可以这样做。这导致以下语法:
(&(sAMAccountName=Benna)(memberof:1.2.840.113556.1.4.1941:=CN=Group1,OU=Root,DC=domain,DC=local))
问题是:
查询*在线枚举第一个嵌套组。
在我的示例中,Group1 具有以下成员组:
- 域管理员
- 域成员
- 域计算机
Benna 在组域成员中,但查询没有给我结果*。
当我将过滤器更改为
(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=CN=Group1,OU=Root,DC=domain,DC=local))
我可以看到,该查询仅枚举组“域管理员”* 的成员。
这就是它与我上面的查询不匹配的原因。
为什么会发生这种情况?
*用 adsiedit.msc 测试
编辑:
好的 - 看起来这就是原因
https://support.microsoft.com/en-us/kb/275523
但是是否也可以为 primaryGroupID 属性构建对嵌套组的查询?或者有没有办法有一个单一的 ldap 查询,你可以用它来查找用户是否是组的成员(也可以有嵌套组)?
谢谢,托马斯
好的 - 它接缝,限制是域林级别低于 2003 年。
https://support.microsoft.com/en-us/kb/275523
将森林模式更改为 2003 后,它应该可以工作。我改变了,但目前它不起作用......将等待几分钟并希望它是解决方案。
使用旧的命令行工具非常烦人,但使用 Remore 服务器管理工具获得的 ActiveDirectory Powershell 模块有一种返回所有嵌套组成员的简单方法:
Get-ADGroupMember "组名" -recursive
这是解释该命令的 kb 文章:https ://technet.microsoft.com/de-de/library/ee617193.aspx
如果您的 AD 至少在 Server 2008 R2 上,则此方法有效。
使用纯 LDAP 查询来确定嵌套组成员身份可能会很棘手。请注意,memberOf 是一个构造属性。进一步注意,primaryGroupID 只是一个 ID。虽然 MMC 将在帐户的成员选项卡中显示主要组,但对象的可分辨名称实际上并未放置在该组的成员属性中。
正如 megamorf 所指出的,您需要递归地查询每个组的组成员信息。我公司的产品 Carbon 是一种基于 Web 的 LDAP 管理工具,除其他外,它可以将嵌套组成员身份显示为图形。由于它是基于网络的,只要您有支持的浏览器,您就可以在 Linux(或 Mac 或 Windows)机器上使用它。在steelhive.com上查看。有一个免费的演示,您可以下载。它是针对 VMware ESXi 5+ 的 OVA / 虚拟设备。