使用ldapsearch列出组成员


12

我们的公司LDAP目录位于Snow Leopard Server开放目录设置中。我正在尝试使用该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

我真正想要的是从顶部示例中根据用户的组成员资格过滤的用户列表,但看起来成员资格是从组端而不是用户帐户端设置的。必须有一种方法可以对此进行过滤,仅导出我需要的内容,对吗?

Answers:


4

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

我要尝试的第一件事是搜索用户提取其所有属性,而不是像您的示例那样限制它。

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

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

*会抓住所有的用户属性(默认行为),并且+将抓住所有的操作属性(特殊属性)。


这是一个旧线程,但是应该提到的是,在OpenLDAP(Open Directory的基础)中,它memberOf是一个操作属性,需要显式请求。区区ldapsearch喜欢这里的建议将不会返回memberOf,即使它的存在。还应该提到的memberOf是,通常不默认启用覆盖,尽管我不知道在OS X和Open Directory中如何处理该覆盖。
daff 2011年

@daff我相信+应该让所有的操作属性...
自由报

的确如此。您更新的ldapsearch作品如广告所示。
daff 2011年

0

您是否打算通过将用户对象放在不同的容器中来表示组?喜欢:

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模块。

我想问你为什么要这么做。拥有属于多个组的用户很麻烦,并且违反了Open Directory的约定。您是否只能将所有用户和组对象复制到您的OpenLDAP服务器,并根据组成员身份而不是用户对象所在的容器进行查询?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.