OpenLDAP сервер


LDAP (англ. Lightweight Directory Access Protocol — «облегчённый протокол доступа к каталогам») — это сетевой протокол для доступа к службе каталогов X.500, разработанный IETF как облегчённый вариант разработанного ITU-T протокола DAP. LDAP — относительно простой протокол, использующий TCP/IP и позволяющий производить операции авторизации, поиска и сравнения, а также операции добавления, изменения или удаления записей. Обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP.

Всякая запись в каталоге LDAP состоит из одного или нескольких атрибутов и обладает уникальным именем (DN — англ. Distinguished Name). Уникальное имя может выглядеть, например, следующим образом: «cn=Ivanova_AV, ou=Buhgalteriya, dc=MegaHoloD, dc=ru».

Запись может состоять только из тех атрибутов, которые определены в описании класса записи (object class), которые, в свою очередь, объединены в схемы (schema). В схеме определено, какие атрибуты являются для данного класса обязательными, а какие — необязательными. Также схема определяет тип и правила сравнения атрибутов.


По простому LDAP — это смесь стандартизированного протокола и базы данных, хранящей в себе информацию о пользователях, узлах и объектах сети. Цель - упростить администрирование.

Некоторые из причин использовать LDAP вместо СУБД применительно к администрированию:

- модель хранения информации - иерархическая древовидная структура (у большинства БД структура реляционная);
- LDAP ориентирован на ускорение операции чтения, тогда как в БД приоритетна операция записи;
- клиенты используют стандартный протокол LDAP, тогда как протокол взаимодействия БД с клиентами не стандартизирован;
- служба каталогов обычно легко масштабируется (реплицируется) на несколько серверов.

Служба каталогов легко интегрируется с множеством сервисов, такими как почтовые сервера, samba, dns, dhcp и проч. Т.е. для администрирования возможно использовать одну среду хранения данных для множества сервисов, и например не думать каждый раз при добавлении пользователя, где еще его нужно прописать.

Итак, перейдем к практике. Ставим:

sudo apt-get install slapd ldap-utils migrationtools

Запускаем конфигуратор:

sudo dpkg-reconfigure slapd

и отвечаем на вопросы:

невыполнять настройку сервера openldap: нет

удалять базу при вычистке slapd: да

allow ldapv2 protocol: да


Включаем поддержку  slapd.conf (с новшеством новой версии, с динамической загрузкой, отношения у меня не сложились):

В /etc/default/slapd переменной SLAPD_CONF указываем путь к файлу конфигу, например:

SLAPD_CONF=/etc/ldap/slapd.conf

Генерим рутовский пароль для доступа к ldap:

slappasswd -s pass

Получим следующее:

{SSHA}a2ieiYYJfYMkUHY6RvxjxWu7Nadbpnh9

копируем, дальше понадобится. Создаем файл конфигурации:

sudo touch /etc/ldap/slapd.conf

sudo nano /etc/ldap/slapd.conf

Заполняем:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
modulepath /usr/lib/ldap
moduleload back_bdb
access to * by * read
access to attrs=userPassword
{Tab}by self write
{Tab}by anonymous auth
{Tab}by * none
database bdb
suffix "dc=mega,dc=local"
rootdn "cn=admin,dc=mega,dc=local"
rootpw 
{SSHA}a2ieiYYJfYMkUHY6RvxjxWu7Nadbpnh9
directory /var/lib/ldap
index objectClass eq
index cn eq


Рассмотрим подробнее. Сначала добавляем нужные схемы, в зависимости от того какое программное обеспечение будет использовать ldap. Например для интеграции с dhcp исползуется dhcp.schema, но процесс связки с другими приложениями - тема отдельных статей, здесь освещается только процесс установки и настройки ldap-сервера. Далее указываются пути к Pid-файлу, файлу с аргументами, путь к модулям. Подгружаем модуль bdb, Описываем доступ к информации: указываем, что себе(под кем Вы находитесь в системе) разрешена запись, анонимам предлагается авторизоваться. Указываем тип базы - bdb (во многих руководствах еще используется ldbm). Описываем корень базы и указываем логин и пароль администратора ldap, указываем директорию хранения БД и индексы, для ускорения поиска по базе.
 
Нажатие клавиши {Tab} в указанных строках конфига обязательно, иначе будет ошибка.

Перезапускаем ldap:

sudo /etc/init.d/slapd restart

Если выдала система ошибку, смотрим логи:

nano /var/log/syslog

Проверяем появился ли процесс:

ps -ax | grep slap


Проверяем что 389-ый порт слушается:

netstat -nap tcp | grep 389

Если все нормально, значит сервер готов. Для примера далее создадим группу и пользователя в ней.

Создадим файл группы:

sudo touch /etc/ldap/schema/it_otdel.ldif

sudo nano /etc/ldap/schema/it_otdel.ldif


dn: ou=it_otdel,dc=mega,dc=local
objectClass: top
objectClass: organizationalUnit
ou: it_otdel
description: users it_otdel


В objectClass указываются классы, атрибуты которых используются для описания группы, пользователя и проч. Классы и атрибуты содержатся в схемах, что мы подключили.

Теперь добавляем созданный файл в ldap следующей командой:

ldapadd -x -D "cn=admin,dc=mega,dc=local" -W -f /etc/ldap/schema/it_otdel.ldif

где:

-D - Аутентифицироваться при подключении к каталогу под именем администратора

-x - использовать простую аутентификацию

-W - спросить пароль

-f - файл


Проверяем:

ldapsearch -W -x -D cn=admin,dc=mega,dc=local -b "dc=mega,dc=local" "(ou=it_otdel)"

Если запись данных прошла успешно увидим данные созданной группы.

Далее добавляем пользователя в эту группу:


sudo touch /etc/ldap/schema/ivanov_av.ldif

sudo nano /etc/ldap/schema/ivanov_av.ldif

dn: cn=ivanov_av,ou=it_otdel,dc=mega,dc=local
objectClass: top
objectClass: person
objectClass: shadowAccount
cn: AV
sn: Ivanov
uid: ivanov_av
userpassword:{SSHA}IzlFcr+Q+dbR73edIxDdzZq29nX0GlEM
uidNumber: 0
gidNumber: 0


Пароль генерится так же как и админский (см. выше)

Заливаем данные в базу:

ldapadd -x -D "cn=admin,dc=mega,dc=local" -W -f /etc/ldap/schema/ivanov_av.ldif

Проверяем:

ldapsearch -W -x -D cn=admin,dc=mega,dc=local -b "dc=mega,dc=local" "(cn=ivanov_av)"

Должны вывестись данные пользователя.

Для удаления из базы:

ldapdelete -W -x -D cn=admin,dc=mega,dc=local "cn=ivanov_av,ou=it,dc=mega,dc=local"

Это собственно просто общий пример, реальные примеры связки openldap с другим программным обеспечением:
 
DHCP-Сервер + OpenLDAP : dhcp&ldap
 
Первичный контроллер домена (PDC): Samba + OpenLDAP + Quota : pdc

Sept. 17, 2010