Список членов группы, использующих ldapsearch


12

Наш корпоративный каталог LDAP размещен на открытой директории Snow Leopard Server. Я пытаюсь использовать ldapsearchинструмент для экспорта файла .ldif для импорта на другой внешний сервер LDAP для внешней аутентификации; в основном пытается использовать одни и те же учетные данные внутри и снаружи.

Я ldapsearchпоработал и дал мне содержимое и атрибуты всего в подразделении «Пользователи» и даже отфильтровал только те атрибуты, которые мне нужны:

ldapsearch -xLLL -H ldap://server.domain.net / 
 -b "cn=users,dc=server,dc=domain,dc=net" objectClass / 
 uid uidNumber cn userPassword > directorycontents.ldif

Это дает мне список пользователей и свойств, которые я могу импортировать на мой удаленный сервер OpenLDAP.

dn: uid=username1,cn=users,dc=server,dc=domain,dc=net
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: organizationalPerson
uidNumber: 1000
uid: username1
userPassword:: (hashedpassword)
cn: username1

Тем не менее, когда я пытаюсь выполнить тот же запрос в группе OD, а не в контейнере, результаты выглядят примерно так:

dn: cn=groupname,cn=groups,dc=server,dc=domain,dc=net
objectClass: posixGroup
objectClass: apple-group
objectClass: extensibleObject
objectClass: top
gidNumber: 1032
cn: groupname
memberUid: username1
memberUid: username2
memberUid: username3

Что мне действительно нужно, так это список пользователей из верхнего примера, отфильтрованный по членству в группах, но похоже, что членство устанавливается со стороны группы, а не со стороны учетной записи пользователя. Должен быть способ отфильтровать это и экспортировать только то, что мне нужно, верно?

Ответы:


4

Я работаю с LDAP, но не с той конкретной маркой сервера.

Первое, что я бы попробовал, - это поиск пользователей, использующих все свои атрибуты, вместо того, чтобы ограничивать его, как это делает ваш пример.

ldapsearch -xLLL -H ldap://server.domain.net \
    -b "cn=users,dc=server,dc=domain,dc=net" uid=username1 \* +

Часто у пользователя есть атрибут «memberOf», который перечисляет имя группы или DN группы для групп, в которых находится пользователь, и синхронизируется с информацией в группе. Если это так, то это самый простой способ сделать то, что вы хотите.

Он *захватит все пользовательские атрибуты (поведение по умолчанию), а +захватит все рабочие атрибуты (специальные атрибуты).


Это старый поток, но следует отметить, что в OpenLDAP (основа Open Directory) memberOfявляется операционным атрибутом, который необходимо запрашивать явно. Простое ldapsearchпредложенное здесь не вернется memberOf, даже если оно существует. Следует также отметить, что memberOfоверлей обычно не включен по умолчанию, хотя я не знаю, как это обрабатывается в OS X и Open Directory.
Дафф

@daff Я считаю, что + должен получить все операционные атрибуты ...
freiheit

Ах, действительно. Ваше обновление ldapsearchработает как рекламируется.
Дафф

0

Вы хотите представлять группы, располагая объекты пользователя в разных контейнерах? Подобно:

dn: uid=username1,cn=users,cn=accounting,dc=server,dc=domain,dc=net
...
dn: uid=username2,cn=users,cn=engineering,dc=server,dc=domain,dc=net
...

Если это так, я ожидаю, что вам придется написать сценарий для массажа LDIF. Попробуйте отличные модули Python-LDAP .

Я хотел бы спросить, почему вы хотите это сделать, хотя. Беспорядочно иметь пользователей, принадлежащих к нескольким группам, и противоречит соглашениям Open Directory. Разве вы не можете просто скопировать все объекты пользователя и группы на свой сервер OpenLDAP и запросить их на основе членства в группе, а не в каком контейнере существует объект пользователя?


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.