我们的企业 LDAP 目录位于 Snow Leopard Server Open Directory 设置中。我正在尝试使用该ldapsearch
工具导出 .ldif 文件以导入另一个外部 LDAP 服务器以进行外部身份验证;基本上试图能够在内部和外部使用相同的凭据。
我已经开始ldapsearch
工作,并为我提供了“用户”OU 中所有内容的内容和属性,甚至只过滤到我需要的属性:
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,但不是那个特定品牌的服务器。
我要尝试的第一件事是搜索用户提取所有属性,而不是像您的示例那样限制它。
用户上通常有一个“memberOf”属性,它列出了用户所在组的组名或组 DN,与组中的信息保持同步。如果那里有,那是做你想做的最简单的方法。
将
*
抓取所有用户属性(默认行为),+
并将抓取所有操作属性(特殊属性)。这很好用。
您是否打算通过将用户对象放在不同的容器中来表示组?喜欢:
如果是这样,我希望您将不得不编写一个脚本来按摩 LDIF。尝试优秀的Python-LDAP模块。
我会质疑你为什么要这样做。拥有属于多个组的用户会变得很混乱,并且违反了 Open Directory 的约定。您不能将所有用户和组对象复制到您的 OpenLDAP 服务器,并根据组成员身份而不是用户对象存在于哪个容器中进行查询吗?