Linux - статьи

Добавляем данные, собственно


Добавление записей в базу данных производится (как вариант) с помощью утилиты ldapadd. Она воспринимает на входе файл специального формата — так называемый LDIF, LDAP Data Interchange Format (эти файлы так и принято именовать, с расширением ldif). Нетрудно догадаться, что такие или подобные файлы будут управлять всеми операциями с данными.

Вот примерный, из документации, файл, который вы можете создать в любом тестовом редакторе, например в vim (параметры вашего домена, вместо comizdat.com, подставьте по месту; а можете и не подставлять — мы не обидимся).

dn: dc=comizdat,dc=com
objectclass: dcObject
objectclass: organization
o: Comizdat
dc: comizdat

dn: cn=Manager,dc=comizdat,dc=com
objectclass: organizationalRole
cn: Manager

Первая строка каждого блока определяет так называемый узел поиска — DIT, Data Information Tree Node. От этого узла будет производиться поиск. Собственно, в приведенном примере добавляется две записи: одна описывает организацию Comizdat, вторая — тип работника (organizationalRole) Manager.

Вообще-то файл ldif не предназначен для набора руками, так что будьте начеку. Во-первых, все пробелы являются значимыми и не будут удаляться ни в начале, ни в конце строки. Если вы поставите лишний пробел в имени пользователя, то потом будете долго его искать. Один пробел или табуляция в конце строки обозначает перенос строки на следующую, с чем тоже нужно быть осторожным.

Особый формат имеют также и бинарные данные: они помечаются дополнительным двоеточием и должны быть закодированы по Base64 (ну, я надеюсь, вы можете перекодировать в уме в этот форматJ). Короче, для генерации ldif-файла лучше всего пользоваться программной оболочкой, которая контролирует эти тонкости и не допустит ошибок. Сам формат ldif-файла хорошо описан здесь: .

Все записи данных обязательно относятся к одному или нескольким классам, задаваемых параметрами objectClass. Класс задает набор допустимых атрибутов (полей), некоторые из которых обязательные, а некоторые — опциональные. Для полей заданы формат, правила сортировки, тип, кодировка и т.д. Для атрибутов может быть определено несколько наименований, обычно два — полное и сокращенное. К примеру, поля c, o, ou являются сокращениями от countryName, organizationName и organizationUnitName.

Кроме того, что файл ldif имеет общий формат, он еще должен удовлетворять схемам, которые описывают допустимые классы и их атрибуты. Распространенные схемы обычно хранятся в каталоге /usr/local/etc/openldap/schema и имеют расширение *.schema. Другие схемы поставляются с пакетами, их использующими: например, DHCP-демон поставляется со схемой dhcp.schema. Схемы состоят из двух частей: сначала определяются атрибуты с уникальными именами, из которых впоследствии конструируются классы.

Прежде чем использовать в своей базе данных какую-нибудь схему, вы должны включить ее в файл конфигурации slapd.conf с помощью команды include. Например, для стандартных адресных записей в файл конфигурации включена запись include /usr/local/etc/openldap/schema/core.schema.

При создании нового класса от уже существующего, наследуются существующие поля и добавляются новые. Сами атрибуты тоже упорядочены — наподобие того как упорядочены суффиксы в системе имен DNS: сначала записи группируются по более общему признаку, например по стране, потом — по организации и т.д. Существует две распространенные классификации: глобальная (имя — домен) и организационная (имя — отдел — организация — страна). Естественно, что в вашей схеме группировка может быть совсем другой. В конце концов, самым достоверным документом по атрибутам являются сами схемы — и прежде чем описывать собственные классы, я бы посоветовал как следует построчно разобраться с core.schema.

Теперь вы можете приписать этот файл в вашу базу данных и протестировать наличие новой записи, связанной с вашим доменом:

ldapadd -x -D “cn=Manager,dc=comizdat,dc=com” -W -f 1.ldif
lpadsearch -x -b ‘dc=comizdat,dc=com’  ’(objectclass=*)’


Обратите внимание на пробел между строками одиночными кавычками, ограничивающими "где начать искать" и "фильтр классов" — без них вы получите ошибку "галимый домен".

Пару слов о том, что значат параметры:
  • -x значит «простая аутентификация», для локального подключения приемлемо;
  • -D — домен, к которому следует "прибить" новые данные;
  • -W — запросить пароль;
  • -f — получать поток из файла, а не стандартного ввода;
  • -b — указывает, что поиск нужно начать от определенной «поисковой базы», то есть узла.


Прочие параметры вы можете посмотреть и с помощью man-страниц.

Еще один момент: аутентификация LDAP никак не связана с правами суперпользователя. Вообще-то, запросы к LDAP и чтение разрешены кому ни попадя. И если вы против такого поведения, читайте в документации как сделать, чтобы такого не было.

На этом мы, пожалуй, и завершим введение в OpenLDAP, поскольку разговор о специфике создания баз данных и конструировании запросов соответствует скорее формату книги, чем статьи. Могу только сказать, что запустить систему в работу просто, поскольку вначале вы можете пользоваться только 5% всех возможностей (и, тем не менее, получать от этого пользу). А такие возможности, как репликация или еще более сложные каскадные обновления, а также использование LDAP для системного администрирования, вы освоите по мере необходимости.


Содержание раздела