Библиотека сайта rus-linux.net
Создание и поддержание базы данных
Эта секция расскажет вам о создании базы данных slapd с наброска. Есть два способа создания базы данных. Во-первых, вы можете создать базу данных в реальном времени, используя LDAP. Таким образом, вы просто запускаете slapd и добавляете элементы, используя любой LDAP клиент на ваш выбор. Этот способ хорош для относительно небольших баз данных (несколько сотен или тысяч элементов, в зависимости от ваших требований).
Второй метод создания базы данных - сделать это автономно, используя средства генерации индексов. Это наилучший метод для случая, когда вам нужно создать тысячи элементов, что заняло бы неприемлемое время при использовании метода LDAP, либо если вы хотите быть уверены, что к базе данных нет доступа в процессе ее создания.
Создание базы данных в реальном времени
Программный пакет OpenLDAP поставляется с утилитой ldapadd, которая используется для добавления записей при запущенном LDAP сервере. Если вы выбрали создание базы данных в реальном времени, вы можете использовать ldapadd для добавления элементов. После первичного добавления элементов, вы все еще можете использовать ldapadd для добавления элементов. Перед запуском sldap Вы должны проверить, что в вашем файле sldap.conf установлены следующие конфигурационные опции:
suffix <отличительное имя>
Как описано в Разд. Настройка LDAP сервера>, эта опция указывает, какие элементы помещены в этой базе данных. Вы должны ее установить в значение отличительного имени корня поддерева, которое вы собираетесь создать. Например:
suffix "o=TUDelft, c=NL"
Вы должны проверить, что указали каталог, где должны быть созданы индексные файлы:
directory <каталог>
Например:
directory /usr/local/tudelft
Вам следует создать его, теперь вы можете подключаться к slapd как кто-то с правами на добавление записей. Это делается следующими двумя опциями в определении базы данных:
rootdn <отличительное имя>
rootpw <passwd> /* Не забудьте тут используется crypto или SHA пароль!!! */
Эти опции задают отличительное имя и пароль, используемые для аутентификации элемента "суперпользователя" базы данных (т.е., элемента которому разрешено делать все). Данные здесь отличительное имя и пароль будут работать всегда, не зависимо от того, существует ли такой элемент на самом деле и имеет ли он такой же пароль. Это решает проблему курицы и яйца относительно аутентификации и добавления элементов до существования самих элементов.
Если вы используете SASL механизм аутентификации LDAP, строку rootpw можно отбросить. Более подробную информацию ищите в секциях Настойка LDAP и Аутентификация.
В заключение, вы должны удостовериться, что определение базы данных содержит определение необходимых вам индексов:
index {<attrlist> | default} [pres,eq,approx,sub,none]
Например, для индексации атрибутов cn, sn, uid и objectclass можно использовать следующие строки конфигурации индексов.
index cn,sn,uid
index objectclass pres,eq
index default none
o=TUDelft, c=NL objectClass=organization description=Technical University of Delft Netherlands cn=Postmaster, o=TUDelft, c=NL objectClass=organizationalRole cn=Postmaster description= TUDelft postmaster - postmaster@tudelft.nl |
ldapadd -f /tmp/newentry -D "cn=Manager, o=TUDelft, c=NL" -w secret |
ldapadd -f /tmp/newentry -D "cn=Manager, o=TUDelft, c=NL" -W Enter LDAP Password: |
Автономное создание базы данных
Второй метод создания базы данных - сделать это автономно, используя нижеописанные утилиты генерирования индексов. Этот метод предпочтительней, если вам необходимо создать тысячи элементов, что заняло бы неприемлемое время при использовании вышеописанного LDAP метода. Эти утилиты читают конфигурационный файл slapd и содержащий текстовое представление добавляемых элементов входной LDIF файл. Они создают непосредственно индексный файл LDBM. Есть несколько важных конфигурационных опций, которые вы захотите проверить и установить в определении базы данных в конфигурационном файле:
suffix <отличительное имя>
Как описано в предыдущей секции, эта опция указывает какие элементы удерживать в базе данных. Вы должны установить ее в значение отличительного имени корня создаваемого вами поддерева. Например:
suffix "o=TUDelft, c=NL"
Вы должны проверить, что вы указали каталог, где должны быть созданы индексные файлы:
directory <каталог>
Например:
directory /usr/local/tudelft
Далее, вероятно вы захотите увеличить размер внутреннего кеша используемого каждым открытым файлом. Для наилучшей производительности при создании индекса, весь индекс должен поместиться в память. Если ваши данные слишком велики для этого, или у вас слишком мало памяти, вы все еще можете сделать ее большой и дать работу вашей системе виртуальной памяти. Этот размер устанавливается следующей опцией:
dbcachesize <целое число>
Например:
dbcachesize 50000000
Будет создан 50 Мб кеш, он достаточно велик (на University of Michigan, база данных содержит около 125Кб элементов, и наибольший индексный файл около 45 Мб). Немного поэкспериментируйте с этим значением, и параллельно (объясняется ниже) посмотрите, как работает ваша система. Помните о необходимости вернуть это значение обратно после создания индексных файлов и до запуска slapd.
В конце, в нужно указать какие индексы вы хотите создать. Это делается одной или более опциями.
index {<attrlist> | default} [pres,eq,approx,sub,none]
Например:
index cn,sn,uid pres,eq,approx
index default none
Буду созданы индексы presence, equality и approximate для атрибутов cn, sn, и uid, а для других атрибутов не будет создано никаких индексов. Более подробную информацию смотрите в конфигурационном файле Разд. Настройка LDAP сервера>.
Как только вы настроили все, как хотели, вы создаете первичную базу данных и ассоциированные индексы программой slapadd(8):
slapadd -l <входной файл> -f <конфигурационный файл slapd> [-d <уровень отладки>] [-n <целое число>|-b <суффикс>]
-l <входной файл> |
-f <конфигурационный файл slapd> |
-d <уровень отладки> |
-n <номер базы данных> |
-b <суффикс> |
Необязательный аргумент, указывающий какую базу данных модифицировать. Представленный суффикс сопоставляется с суффиксом базы данных и при совпадении определяется номер модифицируемой базы данных. Не должен использоваться вместе с ключом -n.
Иногда возникает необходимость перегенерировать индексы (например, после модификации slapd.conf(5)). Это можно сделать используя, программу slapindex(8). slapindex вызывается так:
slapindex -f <конфигурационный файл slapd> [-d <уровень отладки>] [-n <номер базы данных>|-b <суффикс>]
Где ключи -f, -d, -n и -b такие же, как и для программы slapadd(1). slapindex перестраивает все индексы, основываясь на текущем содержимом базы данных.
Также есть программа slapcat, которая используется для дампа базы данных в LDIF файл. Она может быть полезна, когда вы хотите создать читаемую резервную копию вашей базы данных или хотите отредактировать вашу базу данных автономно. Программы вызывается так:
slapcat -l <filename> -f <slapdconfigfile> [-d <debuglevel>] [-n <databasenumber>|-b <suffix>]
где -n или -b выбирают базу данных в файле slapd.conf(5) указанном в ключе -f. Соответствующий LDIF вывод пишется в стандартный вывод или файл указанный ключом -l.
Подробнее о LDIF формате
#комментарий dn: <отличительное имя> <attrdesc>: <значение атрибута> <attrdesc>: <значение атрибута> ... |
Строки, начинающиеся с символа '#', являются комментариями. Описание атрибута (attrdesc) может быть простым типом атрибута как, например, cn или objectClass или 1.2.3 (OID ассоциированный с типом атрибута) или может включать опции, такие как cn;lang_en_US или userCertificate;binary.
dn: cn=Barbara J Jensen, dc=example, dc= com cn: Barbara J Jensen |
dn: cn=Barbara J Jensen, dc=example, dc=com cn: Barbara J Jensen |
cn: Barbara J Jensen cn: Babs Jensen |
cn:: IGJlZ2lucyB3aXRoIGEgc3BhY2U= |
cn:< file://path/to/file.jpeg |
# Элемент Barbara dn: cn=Barbara J Jensen, dc=example, dc=com cn: Barbara J Jensen cn: Babs Jensen objectClass: person sn: Jensen # элемент Bjorn dn: cn=Bjorn J Jensen, dc=example, dc=com cn: Bjorn J Jensen cn: Bjorn Jensen objectClass: person sn: Jensen # закодированная в Base64 фотография в JPEG jpegPhoto:: /9j/4AAQSkZJRgABAAAAAQABAAD/2wBDABALD A4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQ ERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVG # элемент Jennifer dn: cn=Jennifer J Jensen, dc=example, dc=com cn: Jennifer J Jensen cn: Jennifer Jensen objectClass: person sn: Jensen # JPEG фотография в файле jpegPhoto:< file://path/to/file.jpeg |
Заметьте, что jpegPhoto в элементе Bjorn закодировано в base 64, а jpegPhoto в элементе Jennifer берется по месту указания URL.
Завершающие пробелы не обрезаются от значений в LDIF файле. А также не сжимаются повторяющиеся множественные пробелы. Если вы не хотите, чтобы они были в ваших данных, не ставьте их.
Утилиты ldapsearch, ldapdelete и ldapmodify
ldapsearch это - интерфейс shell к библиотечному вызову ldap_search(3). Используйте эту утилиту для поиска элементов в вашем LDAP механизме базы данных.
ldapsearch [-n] [-u] [-v] [-k] [-K] [-t] [-A] [-B] [-L] [-R] [-d уровень отладки] [-F sep] [-f файл] [-D binddn] [-W] [-w bindpasswd] [-h ldaphost] [-p ldapport] [-b основание поиска] [-s base|one|sub] [-a never|always|search|find] [-l timelimit] [-z sizelimit] filter [attrs...] |
ldapsearch открывает соединение с сервером LDAP, присоединяется, и выполняет поиск с фильтром filter. Фильтр должен соответствовать строковому представлению фильтров LDAP, как определено в RFC 1558. Если ldapsearch находит один или более элементов, то извлекаются атрибуты, указанные в attrs, элементы и их значения печатаются в стандартный вывод. Если attrs не указан, возвращаются все атрибуты.
ldapsearch -b 'o=TUDelft,c=NL' 'objectclass=*' ldapsearch -b 'o=TUDelft,c=NL' 'cn=Rene van Leuken' ldasearch -u -b 'o=TUDelft,c=NL' 'cn=Luiz Malere' sn mail |
Ключ -b определяет основание поиска (начальную точку поиска), а ключ -u указывает выводить информацию в понятном для пользователя виде.
ldapdelete это - shell интерфейс к библиотечному вызову ldap_delete(3). Эта утилита используется для удаления элементов из вашего LDAP механизма базы данных.
ldapdelete [-n] [-v] [-k] [-K] [-c] [-d уровень отладки] [-f файл] [-D binddn] [-W] [-w пароль] [-h ldaphost] [-p ldapport] [dn]... |
ldapdelete открывает соединение к LDAP серверу, подключается и удаляет один или более элементов. Если приложен один или более dn аргумент, элементы с этим отличительными именами будут удалены. Каждое отличительное имя должно быть строковым представлением отличительного имени в соответствии с RFC 1779. Если вызов был сделан без аргументов, список отличительных имен читается со стандартного ввода (или из файла указанного ключом -f).
ldapdelete 'cn=Luiz Malere,o=TUDelft,c=NL' ldapdelete -v 'cn=Rene van Leuken,o=TUDelft,c=NL' -D 'cn=Luiz Malere,o=TUDelft, c=NL' -W |
Ключ -v обозначает многословный режим, ключ -D обозначает Binddn (отличительное имя для аутентификации), а ключ -W обозначает запрашивать пароль.
ldapmodify это - shell интерфейс к библиотечным вызовам ldap_modify(3) и ldap_add(3). Эта утилита используется для изменения содержимого элементов вашего LDAP механизма баз данных.
ldapmodify [-a] [-b] [-c] [-r] [-n] [-v] [-k] [-d уровень отладки] [-D binddn] [-W] [-w пароль] [-h ldaphost] [-p ldapport] [-f файл] ldapadd [-b] [-c] [-r] [-n] [-v] [-k] [-K] [-d уровень отладки] [-D binddn] [-w пароль] [-h ldaphost] [-p ldapport] [-f файл] |
ldapadd - это просто жесткая ссылка на утилиту ldapmodify. При вызове ldapadd автоматически включается ключ -a (добавить элемент) утилиты ldapmodify.
ldapmodify открывает соединение к LDAP серверу, подключается, изменяет или добавляет элементы. Информация об элементах читается из стандартного ввода или из файла указываемого ключом -f.
Вот несколько примеров использования ldapmodify:
dn: cn=Modify Me, o=University of Michigan, c=US changetype: modify replace: mail mail: modme@terminator.rs.itd.umich.edu - add: title title: Grand Poobah - add: jpegPhoto jpegPhoto: /tmp/modme.jpeg - delete: description - |
ldapmodify -b -r -f /tmp/entrymods |
заменит содержимое атрибута mail элемента "Modify Me" на значение "modme@terminator.rs.itd.umich.edu", добавит заголовок "Grand Poobah", и содержимое файла /tmp/modme.jpeg в jpegPhoto, а также полностью удалит атрибут description.
cn=Modify Me, o=University of Michigan, c=US mail=modme@terminator.rs.itd.umich.edu +title=Grand Poobah +jpegPhoto=/tmp/modme.jpeg -description |
ldapmodify -b -r -f /tmp/entrymods |
dn: cn=Barbara Jensen, o=University of Michigan, c=US objectClass: person cn: Barbara Jensen cn: Babs Jensen sn: Jensen title: the world's most famous manager mail: bjensen@terminator.rs.itd.umich.edu uid: bjensen |
ldapadd -f /tmp/entrymods |
добавит элемент с отличительным именем: cn=Barbara Jensen, o=University of Michigan, c=US, если он еще не существует. Если элемент с таким отличительным именем уже существует, команда укажет на ошибку и не заменит содержимое элемента.
dn: cn=Barbara Jensen, o=University of Michigan, c=US changetype: delete |
ldapmodify -f /tmp/entrymods |
удалит элемент Babs Jensen.
Ключ -f определяет файл (читать информацию о изменениях из файла, а не из стандартного ввода), ключ -b обозначает двоичный режим (любые значения начинающиеся с '/' во входном файле интерпретируются как двоичные), ключ -r обозначает заменять (по умолчанию заменять существующие значения)