Вопрос или проблема
Я следую руководству по серверу Ubuntu для настройки OpenLDAP на сервере Ubuntu 10.04, но не могу заставить его работать.
Когда я пытаюсь использовать sudo ldapadd -x -D cn=admin,dc=don,dc=com -W -f frontend.ldif
, я получаю следующую ошибку:
Введите пароль LDAP: <ввел 'secret' как пароль>
добавление новой записи "dc=don,dc=com"
ldap_add: Нарушение именования (64)
дополнительная информация: значение одно-именованного атрибута 'dc' конфликтует со значением, присутствующим в записи
Снова, когда я пытаюсь сделать то же самое, я получаю следующую ошибку:
root@avy-desktop:/home/avy# sudo ldapadd -x -D cn=admin,dc=don,dc=com -W -f frontend.ldif
Введите пароль LDAP:
ldap_bind: Неверные учетные данные (49)
Вот файл backend.ldif
:
# Загрузка модулей динамической поддержки
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb
# Настройки базы данных
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=don,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=don,dc=com
olcRootPW: secret
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=don,dc=com" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=don,dc=com" write by * read
Файл frontend.ldif
:
# Создание объекта верхнего уровня в домене
dn: dc=don,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Organization
dc: Example
description: LDAP Example
# Пользователь-администратор.
dn: cn=admin,dc=don,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: secret
dn: ou=people,dc=don,dc=com
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=don,dc=com
objectClass: organizationalUnit
ou: groups
dn: uid=john,ou=people,dc=don,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: john
sn: Doe
givenName: John
cn: John Doe
displayName: John Doe
uidNumber: 1000
gidNumber: 10000
userPassword: password
gecos: John Doe
loginShell: /bin/bash
homeDirectory: /home/john
shadowExpire: -1
shadowFlag: 0
shadowWarning: 7
shadowMin: 8
shadowMax: 999999
shadowLastChange: 10877
mail: [email protected]
postalCode: 31000
l: Тулуза
o: Example
mobile: +33 (0)6 xx xx xx xx
homePhone: +33 (0)5 xx xx xx xx
title: System Administrator
postalAddress:
initials: JD
dn: cn=example,ou=groups,dc=don,dc=com
objectClass: posixGroup
cn: example
gidNumber: 10000
Кто-нибудь может мне помочь?
Для меня ваш файл frontend.ldif кажется недействительным, где dn
указано как dn: dc=don,dc=com
(поэтому rdn – dc=don
), но вы продолжаете использовать dc: Example
позднее. Я думаю, вы попытались использовать учебник, но забыли изменить некоторые части вашего файла ldif, если dn правильный, вы должны использовать dc: don
(то же самое, что и в dn). Также вы упоминаете backend.ldif (который кажется изменяет некоторые настройки через бэкэнд конфигурации slapd) и frontend.ldif, но вы показываете только пример, что вы пытаетесь добавить записи из frontend.ldif, а не backend.ldif.
Ответ или решение
Ошибка «ldap_add: Naming violation (64)» возникает при конфигурировании OpenLDAP и свидетельствует о нарушении правил именования в LDAP. Давайте разберем эту проблему детально, чтобы вы могли эффективно ее устранить.
Теория (Theory)
LDAP (Lightweight Directory Access Protocol) — это протокол прикладного уровня для доступа к службам каталогов. При работе с OpenLDAP необходимо строго следовать схемам (schemas) и правилам именования (naming conventions).
Причины ошибки:
- Нарушение именования: Ошибка 64 указывает на проблему с именами, где атрибуты конфликтуют или противоречат друг другу.
- Несоответствие между dn и атрибутами: Distinguished Name (DN) конструкции
dc=example,dc=com
должен соответствовать заданным атрибутам. Для каждого уровня иерархии необходимо обеспечивать соответствие имен.
Пример (Example)
В представленном вами файле frontend.ldif
вы пытаетесь добавить запись с следующей структурой:
dn: dc=don,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Organization
dc: Example
description: LDAP Example
Здесь наблюдается явное несоответствие: вы используете dc=don
в DN, однако атрибут dc
установлен как Example
. Это и является причиной ошибки именования. Согласно правилам имени должна быть консистентность; значение DC в DN должно совпадать с атрибутом DC в записи.
Применение (Application)
Вот как вы могли бы решить эту проблему:
-
Исправление файла frontend.ldif:
- Замените
dc: Example
наdc: don
:
dn: dc=don,dc=com objectClass: top objectClass: dcObject objectclass: organization o: Example Organization dc: don description: LDAP Example
- Замените
-
Проверка данных:
- Убедитесь, что все DN и атрибуты соответствуют друг другу по всей иерархии, чтобы избежать разночтений.
-
Учет пароля и доступов:
- В логах ошибок также упоминается недействительный пароль (Invalid credentials (49)), что означает попытку аутентификации с неправильным паролем. Убедитесь, что пароль соответствует заданному в конфигурациях OpenLDAP.
-
Обработка backend.ldif:
- Убедитесь, что
backend.ldif
точно применен к вашей настройке. В случае необходимости перегрузите конфигурацию, чтобы убедиться в применении всех изменений.
- Убедитесь, что
-
Проверка аутентификации:
- Если аутентификация продолжает давать сбои, убедитесь в корректности формата и синтаксиса используемых учетных данных.
-
Лог-файлы и журнал OpenLDAP:
- Настройте более подробный уровень логирования для OpenLDAP, чтобы получить дополнительную информацию о возникающих проблемах.
Заключение
Итак, при конфигурировании OpenLDAP очень важны не только правильные файлы конфигурации, но и их точная синхронизация и согласованность данных. Советы, приведённые выше, должны помочь вам устранить проблему и правильно настроить ваш сервер LDAP. Убедитесь в том, что все схемы и данные, которые вы вводите, корректны и согласуются друг с другом на всех уровнях иерархии.