【问题标题】:Why is LDAP_MATCHING_RULE_IN_CHAIN or 1.2.840.113556.1.4.1941 giving blank results for AD user's recursive groups?为什么 LDAP_MATCHING_RULE_IN_CHAIN 或 1.2.840.113556.1.4.1941 为 AD 用户的递归组提供空白结果?
【发布时间】:2020-01-31 12:46:07
【问题描述】:

尝试使用以下 ldap 查询。

ldap_query = "(&(objectCategory=Person)(objectClass=user)(member:1.2.840.113556.1.4.1941:=CN=xx,CN=Users,DC=aa,DC=ss,DC=com))"
ldap_query = "(member:1.2.840.113556.1.4.1941:=CN=xx,CN=Users,DC=aa,DC=ss,DC=com)"

代码如下。

for hostname in <<domain.domain_controllers>>:
    tls = ldap3.Tls(validate=ssl.CERT_NONE, version=ssl.PROTOCOL_TLS)
    server = ldap3.Server(hostname, get_info=ldap3.ALL, mode=ldap3.IP_V4_PREFERRED, tls=tls, use_ssl=True)
    with ldap3.Connection(server=server, authentication=ldap3.NTLM, auto_bind=True, password=xx, read_only=True, receive_timeout=30,user=yy) as ldap_connection:
        search_parameters = {'search_base': 'DC=aa,DC=ss,DC=com', 'search_filter': ldap_query, 'attributes': ['*']}
        ldap_connection.search(**search_parameters)
        print(ldap_connection.entries)

它只是为所有 DC 打印 [],但用户有组和子组,需要手动检查。

【问题讨论】:

    标签: python active-directory ldap3


    【解决方案1】:

    我假设CN=xx,CN=Users,DC=aa,DC=ss,DC=com 是一个用户对象,并且您正在尝试查找将该用户作为成员的组。我说的对吗?

    第一个查询不起作用,因为它正在搜索具有member 属性集的用户。用户没有member 属性。

    第二个查询将返回具有CN=xx 作为成员的任何对象。具有member 属性的唯一对象是组,但无论如何您都可以进一步将其限制为仅组,这可能会提高查询的性能(因为objectClass 已编入索引):

    ldap_query = "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=CN=xx,CN=Users,DC=aa,DC=ss,DC=com))"
    

    无需对每个 DC 进行相同的查询。他们都会给你同样的信息。如果您没有获得此查询的任何结果,则可能有以下几个原因:

    1. 您的连接详细信息有问题。尝试进行其他一些您知道应该像 (objectClass=user) 一样工作的查询(这将返回所有用户对象),看看是否能得到结果。
    2. 您使用的distinguishedName 不正确。验证它是否正确。您可以尝试这样搜索:(distinguishedName=CN=xx,CN=Users,DC=aa,DC=ss,DC=com) 看看是否有结果。
    3. 如果您的 AD 林有多个域,则您看到的组可能位于另一个域中。除非您查询全局目录 (GC),否则您不会在其他域上找到组。

    【讨论】:

    • 谢谢。基于从上面获得的理解,我这样做了。 1. ldap_query_find_all_groups = "(objectClass=group)" 2. ldap_query_find_our_user = "(&(objectClass=user)(distinguishedName=CN=surname\, name,OU=xx,OU=uu,OU=yy,OU=zz,OU =pp,OU=qq,OU=dd,DC=aa,DC=ss,DC=com))" 3. ldap_query_find_all_groups_with_our_user_as_member = "(&(objectClass=group)(member:1.2.840.113556.1.4.1941:=CN =surname\, name,OU=xx,OU=uu,OU=yy,OU=zz,OU=pp,OU=qq,OU=dd,DC=aa,DC=ss,DC=com))"。虽然前两个查询正在工作,但第三个查询通过 python 代码超时。我可能会单独获得帮助。
    • ldap3.core.exceptions.LDAPSocketReceiveError:错误接收数据:读取操作超时 - 准确地说。
    猜你喜欢
    • 2017-09-19
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多