Як налаштувати обслуговування зворотного членства в групі на сервері openldap? (memberOf)


18

Зараз я працюю над інтеграцією автентифікації LDAP в систему, і хотів би обмежити доступ на основі групи LDAP. Єдиний спосіб зробити це через фільтр пошуку, і тому я вважаю, що єдиним моїм варіантом є використання атрибута "memberOf" у моєму фільтрі пошуку. Наскільки я розумію, що атрибут "memberOf" - це операційний атрибут, який може бути створений сервером для мене в будь-який час, для будь-якого запису "groupOfNames" на сервері створюється новий атрибут "member". Моя головна мета - мати можливість додати атрибут "member" до існуючої записи "groupOfNames" і мати відповідний атрибут "memberOf", який слід додати до DN, який я надаю.

Що мені вдалося досягти поки що:

Я все ще досить новачок у адмініструванні LDAP, але виходячи з того, що я знайшов у посібнику адміністратора openldap, схоже на те, що підтримка Reverse Group Membership Maintence, яка називається "накладення memberof ", дозволила б досягти саме того ефекту, який я шукаю.

На моєму сервері зараз виконується установка пакету (slapd на ubuntu) openldap 2.4.15, який використовує конфігурацію стилю виконання "cn = config". Більшість прикладів, які я знайшов, як і раніше посилаються на старіший "slapd.conf" метод статичної конфігурації, і я намагався зробити все можливе, щоб адаптувати конфігурації до нової моделі на основі каталогу.

Я додав наступні записи, щоб увімкнути модуль накладання memberof:

Увімкніть модуль за допомогою olcModuleLoad

cn=config/cn\=module\{0\}.ldif

dn: cn=module{0}
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
structuralObjectClass: olcModuleList
entryUUID: a410ce98-3fdf-102e-82cf-59ccb6b4d60d
creatorsName: cn=config
createTimestamp: 20090927183056Z
entryCSN: 20091009174548.503911Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009174548Z

Увімкнено накладення для бази даних і дозволило їй використовувати налаштування за замовчуванням (groupOfNames, member, memberOf тощо)

cn=config/olcDatabase={1}hdb/olcOverlay\=\{0\}memberof

dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
entryUUID: 6d599084-490c-102e-80f6-f1a5d50be388
creatorsName: cn=admin,cn=config
createTimestamp: 20091009104412Z
olcMemberOfRefInt: TRUE
entryCSN: 20091009173500.139380Z#000000#000#000000
modifiersName: cn=admin,cn=config
modifyTimestamp: 20091009173500Z

Мій поточний результат:

Використовуючи вищевказану конфігурацію, я можу додати НОВОГО "groupOfNames" з будь-якою кількістю записів "member" і оновити всі залучені ДНЗ атрибутом "memberOf". Це частина поведінки, яку я б очікував. Хоча я вважаю, що з накладкою memberof слід було виконати наступне, я все ще не знаю, як зробити наступне, і я з радістю вітатиму будь-яку пораду:

  1. Додайте атрибут "member" до існуючого "groupOfNames" та мати відповідний атрибут "memberOf" створити автоматично.
  2. Видаліть атрибут "member", а відповідний атрибут "memberOf" буде видалено автоматично.

Відповіді:


10

Я боровся з тим самим, документація openldap мінімалістична і навряд чи корисна. Коли вони перейшли в конфігураційну базу даних (в принципі не погана ідея), всі параметри змінилися, тому коли люди наводять приклад із /etc/ldap/slapd.conf, він не марний із сучасним slapd-конфігурацією (наприклад, Ubuntu).

Нарешті я це налагодив. Ось підсумок ... перший файл LDIF:

dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulePath: /usr/lib/ldap
olcModuleLoad: memberof

Другий файл LDIF:

dn: olcOverlay=memberof,olcDatabase={1}hdb,cn=config
objectClass: olcMemberOf
objectClass: olcOverlayConfig
objectClass: olcConfig
objectClass: top
olcOverlay: memberof
olcMemberOfDangling: ignore
olcMemberOfRefInt: TRUE
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf

Додайте їх у конфігураційну базу даних за допомогою ldapadd (те саме, що звичайний файл конфігурації).

Він не оновлює автоматично існуючі дані в базі даних, тому мені потрібно було використовувати slapcat, щоб скопіювати все у тимчасовий файл, і відвідати кожну групу, видалити групу і знову додати ту саму групу (змушує атрибути memberOf оновлюватись правильно). Якщо ви починаєте з порожньої бази даних, то вона буде правильно оновлювати атрибути, оскільки об’єкти додаються.

