Почему LDAP_MATCHING_RULE_IN_CHAIN ​​или 1.2.840.113556.1.4.1941 дают пустые результаты при попытке рекурсивного получения групп пользователей AD? - PullRequest
0 голосов
/ 31 января 2020

Пробовал с запросами 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)

Это просто печать [] для всех контроллеров домена, но у пользователя есть группы и подгруппы, как проверено вручную.

1 Ответ

1 голос
/ 31 января 2020

Я предполагаю, что 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))"

Нет необходимости делать один и тот же запрос на каждом D C. Они все дадут вам одну и ту же информацию. Если вы не получили никаких результатов для этого запроса, то для этого может быть несколько причин:

  1. Что-то не так с данными вашего соединения. Попробуйте сделать другой запрос, который, как вы знаете, должен работать как (objectClass=user) (который будет возвращать все объекты пользователя), и посмотрите, получите ли вы результаты.
  2. Используемый distinguishedName неверен. Убедитесь, что это правильно. Вы можете попытаться найти его следующим образом: (distinguishedName=CN=xx,CN=Users,DC=aa,DC=ss,DC=com) и посмотреть, получите ли вы результаты.
  3. Если в вашем лесу AD есть несколько доменов, возможно, группы, которые вы видите, находятся в другом домене. Если вы не запрашиваете глобальный каталог (G C), вы не найдете группы в других доменах.
...