Назад | Перейти на главную страницу

Как настроить обратное обслуживание членства в группе на сервере openldap? (член)

В настоящее время я работаю над интеграцией аутентификации LDAP в систему, и я хотел бы ограничить доступ на основе группы LDAP. Единственный способ сделать это - использовать фильтр поиска, и поэтому я считаю, что единственным вариантом для меня будет использование атрибута memberOf в моем фильтре поиска. Насколько я понимаю, атрибут «memberOf» является рабочим атрибутом, который может быть создан сервером для меня в любое время, когда новый атрибут «member» создается для любой записи «groupOfNames» на сервере. Моя основная цель - иметь возможность добавить атрибут "member" к существующей записи "groupOfNames" и добавить соответствующий атрибут "memberOf" к предоставленному мной DN.

Чего мне удалось добиться до сих пор:

Я все еще новичок в администрировании LDAP, но, судя по тому, что я нашел в руководстве администратора openldap, похоже Поддержка обратного членства в группе aka "memberof overlay" достигнет именно того эффекта, который я ищу.

На моем сервере в настоящее время выполняется установка пакета (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" и обновить все задействованные DN с помощью атрибута "memberOf". Это часть ожидаемого поведения. Хотя я считаю, что с оверлеем memberof следовало выполнить следующее, я все еще не знаю, как это сделать, и был бы рад получить любой совет:

  1. Добавьте атрибут "member" к СУЩЕСТВУЮЩЕМУ "groupOfNames", и соответствующий атрибут "memberOf" будет создан автоматически.
  2. Удалите атрибут "member", и соответствующий атрибут "memberOf" будет удален автоматически.

Я недавно написал об этом в своем блоге 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

Так что я снова запустил сервис slapd и с тех пор добился большого успеха. Для нового инструмента управления графическим интерфейсом я использую 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 

Я боролся с тем же самым, документация 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" очень типично, но не обязательно соответствует вашей настройке. Обязательно проверьте это.