使用 ldapsearch 列出组成员

使用 ldapsearch 列出组成员

我们的公司 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

我真正想要的是,根据组成员身份筛选出来自上例的用户列表,但看起来成员身份是从组端设置的,而不是从用户帐户端设置的。一定有办法筛选这些,只导出我需要的内容,对吧?

答案1

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

我首先要尝试的是对用户进行搜索,提取他们的所有属性,而不是像您的示例那样进行限制。

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

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

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

答案2

ldapsearch -x \
-b "cn=<your group name>,ou=group,dc=<your org>,dc=com" \
-H ldaps://<ldap server>:<port>

效果很好。

答案3

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

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 服务器,然后根据组成员身份而不是用户对象所在的容器进行查询吗?

相关内容