Вопрос или проблема
Итак, у меня свежая установка openldap на машине с debian 9, которая в данный момент выглядит так:
Это будет база данных для телефонных номеров, чтобы было проще, я использую этот пример: база данных будет разделена на город – улицы – и людей, которые живут на этих улицах.
Это будет выглядеть так: dc=город -> ou=улица -> cn=имя_человека
Пока все хорошо, я пытаюсь создать первый dc, например, Нью-Йорк так:
root@ldap-test:/etc/ldap/ldif-import# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/ldif-import/createcn.ldif
Аутентификация SASL/EXTERNAL начата
Имя пользователя SASL: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SSF SASL: 0
Добавление новой записи "cn=NewYork"
ldap_add: Сервер не желает выполнять (53)
дополнительная информация: нет глобального супервизора
А вот как выглядит ldif файл:
dn: cn=NewYork
dc: NewYork
distinguishedName: dc=NewYork
name: NewYork
objectClass: top
objectClass: dcObject
Так как это не сработало, я подумал о другом способе, чтобы поместить улицы в nodomain, просто чтобы проверить, будет ли это работать таким образом, но, похоже, что схема не имеет
distinguishedName и name. Я посмотрел в стандартные схемы и core.ldif имеет эти записи, но они закомментированы.
Поэтому я не могу загрузить этот ldif:
dn: ou=broadway,dc=nodomain
distinguishedName: ou=broadway,dc=nodomain
name: broadway
objectClass: top
objectClass: organizationalUnit
ou: broadway
.
root@ldap-test:/etc/ldap/ldif-import# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/ldif-import/broadway.ldif
Аутентификация SASL/EXTERNAL начата
Имя пользователя SASL: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SSF SASL: 0
Добавление новой записи "ou=broadway,dc=nodomain"
ldap_add: Нарушение класса объекта (65)
дополнительная информация: атрибут 'distinguishedName' не разрешен
Итак, загрузка distinguishedName в схему, но она показывает добавление новой записи
"cn=core,cn=schema,cn=config"
ldap_add: Другая ошибка (например, специфичная для реализации) (80)
дополнительная информация: olcAttributeTypes: Дублирующийся attributeType: "2.5.4.49"
Я не понимаю, почему, потому что он даже не загружен в /etc/ldap/slapd.d/cn=config/cn=schema/cn={*}*.ldif
Кто-нибудь знает, что делать?
name
не является общепринятым атрибутом, хотяcn
(commonName
) является.- Не пытайтесь добавлять
distinguishedName
.dn
уже это обрабатывает.dn
иdistinguishedName
являются псевдонимами для одного и того же атрибута, но толькоdn
следует использовать для операцийldapmodify
. Это включаетldapadd
.
Ваш первый ldif не удается, потому что:
- Ваш сервер ldap не настроен для обработки
cn=NewYork
namingContext. - Вы пытаетесь добавить атрибут distinguishedName.
objectClass: dcObject
не имеет атрибутаname
Ваш второй ldif не удается, потому что:
- Вы пытаетесь добавить атрибут distinguishedName.
objectClass: organizationalUnit
не имеет атрибутаname
Краткая заметка: атрибуты ldap, включая части, используемые в rdn, могут содержать пробелы. Используйте кавычки по мере необходимости.
Ответ или решение
Чтобы модифицировать схему в OpenLDAP на Debian 9, нужно учитывать особенности работы LDAP и схему, в которой определяются типы атрибутов и классы объектов. На основе предоставленной информации, мы рассмотрим основные шаги для решения поставленных задач, включая создание записей и модификацию схемы.
Шаг 1: Понимание архитектуры OpenLDAP
Ваша структура LDAP предназначена для хранения телефонных номеров, разбитая на город (dc=city), улицы (ou=street) и людей (cn=name). Стоит отметить, что все записи в LDAP имеют свой Distinguished Name (DN), который указывает путь к объекту в иерархии LDAP.
Шаг 2: Создание домена (dc)
Сначала необходимо создать корневой домен. Он должен быть добавлен в формате, поддерживающем схему dcObject. Возможно, ваш DIT (Directory Information Tree) не настроен на поддержку этого уровня иерархии, и именно это может вызывать ошибку "no global superior knowledge".
Создание LDIF файла для города
Создайте файл create_city.ldif
:
dn: dc=newyork,dc=nodomain
objectClass: top
objectClass: domain
dc: newyork
Шаг 3: Добавление записи в OpenLDAP
Для добавления домена выполните следующую команду:
ldapadd -Y EXTERNAL -H ldapi:/// -f create_city.ldif
Важно!
Вам необходимо использовать правильные DN. Например, dc=newyork,dc=nodomain
вместо cn=NewYork
.
Шаг 4: Создание улицы (ou)
После создания домена перейдем к созданию объектов улиц. Создайте файл create_street.ldif
для улицы:
dn: ou=broadway,dc=newyork,dc=nodomain
objectClass: top
objectClass: organizationalUnit
ou: broadway
Для добавления записи выполните:
ldapadd -Y EXTERNAL -H ldapi:/// -f create_street.ldif
Шаг 5: Создание записи для человека (cn)
Для создания записи о человеке создайте файл create_person.ldif
:
dn: cn=JohnDoe,ou=broadway,dc=newyork,dc=nodomain
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
cn: John Doe
sn: Doe
Затем выполните команду для добавления:
ldapadd -Y EXTERNAL -H ldapi:/// -f create_person.ldif
Шаг 6: Изменение схемы
Если вы хотите добавить нестандартные атрибуты или классы объектов, вам необходимо внести изменения в схему LDAP. Обычно это делается с помощью файлов конфигурации в каталоге slapd.d
. Чтобы включить дополнительные атрибуты, необходимо создать файл с определениями атрибутов (например, custom_schema.ldif
):
dn: cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: ( 1.1.1.1 NAME 'myCustomAttribute' DESC 'My Custom Attribute' EQUALITY caseIgnoreMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE )
Добавьте изменения с помощью команды:
ldapmodify -Y EXTERNAL -H ldapi:/// -f custom_schema.ldif
Заключение
В процессе работы с OpenLDAP важно тщательно следить за структурой DN и поддерживать поддержку используемых классов объектов. Для успешного выполнения операций добавления и модификации вам может потребоваться загрузить и настроить специальные схемы, если они отсутствуют по умолчанию. Убедитесь в том, что вы используете правильные атрибуты и классы объектов согласно вашим требованиям.