列出使用ldapsearch的组成员

我们的企业LDAP目录位于Snow Leopard Server Open Directory设置中。 我正在尝试使用ldapsearch工具导出.ldif文件以导入到另一个外部LDAP服务器,以便与外部进行身份validation; 基本上试图能够在内部和外部使用相同的凭据。

我已经有了ldapsearch工作,并给我的“用户”单位的所有内容和属性,甚至滤除只有我需要的属性:

 ldapsearch -xLLL -H ldap://server.domain.net / -b "cn=users,dc=server,dc=domain,dc=net" objectClass / uid uidNumber cn userPassword > directorycontents.ldif 

这给了我可以导入到远程OpenLDAP服务器的用户和属性列表。

 dn: uid=username1,cn=users,dc=server,dc=domain,dc=net objectClass: inetOrgPerson objectClass: posixAccount objectClass: organizationalPerson uidNumber: 1000 uid: username1 userPassword:: (hashedpassword) cn: username1 

但是,当我在OD“组”而不是“容器”上尝试相同的查询时,结果如下所示:

 dn: cn=groupname,cn=groups,dc=server,dc=domain,dc=net objectClass: posixGroup objectClass: apple-group objectClass: extensibleObject objectClass: top gidNumber: 1032 cn: groupname memberUid: username1 memberUid: username2 memberUid: username3 

我真正想要的是根据组成员身份过滤顶部示例中的用户列表,但看起来成员身份是从组侧而不是用户帐户侧进行设置的。 必须有一种方法来过滤掉,只输出我需要的东西,对吧?

我使用LDAP,但不是特定品牌的服务器。

首先,我会尝试search用户的所有属性,而不是像你的例子那样限制它。

 ldapsearch -xLLL -H ldap://server.domain.net \ -b "cn=users,dc=server,dc=domain,dc=net" uid=username1 \* + 

用户通常会有一个“memberOf”属性,列出用户所在组的组名称或组DN,并与组中的信息保持同步。 如果在那里,这是做你想做的最简单的方法。

*将获取所有用户属性(默认行为), +将获取所有操作属性(特殊属性)。

您是否希望通过让用户对象位于不同的容器中来表示组? 喜欢:

 dn: uid=username1,cn=users,cn=accounting,dc=server,dc=domain,dc=net ... dn: uid=username2,cn=users,cn=engineering,dc=server,dc=domain,dc=net ... 

如果是这样,我希望你将不得不写一个脚本来按摩LDIF。 尝试优秀的Python-LDAP模块。

我会质疑为什么你想这样做。 拥有属于多个用户组的用户会变得很麻烦,这与开放目录的约定相违背。 难道你不能把所有的用户和组对象复制到你的OpenLDAP服务器,并根据组成员身份查询它,而不是用户对象存在于哪个容器?