Как установить и настроить OpenLDAP и phpLDAPadmin в Ubuntu 16.04

Вступление

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

В этом руководстве мы обсудим, как установить и настроить сервер OpenLDAP в Ubuntu 16.04. Затем мы установим phpLDAPadmin, веб-интерфейс для просмотра и управления информацией LDAP. Мы защитим веб-интерфейс и службу LDAP с помощью SSL-сертификатов от Let’s Encrypt, поставщика бесплатных и автоматических сертификатов.

Предпосылки

Перед началом этого урока у вас должен быть установлен сервер Ubuntu 16.04 с Apache и PHP. Вы можете следовать нашему учебному руководству Как установить Linux, Стек Apache, MySQL, PHP (LAMP) в Ubuntu 16.04, пропуская Шаг 2, так как нам не понадобится сервер базы данных MySQL.

Кроме того, поскольку мы будем вводить пароли в веб-интерфейс, мы должны защитить Apache с помощью SSL-шифрования. Прочитайте Как защитить Apache с помощью Let’s Encrypt на Ubuntu 16.04 скачать и настроить бесплатные сертификаты SSL. Вам понадобится доменное имя для завершения этого шага. Мы будем использовать эти же сертификаты для обеспечения безопасных соединений LDAP.

Шаг 1 - Установка и настройка сервера LDAP

Наш первый шаг - установить сервер LDAP и некоторые связанные утилиты. К счастью, все нужные нам пакеты доступны в стандартных репозиториях Ubuntu.

Войдите на свой сервер. Поскольку в этом сеансе мы впервые используем + apt-get +, мы обновим локальный индекс пакетов, а затем установим нужные нам пакеты:

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

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

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

sudo dpkg-reconfigure slapd

В этом процессе есть немало новых вопросов. Мы будем принимать большинство значений по умолчанию. Давайте рассмотрим вопросы:

  • Пропустить конфигурацию сервера OpenLDAP?

  • DNS доменное имя?

  • Эта опция будет определять базовую структуру вашего пути к каталогу. Прочитайте сообщение, чтобы понять, как именно это будет реализовано. На самом деле вы можете выбрать любое значение, которое вам нравится, даже если вы не являетесь владельцем фактического домена. Однако в этом руководстве предполагается, что у вас есть правильное доменное имя для сервера, поэтому вы должны его использовать. Мы будем использовать * example.com * на протяжении всего урока.

  • Название организации?

  • Для этого руководства мы будем использовать * пример * в качестве названия нашей организации. Вы можете выбрать все, что считаете нужным.

  • Пароль администратора?

  • База данных базы данных?

  • Удалить базу данных при удалении slapd?

  • Переместить старую базу данных?

  • Разрешить протокол LDAPv2?

На этом этапе ваш сервер LDAP настроен и работает. Откройте порт LDAP на брандмауэре, чтобы внешние клиенты могли подключаться:

sudo ufw allow ldap

Давайте проверим наше соединение LDAP с + ldapwhoami +, которое должно вернуть имя пользователя, с которым мы связаны:

ldapwhoami -H ldap:// -x
Outputanonymous

+ anonymous + - это результат, который мы ожидаем, так как мы запустили + ldapwhoami + без входа на сервер LDAP. Это означает, что сервер работает и отвечает на запросы. Далее мы настроим веб-интерфейс для управления данными LDAP.

Шаг 2 - Установка и настройка веб-интерфейса phpLDAPadmin

Хотя администрирование LDAP очень возможно через командную строку, большинству пользователей будет проще использовать веб-интерфейс. Мы собираемся установить phpLDAPadmin, приложение PHP, которое предоставляет эту функциональность.

Репозитории Ubuntu содержат пакет phpLDAPadmin. Вы можете установить его с помощью + apt-get:

sudo apt-get install phpldapadmin

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

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

Начните с открытия основного файла конфигурации с правами суперпользователя в текстовом редакторе:

sudo nano /etc/phpldapadmin/config.php

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

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

/etc/phpldapadmin/config.php

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

