Найти все группы AD рекурсивно с учетом учетной записи SAM в одном запросе - PullRequest
2 голосов
/ 24 октября 2019

Возможно ли рекурсивное получение всех групп AD с использованием идентификатора учетной записи SAM пользователя?

Я использовал следующий ldapsearch фильтр

ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(member:1.2.840.113556.1.4.1941:=CN=John Doe,OU=Users,OU=World,DC=domain,DC=local)' dn

для запроса нашего локального LDAPсервер (на основе AD) для получения групп AD пользователя, но это двухэтапный процесс, так как мне нужно полное DN пользователя.

Ранее я использовал для получения прямых групп пользователей пользователями нерекурсивный фильтр:

ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' dn

Можно ли получить результат первого запроса (все группы AD рекурсивно) и один шаг второго запроса (поскольку мне нужно было только знать адрес электронной почты пользователя с именем пользователя

1 Ответ

1 голос
/ 24 октября 2019

Нет, вы не можете без выполнения нескольких запросов.

Если ваш сервер основан на AD , он может использовать атрибут memberOf, и в этом случае вы можете получить группы пользователей в одном запросе. но без вложенных групп :

ldapsearch -D 'domain\john.doe' -W -h 'ldap.domain.com' -b 'DC=domain,DC=local' '(|(userPrincipalName=john.doe@domain.com)(sAMAccountName=john.doe))' memberOf

Было бы замечательно, если бы мы могли использовать расширяемое сопоставление в качестве запроса атрибута в запросе выше, используя memberof:1.2.840.113556.1.4.1941: вместо memberOf,но это не поддерживаемый атрибут, для которого вы можете получать значения при поиске групп, он может использоваться только для расширяемого соответствия в фильтре (см. LDAP_MATCHING_RULE_IN_CHAIN) и специфичен для AD (не реализован вOpenLDAP).

С другой стороны, вы можете искать группы, используя фильтр member:1.2.840.113556.1.4.1941:, но проблема именно в том, что в первую очередь требуется знание dn пользователя.

Может возникнуть идея запроса групп с фильтром, совпадающим с memberUid с помощью имени пользователя или sAMAccountName, но это зависит от того, поддерживаются ли эти атрибуты в вашем каталоге,и я почти уверен, что у вас не может быть расширяемого соответствия с этим, что означает, что этот фильтр не может соответствовать членству во вложенной группе.

Итак, в конце вам нужно использовать второй запрос, чтобы получить все пользовательские dn,и для каждого из них создайте запрос, который получит членство в группе этого пользователя, включая вложенные группы.

...