Установка и настройка OpenLDAP и phpLDAPadmin в Ubuntu 16.04

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

Это руководство поможет установить и настроить сервер OpenLDAP в Ubuntu 16.04. Также вы узнаете, как установить phpLDAPadmin, веб-интерфейс для просмотра и управления информацией LDAP. Для защиты веб-интерфейса и сервиса LDAP можно использовать SSL-сертификаты от Let’s Encrypt.

Требования

  • Сервер Ubuntu 16.04.
  • Предварительно установленные Apache и PHP (инструкции можно найти здесь).
  • Для защиты конфиденциальных данных нужно создать SSL-сертификат для Apache (больше информации об этом можно найти в статье Создание сертификата Let’s Encrypt для Apache в Ubuntu 16.04). Для этого нужен домен.

Примечание: Мануал по Let’s Encrypt предполагает, что сервер доступен из Интернета. Если это не так, вам придется использовать другой сервис сертификатов или создать собственный центр сертификации. В любом случае вы сможете выполнить это руководство с минимальными изменениями (в основном отличаются пути или имена файлов сертификатов).

1: Установка и настройка сервера LDAP

Сначала нужно установить сервер LDAP и дополнительные утилиты. Все необходимые пакеты можно найти в стандартном репозитории системы.

Войдите на сервер. Обновите индекс пакетов и установите необходимые пакеты.

sudo apt-get update
sudo apt-get install slapd ldap-utils

Во время установки вам будет предложено выбрать и подтвердить пароль администратора для LDAP. Вы можете ввести любой пароль, в дальнейшем у вас будет возможность обновить его.

Теперь нужно настроить пакет. Пакет slapd может задавать много важных вопросов для конфигурации, но по умолчанию они пропускаются в процессе установки. Чтобы получить доступ ко всем запросам программы, запустите перенастройку пакета:

sudo dpkg-reconfigure slapd

Программа выдаст все запросы информации. Большинство из них нужно оставить по умолчанию.

  • Omit OpenLDAP server configuration? No
  • DNS domain name? Этот параметр определяет базовую структуру пути к каталогу. Прочтите сообщение, чтобы точно понять, как это будет реализовано. Вы можете выбрать любое значение, даже если у вас нет собственного домена (однако в этом руководстве предполагается, что у вас есть домен). В руководстве используется условный домен example.com.
  • Organization name? В руководстве в качестве имени организации используется example.
  • Administrator password?Дважды введите надежный пароль.
  • Database backend? MDB
  • Remove the database when slapd is purged? No
  • Move old database? Yes
  • Allow LDAPv2 protocol? No

Теперь сервер LDAP запущен и настроен. Откройте порт LDAP в брандмауэре.

sudo ufw allow ldap

Протестируйте соединение LDAP с помощью ldapwhoami:

ldapwhoami -H ldap:// -x
anonymous

anonymous – ожидаемый результат, поскольку команда ldapwhoami была запущена без аутентификации на сервере LDAP.

2: Установка и настройка интерфейса phpLDAPadmin

Управлять LDAP можно с помощью командной строки, но многим удобнее будет делать это через интерфейс. Для этого установите phpLDAPadmin, приложение PHP для управления LDAP.

Репозиторий Ubuntu содержит пакет phpLDAPadmin. Установите его:

sudo apt-get install phpldapadmin

Эта команда установит приложение, включит необходимые конфигурации Apache и перезагрузит Apache.

Теперь веб-сервер настроен на обслуживание приложения, нужно внести некоторые дополнительные изменения в настройку. Настройте phpLDAPadmin для использования домена и отключите автозаполнение регистрационной информации LDAP.

Откройте главный конфигурационный файл.

sudo nano /etc/phpldapadmin/config.php

