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

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

В некотором смысле, он работает аналогично реляционной базе данных, но это не совсем так. Иерархическая структура – вот основное различие в том, как связаны данные в LDAP и в СУБД. LDAP может использоваться для хранения любой информации и часто является одним из компонентов централизованной системы аутентификации.

В этом мануале вы узнаете, как установить и настроить OpenLDAP на сервере Ubuntu 14.04. Затем вы установите интерфейс phpLDAPadmin.

Установка LDAP и вспомогательных утилит

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

Обновите локальный индекс пакетов. После этого можно установить нужные пакеты:

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? Этот параметр определяет базовую структуру пути к вашему каталогу. Прочтите сообщение, чтобы точно понять, как он будет реализован. На самом деле это довольно открытый параметр. Вы можете выбрать любое значение в «domain name», даже если вы не являетесь владельцем домена. Однако если у вас есть доменное имя сервера, вероятно, разумно использовать его. В этом мануале используется условный домен test.com.
  • Organization name? Это, опять же, почти полностью зависит от ваших предпочтений. В этом руководстве мы будем использовать условное название example.
  • Administrator password? Как уже говорилось в разделе установки, это ваша возможность выбрать новый пароль администратора. Пароль, который вы выберете здесь, перезапишет предыдущий пароль, который вы использовали.
  • Database backend? Выберите HDB
  • Remove the database when slapd is purged? Выберите No
  • Move old database? Введите Yes
  • Allow LDAPv2 protocol? Введите No

Теперь LDAP настроен правильно.

Установка phpLDAPadmin

phpLDAPadmin – веб-интерфейс для управления LDAP.

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

Пакет phpLDAPadmin есть в репозитории Ubuntu. Установите его:

sudo apt-get install phpldapadmin

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

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

Настройка phpLDAPadmin

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

Откройте главный конфигурационный файл с правами root в текстовом редакторе:

sudo nano /etc/phpldapadmin/config.php

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

$servers->setValue('server','host','server_domain_name_or_IP');

Затем нужно настроить домен, который вы выбрали для своего LDAP-сервера. Помните, в данном примере мы используем test.com. Нужно перевести его в синтаксис LDAP, заменив каждый компонент домена (все, кроме точек) значением спецификации dc.

То есть вместо test.com нужно ввести что-то вроде dc=test,dc=com. Найдите следующий параметр и используйте формат, который мы только что обсудили, для ссылки на свой домен:

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

Также нужно настроить это в параметре login_ bind_id. Параметр cn уже установлен как «admin». Это верное значение. Нужно просто откорректировать части dc:

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

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

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

Вы можете сохранить и закрыть файл.

Создание SSL-сертификата

Подключение к LDAP-серверу нужно защитить с помощью SSL, чтобы внешние стороны не могли перехватить ваши сообщения.

Поскольку интерфейс администратора взаимодействует с самим сервером LDAP в локальной сети, вам не нужно использовать SSL для этого соединения. Нужно только обеспечить внешнее соединение с браузером при подключении.

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

По умолчанию пакеты OpenSSL должны быть установлены в вашей системе. Сейчас нужно создать каталог для хранения сертификата и ключа:

sudo mkdir /etc/apache2/ssl

Затем нужно создать ключ и сертификат:

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/apache.crt

Вам нужно ответить на некоторые вопросы, чтобы утилита правильно заполнила поля в сертификате. Единственное действительно важное поле — это Common Name (укажите FQDN сервера или свое имя). Введите доменное имя или IP-адрес вашего сервера.

Когда вы закончите, ваш сертификат и ключ будут помещены в каталог /etc/apache2/ssl.

Создание файла аутентификации

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

Утилита, которая вам нужна, содержится в пакете apache2-utils.

sudo apt-get install apache2-utils

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

Сохраните файл в каталоге /etc/apache2. Создайте файл и укажите имя пользователя, которое вы хотите применить:

sudo htpasswd -c /etc/apache2/htpasswd demo_user

Теперь можно изменить настройки Apache, чтобы он поддерживал новые функции безопасности.

Настройка Apache

Первое, что нужно должны сделать, это включить модуль SSL в Apache. Введите:

sudo a2enmod ssl

Это включит модуль.

В настоящее время Apache считывает файл 000-default.conf для обработки обычных, незашифрованных HTTP-соединений. Теперь же он должен перенаправлять все запросы на интерфейс phpLDAPadmin по HTTPS, чтобы соединение было зашифровано.

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

Для начала нужно изменить псевдоним для обслуживания файлов phpLDAPadmin.

Откройте файл с правами root в текстовом редакторе:

