Пример выполняется на:
# cat /etc/redhat-release CentOS release 6.5 (Final)
С использованием:
# yum list installed | grep openldap openldap.x86_64 2.4.23-34.el6_5.1 openldap-clients.x86_64 2.4.23-34.el6_5.1 openldap-servers.x86_64 2.4.23-34.el6_5.1
OLC – on-line configuration
, была введена в OpenLDAP с версии 2.3, и позволяет производить настройку сервера без необходимости его перезагрузки. Для управления с его помощью – в каталоге LDAP создаётся отдельный DIT, которая содержит в себе все настройки сервера.
Важно, что после перехода на конфигурацию через OLC – файл slapd.conf
вообще не будет использоваться, т.к. при загрузке сервер сначала ищет директорию slapd.d
, и только если он её не находит – ищет файл slapd.conf
.
По-умолчанию во время установки OpenLDAP создаётся директория slapd.d.original
:
# ls -l /etc/openldap/ | grep origin drwx------. 3 ldap ldap 4096 Feb 12 14:39 slapd.d.original
В которой находится пример базы и ldif
-файл:
# ls -l /etc/openldap/slapd.d.original/ total 8 drwx------. 3 ldap ldap 4096 Feb 12 14:39 cn=config -rw-------. 1 ldap ldap 1131 Feb 12 14:39 cn=config.ldif
Но мы ими пользоваться не будем. Наша задача – конвертировать имеющий уже в работе файл slapd.conf
в новый ldif
.
Останавливаем сервер:
# service slapd stop Stopping slapd: [ OK ]
Создаём копию файла, на всякий случай:
# cp /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bkp
Редактируем сам файл slapd.conf
– добавляем такие строки:
# enable on-the-fly configuration (cn=config) database config rootdn "cn=root,cn=config" rootpw root
Проверяем его:
# slaptest -f /etc/openldap/slapd.conf config file testing succeeded
Создаём каталог:
# mkdir /etc/openldap/slapd.d
И запускаем конвертирование:
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d config file testing succeeded
Теперь в каталоге создана новая база:
# ls -l /etc/openldap/slapd.d total 8 drwxr-x--- 3 root root 4096 Mar 11 13:16 cn=config -rw------- 1 root root 986 Mar 11 13:16 cn=config.ldif
Устанавливаем пользователя:
# chown -R ldap:ldap /etc/openldap/slapd.d/
Удаляем старый файл:
# mv /etc/openldap/slapd.conf /etc/openldap/slapd.conf-2014-03-11.bkp
И запускаем сервер:
# service slapd start Starting slapd: [ OK ]
Проверяем:
# ldapsearch -x -D "cn=root,cn=config" -W -LLL -b "cn=config" -s base Enter LDAP Password: dn: cn=config objectClass: olcGlobal cn: config olcConfigFile: /etc/openldap/slapd.conf olcConfigDir: /etc/openldap/slapd.d olcAllows: bind_v2 olcArgsFile: /var/run/openldap/slapd.args olcAttributeOptions: lang- olcAuthzPolicy: none olcConcurrency: 0 olcConnMaxPending: 100 olcConnMaxPendingAuth: 1000 olcGentleHUP: FALSE olcIdleTimeout: 0 olcIndexSubstrIfMaxLen: 4 olcIndexSubstrIfMinLen: 2 olcIndexSubstrAnyLen: 4 olcIndexSubstrAnyStep: 2 olcIndexIntLen: 4 olcLocalSSF: 71 olcPidFile: /var/run/openldap/slapd.pid olcReadOnly: FALSE olcReverseLookup: FALSE olcSaslSecProps: noplain,noanonymous olcSockbufMaxIncoming: 262143 olcSockbufMaxIncomingAuth: 16777215 olcThreads: 16 olcTLSVerifyClient: never olcToolThreads: 1 olcWriteTimeout: 0
Добавление нового DIT при использовании cn=config.
Как и при использовании slapd.conf
– перед добавлением базы необходимо создать директорию:
# mkdir /var/lib/ldap/testdb # cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/testdb/DB_CONFIG # chown -R ldap:ldap /var/lib/ldap/testdb
Создаём хеш пароля:
# slappasswd -s testdb -h {MD5} {MD5}KlcSdEcAfLKgNO5sGZX83Q==
Создаём ldif
-файл новой базы:
dn: olcDatabase=bdb,cn=config objectClass: olcBdbConfig olcDatabase: bdb olcDbDirectory: /var/lib/ldap/testdb olcSuffix: dc=testdb olcRootDN: cn=root,dc=testdb olcRootPW: {MD5}KlcSdEcAfLKgNO5sGZX83Q==
И добавляем её с помощью ldapadd
:
$ ldapadd -x -D "cn=root,cn=config" -W -f olc_test.ldif Enter LDAP Password: adding new entry "olcDatabase=bdb,cn=config"
Проверяем:
$ ldapsearch -x -b '' -s base '(&)' namingContexts -LLL dn | grep test namingContexts: dc=testdb
Отлично, база создана. Добавим в неё корневую запись:
$ cat testdb.ldif dn: dc=testdb objectClass: top objectClass: dcObject objectClass: organization dc: testdb o: OLC test db
$ ldapadd -x -D "cn=root,dc=testdb" -W -f testdb.ldif Enter LDAP Password: adding new entry "dc=testdb"
Пробуем подключиться к ней:
$ ldapsearch -x -D "cn=root,dc=testdb" -W -b "dc=testdb" -LLL Enter LDAP Password: dn: dc=testdb objectClass: top objectClass: dcObject objectClass: organization dc: testdb o: OLC test db
Если посмотреть в каталог /etc/openldap/slapd.d/cn=config/
– то в нём можно увидеть новый ldif
-файл, который описывает новую базу (в данном случае у неё номер 9):
# head /etc/openldap/slapd.d/cn=config/olcDatabase={9}bdb.ldif dn: olcDatabase={9}bdb objectClass: olcBdbConfig olcDatabase: {9}bdb olcDbDirectory: /var/lib/ldap/testdb olcSuffix: dc=testdb olcRootDN: cn=root,dc=testdb olcRootPW:: e01ENX1LbGNTZEVjQWZMS2dOTzVzR1pYODNRPT0= structuralObjectClass: olcBdbConfig entryUUID: 20d09580-3d60-1033-8a86-6b84c9dbc234 creatorsName: cn=root,cn=config
Готово.
Ссылки по теме:
http://blog.suretecsystems.com
http://docs.cs.up.ac.za
русский вариант + дополнения:
http://pro-ldap.ru
http://apfelboymchen.net
https://wiki.debian.org