Найдите строку $servers->setValue(‘server’,’name’. В nano для поиска можно использовать CTRL-W +ENTER.

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

$servers->setValue('server','name','Example LDAP');

Затем найдите строку $servers->setValue(‘server’,’base’. Она определяет root иерархии LDAP. Это значение основано на параметре, выбранном при настройке slapd (в данном случае это example.com). Его нужно преобразовать в синтаксис LDAP. Для этого все компоненты домена, кроме точки помещаются в нотацию dc=.

$servers->setValue('server','base', array('dc=example,dc=com'));

Найдите строку bind_id и закомментируйте её, поместив # в начало.

#$servers->setValue('login','bind_id','cn=admin,dc=example,dc=com');

Этот параметр предварительно заполняет учетные данные администратора в веб-интерфейсе. Эту информацию нельзя предоставлять, если страница phpLDAPadmin общедоступна.

Последнее, что нужно настроить, — это параметр, который контролирует видимость некоторых предупреждающих сообщений phpLDAPadmin. По умолчанию приложение показывает довольно много предупреждающих сообщений о файлах шаблонов. Это не влияет на наше текущее использование программного обеспечения. Их можно скрыть с помощью параметра hide_template_warning, раскомментируйте его и установите значение true:

$config->custom->appearance['hide_template_warning'] = true;

Сохраните и закройте файл. Чтобы обновить настройки, ничего перезапускать не нужно.

3: Вход в веб-интерфейс phpLDAPadmin

Откройте приложение phpLDAPadmin в веб-браузере. Обязательно укажите свой домен:

https://example.com/phpldapadmin

Будет загружена лендинг-страница phpLDAPadmin. Нажмите ссылку для входа в левом меню на странице. На экране появится форма входа в систему:

Login DN – это имя пользователя, которое вы будете использовать. Оно состоит из имени учетной записи (в разделе cn=) и компонентов домена (разделенного на разделы dc=). Учетная запись администратора по умолчанию называется admin. Потому чтобы войти, нужно ввести следующее:

cn=admin,dc=example,dc=com

После этого введите пароль администратора, который вы создали во время настройки, затем нажмите кнопку Authenticate.

Вы попадете в основной интерфейс.

Здесь вы можете добавлять пользователей, организации, группы и отношения.

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

Читайте также: Установка и настройка сервера LDAP на Ubuntu 12.04 VPS

4: Настройка шифрования StartTLS LDAP

Веб-интерфейс зашифрован, но внешние клиенты LDAP по-прежнему передают данные в виде простого текста.

Используйте SSL-сертификат Let’s Encrypt для защиты трафика.

Копирование сертификата

Поскольку демон slapd работает как пользователь openldap, а сертификат Let’s Encrypt принадлежит пользователю root, нужно внести несколько коррективов в настройки, чтобы демон slapd мог получить доступ к сертификату. Создайте короткий сценарий в /etc/ssl/, стандартном каталоге системы для хранения сертификатов и ключей SSL. Сценарий позволяет автоматизировать этот процесс, чтобы не повторять его вручную всякий раз, когда будут обновляться сертификаты Let’s Encrypt. Позже нужно будет добавить его в cron job.

Сначала откройте новый текстовый файл для сценария оболочки:

sudo nano /usr/local/bin/renew.sh

Вставьте в файл следующий код. В строке SITE=example.com укажите свой домен.

#!/bin/sh
SITE=example.com
# move to the correct let's encrypt directory
cd /etc/letsencrypt/live/$SITE
# copy the files
cp cert.pem /etc/ssl/certs/$SITE.cert.pem
cp fullchain.pem /etc/ssl/certs/$SITE.fullchain.pem
cp privkey.pem /etc/ssl/private/$SITE.privkey.pem
# adjust permissions of the private key
chown :ssl-cert /etc/ssl/private/$SITE.privkey.pem
chmod 640 /etc/ssl/private/$SITE.privkey.pem
# restart slapd to load new certificates
systemctl restart slapd

Этот сценарий открывает каталог сертификатов Let’s Encrypt, копирует файлы в /etc/ssl, а затем обновляет права на закрытые ключи, передавая группе ssl-cert право на чтение. Затем он перезапускает slapd, чтобы обновить сертификаты.

Сохраните и закройте файл.

sudo chmod u+x /usr/local/bin/renew.sh

Запустите сценарий:

sudo /usr/local/bin/renew.sh

Убедитесь, что сценарий работает. Для этого запросите список файлов /etc/ssl:

sudo su -c 'ls -al /etc/ssl/{certs,private}/example.com*'

Вышеприведенная команда немного отличается от обычной. Раздел su -c ‘. . .’ переводит команду ls в корневую оболочку. В противном случае команда будет выполняться с привилегиями пользователя без доступа к sudo, и не сработает, потому этот пользователь не имеет права на чтение /etc/ssl/private.

Команда ls выведет данные о трех файлах. Проверьте привилегии и права собственности.

-rw-r--r-- 1 root root     1793 May 31 13:58 /etc/ssl/certs/example.com.cert.pem
-rw-r--r-- 1 root root     3440 May 31 13:58 /etc/ssl/certs/example.com.fullchain.pem
-rw-r----- 1 root ssl-cert 1704 May 31 13:58 /etc/ssl/private/example.com.privkey.pem

Теперь нужно настроить certbot.

Автоматизация certbot

Добавьте certbot в cron job, чтобы сценарий запускался автоматически после обновления сертификатов.

sudo crontab -e

В таблице должна быть строка certbot renew. Добавьте в нее выделенные красным параметры.

15 3 * * * /usr/bin/certbot renew —quiet —renew-hook /usr/local/bin/renew.sh

Сохраните и закройте crontab.

Поддержка безопасных соединений slapd

Добавьте пользователя openldap в группу ssl-cert, чтобы демон slapd смог читать закрытые ключи.

sudo usermod -aG ssl-cert openldap

Перезапустите slapd:

sudo systemctl restart slapd

Затем нужно настроить slapd для использования этих сертификатов и ключей. Для этого добавьте изменения конфигурации в файл LDIF (это формат обмена данными LDAP) и загрузите их  на сервер LDAP с помощью команды ldapmodify.

Откройте файл LDIF:

cd ~
nano ssl.ldif

В пустой файл добавьте следующие строки.

dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/example.com.fullchain.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/certs/example.com.cert.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/private/example.com.privkey.pem

Сохраните и закройте файл.

Примените новые параметры с помощью ldapmodify:

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Не нужно перезагружать slapd для загрузки новых сертификатов, это происходит автоматически с помощью ldapmodify. Запустите команду ldapwhoami еще раз. На этот раз нужно указать правильное имя хоста и добавить параметр -ZZ для принудительного безопасного подключения:

ldapwhoami -H ldap://example.com -x -ZZ

При использовании безопасного соединения нужно указывать полное имя хоста, потому что имя хоста должно совпадать с именем в сертификате. Это предотвращает атаки man-in-the-middle, когда злоумышленник может перехватить ваше соединение и выдавать себя за ваш сервер.

Команда ldapwhoami должна вернуть anonymous без ошибок. Шифрование соединений LDAP успешно настроено.

Заключение

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

Читайте также:

Tags: , , , ,
  • Sergii Cholovskiy

    Милион статей по банальной установке, и не одной как потом через веб морду банально добавить пользователя и дать ему право создавать и менять пароли пользователям. А вить это то самое важное, именно настройка и права самих