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.confsudo 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}a2ieiYYJfYMkUHY6RvxjxWu7Nadbpnh9directory /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.ldifdn: 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.ldifsudo nano /etc/ldap/schema/ivanov_av.ldifdn: 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