我们发现 Active Directory LDAP 查询存在一个奇怪的问题。
情况是:我们在给定的 OU 中有一个安全组。该安全组需要移动到完全不同的OU。
我们有一个使用 LDAP 对 AD 进行身份验证的应用程序,它使用 Active Directory LDAP_MATCHING_RULE_IN_CHAIN进行查询,因此它支持嵌入式组:
(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=SA Users,OU=System Administrators,OU=Departments,DC=ds,DC=example,DC=com)
一个示例查询是:
ldapsearch -LLL -x -W -H 'ldap://ny-dc02.ds.example.com:389' -D '[binding account details]' -b 'OU=Departments,DC=ds,DC=example,DC=com' '(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=SA Users,OU=System Administrators,OU=Departments,DC=ds,DC=example,DC=com)' dn
它按预期返回属于所请求 OU 的用户的完整列表。
但是,如果我们将该组移出Departments\System Administrators
和移入Security Groups\System Administration
(并适当地更新查询):
(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=System Administration,OU=Security Groups,DC=ds,DC=example,DC=com)
例如:
ldapsearch -LLL -x -W -H 'ldap://ny-dc02.ds.example.com:389' -D '[binding account details]' -b 'OU=Security Groups,DC=ds,DC=example,DC=com' '(memberOf:1.2.840.113556.1.4.1941:=CN=SystemAdministrators,OU=System Administration,OU=Security Groups,DC=ds,DC=example,DC=com)' dn
我们从 LDAP 搜索中根本没有返回任何结果。
我们的第一个想法是“哦,它可能正在缓存一些东西”。但是我们将安全组留在其新 OU 中几个小时,我们仍然看到相同的结果。
有没有人见过这样的事情?关于下一步在哪里进行故障排除的任何建议?
搜索库应该设置为用户所在的位置,而不是组所在的位置(组的位置已包含在选项中)。因此,无论组在哪里,您的搜索基础都应该保持不变(如果用户没有移动)。
权限呢。应用程序是否有权在新的 OU 中进行搜索?我会查看新旧 OU 的有效权限。
另外,我会确认新位置实际上是一个 OU。可以在 AD 中创建“容器”对象,就像“用户”容器不是 OU 一样。因此,DN 将从:CN=SystemAdministrators,OU=System Administration,OU=Security Groups,DC=ds,DC=example,DC=com 更改为:CN=SystemAdministrators, CN=System Administration ,OU=Security Groups,DC =ds,DC=示例,DC=com