Разворачиваем LDAP в ОС Linux

2cbbc79be7f6b174fcfb4d577c092123.png

Глобальный каталог LDAP стал неотъемлемой частью современной ИТ инфраструктуры любой крупной организации. Сама технология каталога LDAP у большинства плотно ассоциируется с Active Directory от Майкрософт. Однако сейчас все больше организаций пытаются уйти от решений данного вендора и перейти на софт с открытым исходным кодом.

В этой статье мы поговорим о том, из каких компонентов состоит LDAP и выполним некоторые основные настройки под Ubuntu. Но сначала немного теории о том, что эта технология из себя представляет.

Итак, начнем с рассмотрения того, что из себя представляет LDAP. LDAP (Lightweight Directory Access Protocol, «легковесный протокол доступа к каталогам») — протокол прикладного уровня для доступа к службе каталогов X.500. LDAP — протокол, использующий TCP/IP и позволяющий производить операции аутентификации (bind), поиска (search) и сравнения (compare), а также операции добавления, изменения или удаления записей. При использовании настроек по умолчанию, LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP. Если же мы используем SSL, тогда для соединений назначается порт 636.

Записи в LDAP

Начнем рассмотрение основ протокола LDAP с понятия запись. В каталоге LDAP каждая запись может состоять из одного или нескольких атрибутов и обладать уникальным именем (DN, Distinguished Name). Это имя может выглядеть по-разному, например: «cn=Петр Иванов, ou=Менеджеры, dc=domain, dc=com». DN состоит из одного или нескольких относительных уникальных имён, разделённых запятой. Относительное уникальное имя имеет вид ИмяАтрибута=значение. LDAP имеет древовидную структуру. При этом необходимо отметить, что на одном уровне каталога не может существовать двух записей с одинаковыми относительными уникальными именами.

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

932bc3d8407b139391b9fdbc81743555.png

Установка под Linux

В качестве примера развертывания LDAP под Linux мы будем использовать ОС Ubuntu. В роли автономного демона LDAP мы будем разворачивать приложение slapd. Далее, мы развернем  минимальную рабочую конфигурацию с записью верхнего уровня и уникальным именем администратора. В частности, мы создадим экземпляр базы данных, который можно использовать для хранения своих данных. Однако суффикс (или базовый DN) этого экземпляра будет определен из доменного имени хоста. Надо понимать, что сменить базовый DN после развертывания LDAP невозможно без полного пересоздания всего дерева LDAP. Так, что если вас не устраивает приведенное в примере DN, то необходимо определиться с собственным DN до начала процесса развертывания.

Разворачиваем LDAP

Итак, приступаем к установке сервера и основных утилит командной строки. Для этого выполним следующую команду:

sudo apt install slapd ldap-utils

Если вы хотите изменить суффикс вашего информационного дерева каталогов (DIT), сейчас самое подходящее время, поскольку его изменение приводит к удалению существующего (если он был). Чтобы изменить суффикс, выполните следующую команду:

 sudo dpkg-reconfigure slapd

На протяжении всего процесса установки мы будем выполнять множество команд с помощью утилит LDAP. Чтобы сэкономить на вводе текста, мы можем настроить библиотеки OpenLDAP с определенными значениями по умолчанию в файле /etc/ldap/ldap.conf (измените эти записи в соответствии с именем вашего сервера и суффиксом каталога):

BASE dc=domain,dc=com

URI ldap://ldap01.domain.com

158211bc6f5f76bbf3c157ea25cbb512.png

Настройка информационного дерева каталогов

Используемый нами пакет slapd разработан таким образом, чтобы его работу можно было настроить в рамках самого сервиса, выделив для этой цели отдельное дерево каталогов. Благодаря этому мы можем динамически настраивать slapd без перезапуска службы или редактирования конфигурационных файлов. Сама конфигурация состоит из набора текстовых файлов LDIF, расположенных в каталоге /etc/ldap/slapd.d, но их никогда не следует редактировать напрямую. Традиционный метод правки конфигурации с использованием плоского файла (slapd.conf) также можно использовать, но он не рекомендуется.

Сразу после установки у нас будут созданы две базы данных, или как их еще называют суффиксы: один для ваших данных, основанный на домене вашего хоста (dc=domain, dc=com), и один для вашей конфигурации, с корнем в cn=config. Чтобы изменить данные на каждом из них, нам нужны разные учетные данные и методы доступа:

dc=domain,dc=com

Пользователь с правами администратора для этого суффикса — cn=admin, dc=domain, dc=com, а его пароль — тот, который был выбран во время установки пакета slapd.

cn=config

Конфигурация самого slapd будет храниться под этим суффиксом. Изменения в него могут быть внесены с помощью использования специального DN:

gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth.9

Добавляем записи в каталог

Давайте дополним наш каталог данными. Мы добавим узлы People, Groups, группу Managers и пользователя John.

Для этого мы создадим файл add_content.ldif:

dn: ou=People,dc=domain,dc=com

objectClass: organizationalUnit

ou: People

    

dn: ou=Groups,dc=domain,dc=com

objectClass: organizationalUnit

ou: Groups

    

dn: cn=miners,ou=Groups,dc=domain,dc=com

objectClass: posixGroup

cn: miners

gidNumber: 5000

    

dn: uid=john,ou=People,dc=domain,dc=com

objectClass: inetOrgPerson

objectClass: posixAccount

objectClass: shadowAccount

uid: john

sn: Doe

givenName: John

cn: John Doe

displayName: John Doe

uidNumber: 10000

gidNumber: 5000

userPassword: {CRYPT}x

gecos: John Doe

loginShell: /bin/bash

homeDirectory: /home/john

Мы можем проверить правильность добавления информации с помощью утилиты ldapsearch. Например, давайте выполним поиск записи john и запросим атрибуты cn и gidnumber:

$ ldapsearch -x -LLL -b dc=domain,dc=com '(uid=john)' cn gidNumber

dn: uid=john,ou=People,dc=domain,dc=com

cn: John Doe

gidNumber: 5000

Как видно, учетная запись успешно найдена.

Заключение

В этой статье мы рассмотрели процесс базового развертывания каталога LDAP под Ubuntu Linux,. В следующей статье мы подробно рассмотрим добавление групп и отдельных пользователей, а также внесение других изменений в конфигурацию LDAP.

Напоследок приглашаю всех читателей на бесплатный вебинар, где мы разберём основные методы для решения двух задач: увеличение производительности веб-приложений и работа с высокими нагрузками. Для этого погрузимся в процесс взаимодействия веб-браузера и веб-сервера, а также найдём множество полезных настроек модулей Nginx.

© Habrahabr.ru