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
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
Аутентификация требует доступа к полу пароля, которое не должно быть доступно по умолчанию. Еще один момент заключается в том, что во время смены пароля с помощью 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 выполните следующие шаги:
Остановите демон slapd ведущего сервера.
Измените настройки в файле slapd.conf ведущего сервера, чтобы активировать репликацию с новым ведомым сервером.
Экспортируйте базу данных ведущего сервера.
Сконфигурируйте файл slapd.conf
сервера репликации.
Импортируйте базу данных ведущего сервера в ведомый сервер.
(Пере)Запустите процесс slapd сервера репликации
(Пере)Запустите процесс slapd ведущего сервера
Следует помнить, что изменения необходимо ВСЕГДА производить на ведущем сервере. Если их сделать на ведомом, они будут потеряны.
На ведущем сервере вам необходимо изменить секцию 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. Добавьте приведенные ниже строки в файл /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