Також зауважте, що "olcDatabase = {1} hdb" дуже типовий, але не гарантовано відповідає вашим налаштуванням. Обов’язково перевірте це.


1
Чи не slapadd(на зупинену базу даних) правильний спосіб зробити це?
mad_vs

11

Про це я писав недавно у своєму блозі, www.jordaneunson.com. Я скопіював і вставив відповідні частини.

Що мені довелося зробити, це зупинити службу "slapd" на моєму сервері LDAP та відредагувати мій файл slapd.conf та додати наступні два рядки.

moduleload memberof.la
overlay memberof

У мене вже був groupOfNames під назвою vpn, тому мені довелося створити файл LDIF із таким вмістом:

dn: cn=vpn,ou=Groups,dc=shop,dc=lan
objectclass: groupofnames
cn: vpn
description: Users allowed to connect on VPN
member: uid=jordan,ou=People,dc=shop,dc=lan

І додав це до моєї бази даних ldap

slapadd -f file.ldif

Після цього я запустив сервер ldap у налагодженні, щоб перевірити наявність помилок

slapd -d 99 -f /etc/ldap/slapd.conf 

і я перевірив, чи моє членство у групі "vpn" було вказане у моєму записі користувача.

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

і бам! успіху!

jordan, People, shop.lan
dn: uid=jordan,ou=People,dc=shop,dc=lan
memberOf: cn=vpn,ou=Groups,dc=shop,dc=lan

Тож я запустив резервну послугу і з тих пір мав великий успіх. Для нового інструменту управління графічним інтерфейсом я використовую phpLDAPAdmin і не маю проблем з тим, щоб атрибут memberOf був призначений та не призначений моїм користувачам.

Останнє, що слід зазначити, це те, що атрибут "memberOf" не є частиною основної схеми LDAP v3, і, таким чином, виконуючи ldapsearch, не буде виявлено цей атрибут, якщо спеціально не буде проведено запит. Ось чому в моєму вище прикладі це оголошено в кінці параметрів ldapsearch.

Сподіваюся, це допомагає.

Редагувати: Я щойно перевірив вашу проблему з Apache Directory Studio: доки я ввожу цінність члена атрибуту в цілому, як було зазначено вище, воно працює A-OK. Однак атрибут memberOf не відображається у записі користувача. Це тому, що атрибут memberOf не є частиною схеми LDAPv3. Щоб переконатися, що він є, використовуйте інструмент командного рядка ldapsearch:

ldapsearch -h ldap -x -b "dc=shop,dc=lan" '(uid=jordan)' memberOf 

1
Завантаження модуля та додавання накладання - це саме те, що я зробив на жаль. Як я заявив, проблема полягає не в тому, що атрибути "memberOf" не додаються для нових записів groupOfNames, це те, що вони не додаються, коли я просто додаю атрибут "member" до наявної групи. В даний час я використовую Apache Directory Studio для перегляду та налаштування мого LDAP, щоб він відображав записи memberOf під час перегляду. Справа не в тому, що їх приховують.
emills

1
Як ви створюєте атрибут member у groupOfNames? Це використовується весь DN? наприклад: "uid = користувач, ou = люди, dc = corp, dc = org" чи ви просто заповнюєте їх ім'я користувача? Для того, щоб зворотне відображення працювало, потрібно використовувати цілий DN, щоб memberOf знав, де розмістити зворотну карту.
Джордан Евсон

1
Редагувати: Я щойно перевірив вашу проблему з Apache Directory Studio, доки я ввожу цінність члена атрибуту в цілому, як було зазначено вище, він працює A-OK. Однак атрибут memberOf не відображається у записі користувача. Це тому, що атрибут memberOf не є частиною схеми LDAPv3. Щоб переконатися, що це там, використовуйте інструмент командного рядка ldapsearch. <code> ldapsearch -h ldap -x -b "dc = магазин, dc = lan" '(uid = jordan)' memberOf </code>
Йордан Енсон

1
Я використовую DN у записі члена. Справа не в тому, щоб його не бачити, як я вже заявив, вони додаються лише (і тому їх видно) із додаванням свіжої групиOfNames, а не тоді, коли я додаю атрибут члена до існуючої групи.
emills

1
<quote> вони лише додаються (і тому видно) </quote> Вибачте, але це твердження невірне. Атрибут memberOf не відображається, якщо ви спеціально не запитуєте його. Чи можете ви опублікувати вихідну команду ldapsearch, перелічену вище? Змініть користувача на того, хто повинен мати атрибут memberOf, але ні.
Джордан Евсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.