我正在使用 OpenLDAP,不幸的是它没有“memberOf”属性。通常在查询 Active Directory LDAP 时,您可以编写一个查询:
ldapsearch -Dbinduser -wbinduserpwd -Hldaps://ldapsvr.org -bdn=ldapsvr,dn=org
(&(uid={0},ou=usr,dn=ldapsvr,dn=org)(memberOf=cn=g0001,ou=grps,dn=ldapsvr,dn=org))
但现在我只剩下一个用户:
dn: uid=u0001,ou=usr,dn=ldapsvr,dn=org
cn: u0001
以及如下群组:
dn: cn=g0001,ou=grps,dn=ldapsvr,dn=org
cn: g0001
memberUid: u0001
memberUid: u0002
有人知道 ldapsearch 查询(特别是正确的过滤器)来返回用户 DN 吗?我能想到的最接近的方法是,如果该 memberUid 存在,则返回组 DN,但不返回组中用户的用户 DN。我的想法是,您可以在 ldapsearch 中查询,就像 SQL 一样:
select user.dn
from dit
where grp.cn{g001}.memberUid{u0001} = TRUE
答案1
我认为少于两个查询无法完成此操作:第一个查询获取uid
,第二个查询定位dn
。
解决方法:
- 在 OpenLDAP 中,将组存储在
groupOfNames
对象中。这些对象允许member
属性,其内容是成员的完整信息dn
; - 看看
memberOf
覆盖,它允许您构建反向成员资格(如在 Active Directory 中)。