Сервер OpenLDAP

LDAP расшифровывается как Lightweight Directory Access Protocol (легковесный протокол доступа к справочникам) и является упрощенной версией протокола X500. Настройка справочника в этом разделе будет производиться для аутентификации. Тем не менее, справочник LDAP может использоваться для множества целей: аутентификация, справочник общего пользования (для почтовых клиентов), во всех видах приложений. LDAP - это широко используемый стандарт.

Если кратко описывать LDAP, все информационные записи хранятся в дереве. Вам следует самим определить древовидную сртуктуру (DIT: Directory Information Tree - дерево информации справочника). Мы начнем с базового дерева с двумя узлами над корнем :

Вам нужно в начале определить, что будет являться корнем вашего LDAP. По умолчанию, ваше дерево будет определено вашим интернет-доменом. Если ваш домен example.com (мы будем использовать его в этом примере), вашим корнем будет являться dc=example,dc=com.

Установка

В первую очередь установите демон сервера LDAP (slapd) на вашем сервере; установите следующие пакеты: slapd и ldap-utils.

По запросу введите ваш домен и пароль, который вы хотите чтобы использовался администратором справочника.

Лишь несколько изменений будет произведено в конфигурации по умолчанию. Во-первых, установите пароль суперпользователя в конфигурационном файле (вместо директории) /etc/ldap/slapd.conf.

Только не вписывайте пароль открытым текстом. Чтобы сгенерировать зашифрованный пароль, вначале используйте slappasswd ваш_пароль

$ slappasswd
New password:
Re-enter password:
{SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m

Этот пример показывает, что происходит при использовании строки "secret" в качестве пароля. (В силу природы схемы шифрования SSHA, ваш результат может отличаться.)

Теперь откройте файл /etc/ldap/slapd.conf и скопируйте туда сгенерированную строку.

# Убедитесь, что вы отредактировали или добавили эти директивы после первой директивы 'database'.

suffix "dc=example,dc=com"
directory "/var/lib/ldap"
rootdn "cn=admin,dc=example,dc=com"
rootpw {SSHA}d2BamRTgBuhC6SxC0vFGWol31ki8iq5m

Populating LDAP

The directory has been created at the installation, now it is time to populate. It will be populated with a "classical" entry that will be compatible with directory (for example for a shared directory), with classical accounts (for a web application) and with Unix accounts (posix).

LDAP directory can be fed with a ldif file (ldif means ldap directory interchange format). Generate this example text file init.ldif somewhere on your system:

dn: dc=example,dc=com
objectClass: dcObject
objectClass: organizationalUnit
dc: example
ou: Example Dot Com

dn: ou=people,dc=example,dc=com
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups

dn: uid=john,ou=people,dc=example,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: john.doe@example.com
postalCode: 31000
l: Toulouse
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=example,dc=com
objectClass: posixGroup
cn: example
gidNumber: 10000

In the example above, the directory structure, a user and group have been setup. In other example you might see the objectClass: top added in every entry, but that is default behaviour so you don't have to add it explicitely.

Теперь добавьте записи в LDAP :

  • остановите демона LDAP: sudo /etc/init.d/slapd stop

  • удалите содержимое, которое было автоматически добавлено при установке: sudo rm -rf /var/lib/ldap/*

  • добавьте содержимое sudo slapadd -l init.ldif

  • запустите демон LDAP: sudo /etc/init.d/slapd start

Мы можем проверить, что контент был добавлен успешно, с помощью инструментов из пакета ldap-utils. Чтобы выполнить поиск в директории LDAP :

ldapsearch -xLLL -b "dc=example,dc=com" uid=john sn givenName cn
dn: uid=john,ou=people,dc=example,dc=com
cn: John Doe
sn: Doe
givenName: John

Быстрое пояснение:

  • -x необходима, поскольку мы не используем метод аутентификации SASL (по умолчанию)

  • -LLL отключить вывод информационных сообщений LDIF

Настройка ACL

Аутентификация требует доступа к полу пароля, которое не должно быть доступно по умолчанию. Еще один момент заключается в том, что во время смены пароля с помощью passwd shadowLastChange должен быть также доступен. Приведенный ниже код демонстрирует пример настройки ACL, которая разрешает доступ к shadowLastChange:

access to attr=shadowLastChange
        by dn="cn=manager,dc=example,dc=com" write
        by self write
        by * read

Репликация LDAP

Сервис LDAP зачастую становится очень критичным сервисом в информационной системе: все зависит от LDAP: аутентификация, авторизация, почтовая система, и т.д. Хорошей идеей является установка системы с резервированием. Она проста в настройке, и здесь приведено краткое руководство по ней.

Репликация здесь будет основываться на отношении ведущий-ведомый. Перед реализацией репликации LDAP выполните следующие шаги:

  1. Остановите демон slapd ведущего сервера.

  2. Измените настройки в файле slapd.conf ведущего сервера, чтобы активировать репликацию с новым ведомым сервером.

  3. Экспортируйте базу данных ведущего сервера.

  4. Сконфигурируйте файл slapd.conf сервера репликации.

  5. Импортируйте базу данных ведущего сервера в ведомый сервер.

  6. (Пере)Запустите процесс slapd сервера репликации

  7. (Пере)Запустите процесс slapd ведущего сервера

Следует помнить, что изменения необходимо ВСЕГДА производить на ведущем сервере. Если их сделать на ведомом, они будут потеряны.

Ведущий сервер LDAP

На ведущем сервере вам необходимо изменить секцию database в /etc/ldap/slapd.conf, чтобы добавить инструкцию replica. В примере ниже показана replica на ldap-2.example.com с пользователем Manager и паролем secret. Логфайл репликации - это место, где хранятся изменения до отправки ведомому серверу LDAP.

replica uri=ldap://ldap-2.example.com:389 binddn="cn=Manager,dc=example,dc=com" bindmethod=simple credentials=secret

replogfile /var/lib/ldap/replog

Экспортируйте базу данных ведущего сервера с помощью slapcat. Затем скопируйте .ldiff ведущего сервера на ведомый с помощью scp или других инструментов.

user@master:~$ sudo slapcat -l master.ldif

Ведомый сервер LDAP

На ведомом сервере вы должны авторизовать свой ведущий сервер, чтобы он мог обновлять базу LDAP. Добавьте приведенные ниже строки в файл /etc/ldap/slapd.conf в секции database:

updatedn cn=Manager,dc=example,dc=com
updateref ldap://ldap-1.example.com

Импортируйте master.ldif используя slapadd.

user@slave:~$ sudo slapadd -c -l master.ldif

Перезапустите ведущий сервер.

user@master:~$ sudo /etc/init.d/slapd start

Перезапустить ведомый сервер.

user@slave:~$ sudo /etc/init.d/slapd start