Вопрос или проблема
У меня есть установка OpenLDAP на Debian 7.1 (OpenLDAP 2.4.31), и я пытаюсь настроить наложение memberof. Моя конфигурация такая же, как я читал на многих сайтах в интернете, однако она все равно не работает.
Проблема в том, что атрибуты memberOf сущностей обновляются только тогда, когда я создаю группу, но не обновляются, когда я модифицирую или удаляю группу. На самом деле, этот же вопрос уже задавался здесь: Как мне настроить обратное управление членством группы на сервере openldap? (memberOf), но даже если он отмечен как решенный, я не смог найти никакой полезной информации в ответах. (Даже автор оригинального вопроса не смог ничего сделать с ответами согласно комментариям…)
Моя конфигурация выглядит так: 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
structuralObjectClass: olcModuleList
А для модуля: cn=config/olcDatabase={1}hdb/olcOverlay={0}memberof.ldif
dn: olcOverlay={0}memberof
objectClass: olcMemberOf
objectClass: olcOverlayConfig
olcOverlay: {0}memberof
structuralObjectClass: olcMemberOf
olcMemberOfGroupOC: groupOfNames
olcMemberOfMemberAD: member
olcMemberOfMemberOfAD: memberOf
olcMemberOfRefInt: TRUE
Группа, которую я добавляю:
dn: cn=test,ou=services,dc=x,dc=y
cn: test
objectClass: groupOfNames
objectClass: top
description: тестовая группа
member: cn=Almafa Teszt,ou=users,dc=x,dc=y
Запрос, который я выполняю:
$ ldapsearch -LLL -h localhost -x -D cn=admin,dc=x,dc=y -b u=users,dc=x,dc=y -W '(memberOf=cn=test,ou=services,dc=x,dc=y)' memberOf
Таким образом, проблема не в том, как запросить атрибут, а в том, что после изменения или удаления группы результат поиска не меняется…
Обновление: Что касается ответа Брайана, я также настроил наложение refint, с следующей конфигурацией:
$ ldapsearch -LLL -b cn=module{0},cn=config
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
olcModuleLoad: {1}memberof.la
olcModuleLoad: {2}refint
$ ldapsearch -LLL -b olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
dn: olcOverlay={1}refint,olcDatabase={1}hdb,cn=config
objectClass: olcConfig
objectClass: olcOverlayConfig
objectClass: olcRefintConfig
objectClass: top
olcOverlay: {1}refint
olcRefintAttribute: memberof member manager owner
Но это не исправило наложение memberof и само по себе не сработало. Когда я изменил имя члена группы, атрибут member группы не обновился. Могут ли эти две проблемы быть связаны?
Похоже, вам может понадобиться настроить наложение refint, которое помогает поддерживать целостность ссылок в директории в таких ситуациях, как вы описали. Есть страница по адресу http://www.zarafa.com/wiki/index.php/OpenLDAP_referential_integrity, которая может быть полезна для настройки этого наложения.
У нас была такая же проблема (те же симптомы, что и у вас). Оказалось, что у нас отсутствовал olcRootDN
в нашем dn: olcDatabase={1}hdb,cn=config
. Так что добавьте (например) olcRootDN: cn=admin,cn=config
туда.
Ответ или решение
Проблема с обновлением атрибута memberOf
в OpenLDAP может быть связана с неправильной конфигурацией наложений (overlays) memberof
и refint
или же с отсутствием соответствующих прав для изменения данных в базе. Рассмотрим основные шаги, которые помогут настроить корректную работу этих наложений и обеспечить автоматическое обновление атрибутов при изменении или удалении группы.
1. Проверка конфигурации наложения memberof
Убедитесь, что вы правильно настроили наложение memberof
. Ваша конфигурация, по всей видимости, выглядит корректно, однако стоит проверить следующие моменты:
-
Объект класса: Проверьте, что объектная схема поддерживает использование
memberOf
. Это можно сделать с помощью запроса к LDAP, например:ldapsearch -LLL -b cn=schema,cn=config "(objectClass=*)" | grep "olcObjectClasses"
Убедитесь, что
memberOf
присутствует в выводе. -
Параметры наложения: Ваши параметры
olcMemberOfGroupOC
,olcMemberOfMemberAD
иolcMemberOfMemberOfAD
выглядят корректно. Убедитесь, что в атрибутеmember
группы содержатся правильные DN пользователей.
2. Проверка наложения refint
Наложение refint
отвечает за поддержание ссылочной целостности в LDAP. Это особенно важно при изменении или удалении групп. Убедитесь, что вы правильно настроили его:
-
Объект
olcRefintAttribute
: Убедитесь, что атрибуты, указанные вolcRefintAttribute
, соответствуют тем, что используются для членства в группах. Если вы используетеmember
в групповом объекте, он должен присутствовать вolcRefintAttribute
. -
Права доступа: Проверьте, что у вашего LDAP-администратора (
olcRootDN
) есть соответствующие права для выполнения операций обновления. Возможно, стоит добавитьolcRootDN
в базу данных, если он отсутствует.
Пример для добавления olcRootDN
:
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=admin,dc=x,dc=y
3. Логирование и отладка
Проверьте журналы OpenLDAP. Они могут предоставить более детальные данные о том, почему в случае изменения или удаления группы атрибут memberOf
не обновляется. Включите более подробное логирование, чтобы отследить операции, производимые на сервере:
loglevel stats,stats2
4. Проверка синхронизации
После внесённых изменений всегда выполняйте повторный поиск и проверьте обновление атрибута memberOf
. Команда для поиска может выглядеть так:
ldapsearch -LLL -h localhost -x -D cn=admin,dc=x,dc=y -b ou=users,dc=x,dc=y -W '(memberOf=cn=test,ou=services,dc=x,dc=y)' memberOf
5. Дополнительные рекомендации
Если после выполнения всех вышеперечисленных шагов проблема останется нерешенной, рассмотрите следующие подходы:
-
Обновление OpenLDAP: Возможно, версия OpenLDAP, которую вы используете (2.4.31), имеет баги или ограничения. Рассмотрите возможность обновления до более последней стабильной версии.
-
Консультация документации: Обратитесь к официальной документации OpenLDAP по memberOf и refint для получения подробной информации.
Применение всех этих измерений должно помочь вам решить проблему с обновлением атрибута memberOf
в OpenLDAP.