Я пытаюсь создать ldap-запрос к MS Active Directory. Я обнаружил, что для этого существует тип LDAP_MATCHING_RULE_IN_CHAIN. В результате получается следующий синтаксис:
(&(sAMAccountName=Benna)(memberof:1.2.840.113556.1.4.1941:=CN=Group1,OU=Root,DC=domain,DC=local))
Проблема в следующем:
Запрос * перечислить в Интернете первую вложенную группу.
В моем примере Group1 имеет следующие группы участников:
И Бенна находится в Группе Членов Домена, но запрос не дал мне результата *.
Когда я меняю фильтр на
(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=CN=Group1,OU=Root,DC=domain,DC=local))
Я вижу, что запрос перечисляет только членов группы «Администраторы домена» *.
Вот почему он не соответствует моему запросу выше.
По какой причине это происходит?
* Протестировано с помощью adsiedit.msc
РЕДАКТИРОВАТЬ:
хорошо - похоже, что это причина
https://support.microsoft.com/en-us/kb/275523
но можно ли построить запрос к вложенной группе также для атрибута primaryGroupID? Или есть ли способ создать единый запрос ldap, с помощью которого вы можете определить, является ли пользователь членом группы (которая также может иметь вложенные группы)?
Спасибо, Томас
Определение членства во вложенной группе может быть сложной задачей с использованием чистых запросов LDAP. Обратите внимание, что memberOf - это сконструированный атрибут. Также обратите внимание, что primaryGroupID - это только идентификатор. Хотя MMC покажет основные группы на вкладке членства учетной записи, отличительное имя объекта фактически не помещается в атрибут членства этой группы.
Как отмечает мегаморф, вам необходимо рекурсивно запрашивать информацию о членстве в каждой группе. Продукт моей компании, Carbon, представляет собой веб-инструмент управления LDAP, который, помимо прочего, может отображать членство во вложенных группах в виде графика. Поскольку это веб-интерфейс, вы можете использовать его из Linux (или Mac, или Windows), если у вас есть поддерживаемый браузер. Проверьте это на steelhive.com. Вы можете скачать бесплатную демоверсию. Он представляет собой виртуальное устройство OVA, ориентированное на VMware ESXi 5+.
Довольно неприятно работать со старыми инструментами командной строки, но модуль ActiveDirectory Powershell, который вы получаете с инструментами администрирования сервера Remore, имеет простой способ вернуть всех членов вложенной группы:
Get-ADGroupMember "имя группы" -рекурсивно
Вот статья в kb, в которой объясняется команда: https://technet.microsoft.com/de-de/library/ee617193.aspx
Это работает, если ваш AD установлен как минимум на Server 2008 R2.
ок - похоже, что ограничение сделано на уровень леса домена ниже 2003.
https://support.microsoft.com/en-us/kb/275523
После изменения режима леса на 2003 он должен работать. Я изменил, но в настоящее время это не работает ... подожду несколько минут и надеюсь, что это решение.