Атрибут memberOf в OpenLDAP не обновляется после обновления группы.

Вопрос или проблема

У меня есть установка 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.

Оцените материал
Добавить комментарий

Капча загружается...