我想构建一个 LDAP 查询来查找我的 OS X 10.9 服务器上属于“Google Apps 用户”组(简称:googleappsusers)的所有用户。当我在 Google Apps Directory Sync (GADS) 中运行以下查询时,它返回零个用户,尽管我确实在 googleappsusers 组中有一个用户。
(&(objectCategory=users)(memberOf=cn=googleappsusers,cn=groups,dc=nyc1,dc=domain,dc=com))
答案1
Apple Open Directory 不使用 memberOf 用户属性(OSX Server 10.7.5)。
相反,它仅依赖 memberUid 组属性来枚举属于给定组的用户。因此,无法通过查询用户对象来确定用户的组成员身份,而必须枚举与该用户对应的 memberUid 属性的所有组,才能获得特定于用户的组成员身份的完整列表。
当然,可以修改模式以添加 memberOf 属性,但还必须完成必要的工作,以保持组 memberUid 属性值和用户 memberOf 属性值同步。
这与支持 memberOf 用户属性且包含保持属性对值同步的机制的 ldap 实现形成对比(Microsoft Active Directory、带有 memberOf 覆盖的 OpenLDAP)。
[Google Apps Directory Sync 管理指南][1]第 28 页指出:
There are three ways to mark your Google Apps users in LDAP:
• OU: Set up an organizational unit (OU) and move Google Apps users into that unit.
• Group: Create a new group in LDAP, and add Google Apps users as a member of that group.
• Custom Attribute: Create a custom attribute for your users, and set that attribute for new users.
我猜您可以通过其中任何一种方式解决该任务,但只有您自己将 memberOf 属性添加到用户对象中时,查询用户的 memberOf 才有效。它应被视为 Open Directory 的自定义属性。
ldap 对象中的某些属性为空并不是什么大问题,这只意味着它们包含在 ldap 架构中,但尚未为 ldap 对象设置它们的值。在任何现成的 ldap 实现中,您都会看到类似的情况。
答案2
我通常使用 Softerras LDAP Browser 浏览 LDAP 树,以便更快地找到正确的语法/路径。有很多免费的 ldap 浏览器,这只是我偶然发现的一个,没有费心去交换。
如果你有 Mac 客户端,那么 osx 似乎也有几个替代方案:http://en.m.wikipedia.org/wiki/List_of_LDAP_software