如何找到用户所属的所有组?(LDAP)

6

我正在尝试获取某个用户是成员的所有组。

我在ldap中有以下结构

o=myOrganization
     ou=unit1
         cn=admin
         cn=guess

并且

ou=users
    cn=ann
    cn=bob
    cn=carla
  • myOrganizationOrganization的一个实例。
  • unit1OrganizationUnit的一个实例。
  • adminguess都是GroupOfNames,并且每个人都是成员。
  • annbobcarla都是Person的实例。

目前,我正在使用Python上的ldap模块,以下是我的代码:

import ldap
l = ldap.initialize("ldap://my_host")
l.simple_bind_s("[my_dn]", "[my_pass]")
ldap_result = l.search("[BASE_DN]", ldap.SCOPE_SUBTREE, "(&(objectClass=Person)(cn=ann))", None)
res_type, data = l.result(ldap_result, 0)
print(data)

我能够获取用户名为ann的用户,但是我该如何获取Ann所属的组?

我尝试了这个页面中的以下方法:

search_filter='(|(&(objectClass=*)(member=cn=ann)))'
results = l.search_s([BASE_DN], ldap.SCOPE_SUBTREE, search_filter, ['cn',])

但是我得到了一个空列表。我也尝试了各种查询组合,但它们都返回空值。

PS:我正在使用Linux机器上的OpenLDAP。


我尝试了此页面上列出的内容...但没有成功。请问,具体来说,列出的查询是怎样失败的?结果为空?还是出现了错误消息? - John Gordon
另外,你只是在寻找Ann是直接成员的组吗?(如果Ann是一个组的成员,而该组本身是另一个组的成员怎么办?) - John Gordon
你是否在使用Windows / Active Directory?如果是的话,我建议使用pyad包。我知道这对你的确切问题并不是特别有帮助,但我发现pyad比python-ldap更好用。这将非常简单,例如user.get_membersOf(),它还允许您指定范围以及是否递归地包括子组。 - sytech
@JohnGordon 当我从网站运行查询时,我得到了一个空列表,而且我只想查找直接成员。我会更新我的问题以使其更清晰。 - Rodolfo
@sytech 我在一台Linux机器上使用OpenLDAP。 - Rodolfo
我知道你指定了OpenLDAP,但是如果有人因此遇到困难,也许以下信息可以帮助他们... 对于Active Directory,您需要一直使用distinguishedName来获取具有给定成员身份的用户,使用这样的search_filter... 我最终找到了这个相同的Q&A:https://dev59.com/questions/0G025IYBdhLWcg3wIyOf - Richard
1个回答

5

member=cn=ann 还不够。你需要使用 ann 的完整 DN,可能是这样的:

member=cn=ann,ou=users,dc=company,dc=com

成功了!我还需要更改的另一件事是 (objectClass=Person) 改为 (objectClass=groupOfNames) - Rodolfo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接