Перелічення членів групи за допомогою ldapsearch


12

Наш корпоративний каталог LDAP розміщений у налаштуваннях Open Leopard Server Open Directory. Я намагаюся використовувати ldapsearchінструмент для експорту файлу .ldif для імпорту на інший зовнішній сервер LDAP для аутентифікації зовні; в основному намагаються використовувати однакові облікові дані всередині та зовні.

Я ldapsearchпрацюю і надаю мені вміст і атрибути всього в "Користувачі" OU, і навіть фільтрую лише ті атрибути, які мені потрібні:

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

@daff Я вважаю, що + повинен отримати всі експлуатаційні атрибути ...
freiheit

А, справді. Ваші оновлені ldapsearchроботи відображаються як оголошено.
daff

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.