sudo nano /etc/phpldapadmin/apache.conf

Здесь нужно определить расположение URL-адреса, по которому вы хотите получить доступ к интерфейсу. По умолчанию используется /phpldapadmin, но это нужно изменить, чтобы устранить атаки методом подбора паролей, отсеять ботов и злоумышленников.

Здесь мы введем /superldap, но вы можете выбрать другое значение.

Затем нужно изменить строку, которая определяет псевдоним. Она должна быть в блоке IfModule mod_alias.c . В результате она будет выглядеть так:

<IfModule mod_alias.c>
Alias /superldap /usr/share/phpldapadmin/htdocs
</IfModule>

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

Настройка виртуального хоста HTTP

Теперь нужно изменить текущий файл виртуальных хостов. Откройте его с правами root в редакторе:

sudo nano /etc/apache2/sites-enabled/000-default.conf

Внутри вы увидите довольно простой файл конфигурации, который выглядит так:

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

В него нужно добавить информацию о доменном имени или IP-адресе, чтобы определить имя сервера, и настроить перенаправление, чтобы все HTTP-запросы передавались на интерфейс HTTPS.

Эти изменения будут выглядеть следующим образом (элементы, выделенные красным, замените своими данными).

<VirtualHost *:80>
ServerAdmin webmaster@server_domain_or_IP
DocumentRoot /var/www/html
ServerName server_domain_or_IP
Redirect permanent /superldap https://server_domain_or_IP/superldap
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

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

Настойка виртуального хоста HTTPS

Apache включает файл  виртуального хоста с поддержкой SSL по умолчанию. Однако пока что он не включен.

Чтобы включить его, введите:

sudo a2ensite default-ssl.conf

Это свяжет файл из каталога sites-available с каталогом sites-enabled . Теперь можно отредактировать этот файл:

sudo nano /etc/apache2/sites-enabled/default-ssl.conf

Прежде всего, установите значение ServerName – это домен или IP-адрес сервера – и измените директиву ServerAdmin:

ServerAdmin webmaster@server_domain_or_IP
ServerName server_domain_or_IP

Затем нужно установить директивы SSL-сертификата, которые определяют ключ и сертификат. Директивы должны уже существовать в вашем файле, поэтому просто измените их значения:

SSLCertificateFile /etc/apache2/ssl/apache.crt
SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Последнее, что нужно сделать, это настроить блок location, который будет включать парольную аутентификацию для всей установки phpLDAPadmin.

Для этого нужно сослаться на расположение phpLDAPadmin и настроить аутентификацию с помощью созданного ранее файла паролей. Так только валидные пользователи смогут получить доступ к установке.

<Location /superldap>
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>

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

Перезапустите Apache.

sudo service apache2 restart

Вход в phpLDAPadmin

Вы внесли все необходимые изменения в программное обеспечение phpLDAPadmin. Теперь можно использовать его.

Чтобы получить доступ к веб-интерфейсу, посетите доменное имя или внешний IP- нашего сервера, а затем укажите настроенный вами псевдоним. В данном случае это было /superldap:

http://server_domain_name_or_IP/superldap

Сначала, вероятно, вы увидите предупреждение о том, что SSL-сертификат не подписан доверенным ЦС. Это значит, что браузер не распознает центр сертификации, который подписал ваш сертификат. Поскольку вы подписали его самостоятельно, это ожидаемое поведение.

Нажмите кнопку Proceed anyway или любую другую аналогичную кнопку, которую предлагает браузер.

Затем вы увидите запрос пароля.

Введите учетные данные аккаунта, которые вы создали с помощью htpasswd. Вы увидите главную страницу phpLDAPadmin.

Кликните login.

Появится форма аутентификации. DN – это имя пользователя, которое вы будете использовать. Имя учетной записи находится в разделе cn, а домен сервера в dc.

Если вы правильно настроили phpLDAPadmin, запрос должен быть предварительно заполнен правильным значением учетной записи администратора. В данном случае это выглядит так:

cn=admin,dc=test,dc=com

По запросу введите пароль администратора LDAP.

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

Добавление элементов, групп и пользователей

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

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

Больше информации по настройке вы найдете в специальном разделе мануала Установка и настройка сервера LDAP на Ubuntu 12.04 VPS. Все действия будут аналогичными для любой установки LDAP.

Заключение

Теперь у вас есть сервер OpenLDAP на сервере Ubuntu 14.04. Вы также установили и настроили веб-интерфейс для управления своей структурой через phpLDAPadmin. Кроме того, вы обеспечили базовую безопасность приложения с помощью SSL и парольной аутентификации.

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