У меня возникли проблемы с изменением схемы установки OpenLDAP с использованием конфигурации времени выполнения (cn = config). Я пытаюсь изменить существующие атрибуты и добавить новые в настраиваемую схему. Когда я пытаюсь применить изменения, появляется ошибка «нет такого объекта» или «нет такого значения». При использовании браузера JXplorer возникает ошибка:
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn={15}mySchema,cn=schema,cn=config'
Использование ldapmodify в файле ldif из командной строки вызывает ту же ошибку:
ldapmodify -h ldap://localhost/cn=config -x -p 389 -D cn=admin,cn=config -W -f modify.ldif
modifying entry "cn={15}mySchema,cn=schema,cn=config"
ldap_modify: No such object (32)
Однако странно то, что даже при возникновении этой ошибки изменения сохраняются для текущего экземпляра службы slapd. Например, если я добавил новые атрибуты и изменил объект, чтобы включить эти атрибуты, то эти атрибуты будут доступны в записях, которые используют этот объект. Я могу продолжить как будто изменения подействовали. Однако при перезапуске службы slapd изменения отменяются.
Если я удалю начальный {15} DN в файле ldif или аналогичный префикс в значении атрибута, я получаю ту же ошибку (хотя, вероятно, по другой причине):
modifying entry "cn=mySchema,cn=schema,cn=config"
ldap_modify: No such object (32)
matched DN: cn=schema,cn=config
Более того, я могу без проблем изменять другие записи cn = config (например, olcDatabase = {- 1} frontend, cn = config), и изменения сохраняются при перезапуске службы. Ошибка возникает только тогда, когда я пытаюсь изменить записи в cn = schema, cn = config.
Сервер работает под управлением 64-разрядной CentOS 6.2 с использованием OpenLDAP 2.4.23, который был установлен через yum. Я пробовал несколько браузеров (JXplorer, Softerra LDAP Administrator), а также командную строку, все с одинаковыми результатами. Владелец / группа каталога slapd.d - ldap / ldap, и нет никаких изменений, даже если права доступа к файлам схемы изменены на 777. Использование TLS через порт 636 (браузер или командная строка) также не дает никакого эффекта.
Может ли кто-нибудь пролить свет на это и объяснить, что может мешать мне изменить схему с помощью cn = config?
РЕДАКТИРОВАТЬ: Вот содержимое файла modify.ldif:
dn: cn={15}mySchema,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.3.6.1.4.00000.2.3.14 NAME 'myTest' DESC 'This is only a test' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} )
Мы используем PEN нашей компании вместо 00000, и никакой другой атрибут не использует этот OID. Я обнаружил, что добавление числового префикса к значению атрибута не имеет значения, но префикс необходим для DN; без него ошибка означает то, что написано, и каталог не изменяется.
Я до сих пор наблюдаю такое же поведение в OpenLDAP в Ubuntu. Я пытался заменить сертификат SSL на моем экземпляре OpenLDAP и обнаружил, что указания на вики-сайте Ubuntu не работают:
https://help.ubuntu.com/lts/serverguide/openldap-server.html#openldap-tls
В частности, эти инструкции:
Создайте файл certinfo.ldif со следующим содержимым (внесите соответствующие изменения, в нашем примере предполагается, что мы создали сертификаты, используя https://www.cacert.org):
dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/cacert.pem - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap01_slapd_cert.pem - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap01_slapd_key.pem
Используйте команду ldapmodify, чтобы сообщить slapd о нашей работе TLS через базу данных slapd-config:
sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ssl/certinfo.ldif
(Обратите внимание, что я изменил исходные команды добавления для замены, но исходные команды добавления также не работали при новой установке).
Я нашел techNote на этом сайте CentOS:
2.2.2.2. Ограничения на изменение записей и атрибутов конфигурации
При изменении записей и атрибутов сервера действуют определенные ограничения:
The cn=monitor entry and its child entries are read-only and cannot be modified, except to manage ACIs. If an attribute is added to cn=config, the server ignores it. If an invalid value is entered for an attribute, the server ignores it. Because ldapdelete is used for deleting an entire entry, use ldapmodify to remove an attribute from an entry.
В этой заметке, кажется, говорится, что вы не можете добавлять атрибуты в cn = config с помощью ldapmodify. Я думал, что вы изменили cn = config с помощью ldapmodify.
Я видел другие сообщения, которые, кажется, указывают на такое положение вещей. Я задал вопрос в списке рассылки OpenLDAP и буду обновлять свое сообщение любыми полученными ответами.
Если есть другие olcAttributeTypes
в записи вам нужно сделать replace
не add
и перечислите все остальные атрибуты, уже имеющиеся в LDAP.
Попробуй использовать ldapvi
для редактирования он сделает это автоматически.
РЕДАКТИРОВАТЬ: Если это не сработает, вам нужно остановить slapd
и редактировать файлы в /etc/ldap/slap.d/
вручную. Это определенно не решение, когда изменения происходят относительно часто ...
Редактирование схемы в cn=config
это новая функция, возможно, вы обнаружили ошибку (возможно, уже исправленную в последней версии). Проверьте журнал изменений OpenLDAP и попробуйте использовать новейшую версию.