Когда я делаю это в командной строке bash на CentOS 6.4
ldapsearch -LLL -H ldap://adserver.example.com -x -D someuser@example.com -w somepass -b 'OU=Users,DC=example,DC=com' '(&(objectClass=person)(sAMAccountName=testuser))'
я получил
dn: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com
...
objectClass: person
...
cn: TestUser Surname
sn: Surname
...
distinguishedName: CN=TestUser Surname,OU=Area,OU=Users,DC=example,DC=com
...
memberOf: CN=Group1,OU=Area,OU=Users,DC=example,DC=com
memberOf: CN=Gropu2,OU=Users,DC=example,DC=com
...
sAMAccountName: testuser
Я хочу получить ответ только в том случае, если тестовый пользователь принадлежит к группе с именем X, независимо от того, где находится группа X в иерархии AD. Например: мне нужны данные пользователя с именем testuser, который является членом группы с именем Group1.
Я попытался изменить фильтры на:
но безрезультатно.
Как видно из вывода выше, testuser принадлежит к группам
Когда я использую фильтр '(& (objectClass = person) (sAMAccountName = testuser) (memberOf = CN = Group1, OU = Area, OU = Users, DC = example, DC = com))' он работает, но мне нужен запрос только с именем группы (без использования полного «пути»).
Есть ли способ это сделать?
Я пытаюсь сделать это, потому что мне нужно использовать группы, определенные в Active Directory, как списки управления доступом squid (прокси-сервер Linux). Для этого мне нужно определить внешний тип ACL, например
external_acl_type ADGroup %LOGIN /usr/lib64/squid/squid_ldap_group -R -b "OU=Users,DC=example,DC=com" -D someuser@example.com -w somepass -f "(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=example,DC=com))" -h adserver.example.com
а затем используйте тип для определения списков управления доступом, таких как этот
acl ADGroup_Group1 external ADGroup Group1
acl ADGroup_Group2 external ADGroup Group2
...
http_access allow ADGroup_Group1;
http_access deny ADGroup_Group2;
Когда squid проверяет это «разрешить», он заменяет% u именем входа пользователя и% g именем группы, определенным в ACL (Group1, Group2), а затем выполняет запрос LDAP выше.
Как видно из вышесказанного, «http_access allow ADGroup_Group1;» будет работать по назначению, но «http_access deny ADGroup_Group2;» не будет работать, потому что родительские подразделения Group1 и Group2 отличаются.
Итак, у меня есть 3 альтернативы:
К сожалению нет. Общее имя объекта LDAP не является уникальным в глобальном масштабе; он уникален только относительно своего родительского OU. Итак, если вы могли бы спросить, был ли пользователь членом группы, на основе CN группы, вы потенциально могли бы получить несколько результатов.
По этой причине атрибут memberOf объекта пользователя представляет собой список DN (отличительных имен или полных путей X.500).