我们的企业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服务器,并根据组成员身份查询它,而不是用户对象存在于哪个容器?