Затем перейдите к строке + $ servers→ setValue ('server', 'base' +. Этот конфиг сообщает phpLDAPadmin, каков корень иерархии LDAP. Это основано на значении, которое мы ввели при перенастройке пакета + slapd +. В нашем примере мы выбрали + example.com + и нам нужно перевести это в синтаксис LDAP, поместив каждый компонент домена (все, кроме точки) в нотацию + dc = +:

/etc/phpldapadmin/config.php

$servers->setValue('server','base', array(''));

Теперь найдите строку конфигурации login + bind_id + и закомментируйте ее с помощью + # + в начале строки:

/etc/phpldapadmin/config.php

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

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

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

/etc/phpldapadmin/config.php

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

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

Далее мы войдем в phpLDAPadmin.

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

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

https:///phpldapadmin

Загрузится целевая страница phpLDAPadmin. Нажмите на ссылку * login * в левом меню на странице. Форма входа будет представлена:

изображение: https: //assets.digitalocean.com/articles/install-openldap/phpldapadmin-login-screen.png [страница входа phpLDAPadmin]

  • Login DN * - это имя пользователя, которое вы будете использовать. Он содержит имя учетной записи в виде раздела + cn = + и имя домена, которое вы выбрали для сервера, разбитого на разделы + dc = +, как описано в предыдущих шагах. Учетная запись администратора по умолчанию, которую мы настраиваем во время установки, называется * admin *, поэтому в нашем примере мы набрали бы следующее:

cn=admin,

После ввода соответствующей строки для вашего домена введите пароль администратора, который вы создали во время настройки, затем нажмите кнопку * Аутентифицировать *.

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

изображение: https: //assets.digitalocean.com/articles/install-openldap/phpldapadmin-interface.png [главная страница phpLDAPadmin]

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

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

Поскольку в Ubuntu 16.04 этот процесс такой же, как и в предыдущих версиях, вы можете выполнить действия, описанные в разделе «Дополнительные организационные единицы, группы и пользователи» https://www.digitalocean.com/community/tutorials/. как установить и настроить базовый ldap-сервер-на-ubuntu-12-04-vps # add-организационные-единицы-группы-и-пользователи [статья по установке LDAP для Ubuntu 12.04].

Эти шаги хорошо подойдут для этой установки phpLDAPadmin, поэтому следуйте инструкциям, чтобы немного поработать с интерфейсом и научиться структурировать ваши данные.

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

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

Хотя мы зашифровали наш веб-интерфейс, внешние клиенты LDAP по-прежнему подключаются к серверу и передают информацию в виде простого текста. Давайте использовать наши SSL-сертификаты Let Encrypt, чтобы добавить шифрование на наш сервер LDAP.

Копирование сертификатов Let’s Encrypt

Поскольку демон + slapd + запускается от имени пользователя * openldap *, а сертификаты Let Encrypt могут быть прочитаны только пользователем * root *, нам потребуется внести некоторые изменения, чтобы разрешить + slapd + доступ к сертификатам. Мы создадим короткий скрипт, который будет копировать сертификаты в + / etc / ssl / +, стандартный системный каталог для SSL-сертификатов и ключей. Причина, по которой мы создаем сценарий для этого, а не просто вводим команды вручную, заключается в том, что нам нужно будет повторять этот процесс автоматически при каждом обновлении сертификатов Let Encrypt. Мы обновим задание cron + certbot + позже, чтобы включить это.

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

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

Это откроет пустой текстовый файл. Вставьте в следующий скрипт. Обязательно обновите часть + SITE = +, чтобы отразить, где хранятся ваши сертификаты Let Encrypt. Вы можете найти правильное значение, перечислив каталог сертификатов с помощью + sudo ls / etc / letsencrypt / live +.

/usr/local/bin/renew.sh

#!/bin/sh

SITE=

# 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 Encrypt, копирует файлы в + / etc / ssl +, затем обновляет разрешения закрытого ключа, чтобы сделать его читаемым системной группой * ssl-cert *. Он также перезапускает + slapd +, что гарантирует загрузку новых сертификатов, когда этот скрипт запускается из нашего задания cron продления + certbot +.

Сохраните и закройте файл, затем сделайте его исполняемым:

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

Затем запустите скрипт с помощью + sudo +:

sudo /usr/local/bin/renew.sh

Убедитесь, что скрипт работает, перечислив новые файлы в + / etc / ssl +:

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

Команда + sudo + выше немного отличается от обычной. Часть + su -c '' + оборачивает всю команду + ls + в оболочку * root * перед ее выполнением. Если мы этого не сделаем, расширение подстановочного имени + * + будет выполняться с разрешениями вашего пользователя, не являющегося пользователем sudo, и произойдет сбой, потому что + / etc / ssl / private + не читается вашим пользователем.

+ ls + напечатает подробную информацию о трех файлах. Убедитесь, что права собственности и разрешения выглядят правильно:

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

Далее мы автоматизируем это с помощью + certbot +.

Обновление Certbot Renewal Cron Job

Нам нужно обновить ваше задание + certbot cron, чтобы запускать этот скрипт при каждом обновлении сертификатов:

sudo crontab -e

У вас уже должна быть строка + certbot renew +. Добавьте выделенную часть ниже:

кронтаб

15 3 * * * /usr/bin/certbot renew --quiet

Сохраните и закройте crontab. Теперь, когда + certbot обновляет сертификаты, запускается наш скрипт для копирования файлов, настройки разрешений и перезапуска сервера` + slapd`.

Настройка 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

Это откроет пустой файл. Вставьте следующее в файл, обновив имена файлов, чтобы они отражали ваш домен:

ssl.ldif

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

Сохраните и закройте файл, затем примените изменения с помощью + ldapmodify +:

sudo ldapmodify -H ldapi:// -Y EXTERNAL -f ssl.ldif
OutputSASL/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:// -x -ZZ

Нам нужно полное имя хоста при использовании безопасного соединения, потому что клиент проверит, чтобы убедиться, что имя хоста соответствует имени хоста в сертификате. Это предотвращает атаки «человек посередине», когда злоумышленник может перехватить ваше соединение и выдать себя за ваш сервер.

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

Заключение

В этом руководстве мы установили и настроили сервер OpenLDAP + slapd + и веб-интерфейс LDAP phpLDAPadmin. Мы также настроили шифрование на обоих серверах и обновили + certbot +, чтобы автоматически обрабатывать + slapd + процесс обновления Let Let Encrypt.

Система, которую мы настроили, достаточно гибкая, и вы сможете разработать собственную организационную схему и управлять группами ресурсов в соответствии с вашими потребностями. Для получения дополнительной информации об управлении LDAP, включая дополнительные инструменты и методы командной строки, прочитайте наш учебник https://www.digitalocean.com/community/tutorials/how-to-manage-and-use-ldap-servers-with-openldap- утилиты [Как управлять серверами LDAP и использовать утилиты OpenLDAP]. Для получения более подробной информации о защите сервера LDAP, в том числе о том, как заставить всех клиентов использовать безопасные соединения, читайте https://www.digitalocean.com/community/tutorials/how-to-encrypt-openldap-connections-using- starttls [Как зашифровать соединения OpenLDAP с помощью STARTTLS].

Related