Cyrus + LDAP

Материал из DvoWiki
Перейти к: навигация, поиск

Введение

В этой статье я опишу процесс настройки почтовой системы Сyrus для работы с LDAP. Управление пользователями в LDAP будет осуществляться через LDAP Account Manager (LAM). Также будет описана возможность использования LAM для управления почтовыми ящиками пользователей. В качестве подопытной операционной системы будет рассматриваться Gentoo Linux, но с небольшими изменениями я думаю эта статься подойдёт для любого дистрибутива.

Настройка Cyrus для работы с LDAP

Подготовка LDAP

Для того чтобы настроить Cyrus для работы с LDAP, сначала необходимо иметь рабочую копию LDAP. Здесь я буду рассматривать в качестве ДВФЗ сервера OpenLDAP. Руководств по первоначальной настройке которого в сети более чем предостаточно. Короче говоря, будем полагать что у вас уже есть рабочий сервер LDAP. Управление учётными записями пользователей я предлагаю осуществлять через LAM. Поэтому, нужно будет скачать его (http://www.ldap-account-manager.org/lamcms/releases) и установить. Так как LAM по сути своей является просто PHP веб приложением, поэтому достаточно просто скопировать папку с ним в директорию, подведомственную вашему веб серверу. Настройка довольно-таки подробно освещена в документации (LAM Documentation). Дальше, после предварительной настройки LDAP и LAM. Необходимо создать поддиректорию, в которой будут храниться пользователи вашей организации. Пусть, например, это будет

ou=users,ou=your,dc=organisation,dc=ru

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

ou=serv_account,ou=users,ou=your,dc=organisation,dc=ru

Не обязательно делать эти фиктивные аккаунты полноценными пользователями, достаточно будет чтобы они имели тип simpleSecurityObject. Добится этого можно создавая акаунты через Tree View.

Настройка saslauthd

При обращении пользователя к любой более менее защищённой системе требуется аутентификация. У cyrus есть множество методов аутентификации и один из них аутентификация через LDAP. Осуществляется она через The Cyrus SASL (Simple Authentication and Security Layer). Так что, для начала нам необходимо установить пакет cyrus-sasl c поддержкой LDAP.

echo «dev-libs/cyrus-sasl openldap» » /etc/portage/package.use
emerge -pv cyrus-sasl
dev-libs/cyrus-sasl-2.1.23-r6 USE="berkdb crypt gdbm openldap pam ssl -authdaemond -java -kerberos -mysql -ntlm_unsupported_patch -postgres -sample -srp -urandom"
emerge cyrus-sasl

После этого в папке /etc/init.d/ должен появится файл saslauthd. Для того чтобы этот демон знал откуда брать свои настройки нужно отредактировать файл /etc/conf.d/saslauthd и добавить в опции путь до конфигурационного файла. У меня это будет /etc/saslauthd.conf. Также, чтобы демон знал, что нужно подключаться к LDAP нужно указать еему флаг -a ldap.

emacs /etc/conf.d/saslauthd
…
SASLAUTHD_OPTS="${SASLAUTHD_OPTS} -a ldap -V -O /etc/saslauthd.conf"

Дальше можно приступить к редактированию файла настройки saslauthd.

emacs /etc/saslauthd.conf

ldap_servers: ldap://localhost #адрес сервера LDAP
ldap_bind_dn: cn=sasl,ou=serv_accounts,ou=users,ou=your,dc=domain,dc=ru #вспомогательный пользователь для подключения к LDAP
ldap_password: sasl_secret_password #пароль для вспомогательного пользователя
ldap_search_base: dc=domain,dc=ru #узел LDAP для поиска пользователей
ldap_filter: mail=%U@%d #фильтр для поиска нужного email

#options thet provide processing mail uids with base realm your_domain.ru
ldap_default_realm: your_domain.ru #домен для ваших писем
ldap_realm: your_domain.ru #домен для ваших писем

ldap_mech: SSHA #В каком виде пароли хранятся в LDAP

#Дополнительные параметры безопасности, с ними стоит повозится уже после того как всё заработает
#ldap_start_tls: yes #включить шифрование
#ldap_tls_check_peer: yes #проверять сертификат LDAP сервера
#ldap_tls_cert: /etc/ssl/ldap.crt #путь до сертификата


Настройки этого файла достаточно прямолинейны, но если есть вопросы всегда можно обратится к справке, которая находится в фаиле /usr/share/doc/cyrus-sasl-n.n.n/saslauthd/LDAP_SASLAUTHD.bz2. Проясню лишь некоторые нюансы. Во первых, для подключения к LDAP и поиска по директориям нам понадобится вспомогательный аккаунт. Я предпочитаю создавать такие аккацнты в специальных поддиректориях, например u=serv_accounts. Процесс создания такого аккаунта будет описан ниже. Во вторых, пароли пользователей в LDAP всё таки стоит хранить в зашифрованном виде, поэтому в поле ldap_mech стоит SSHA.

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

/etc/init.d/sslauthd restart
testsaslauthd -u pozpl -p my_silly_password

Последняя операция будет искать пользователя с emal pozpl@ your_domain.ru в каталоге LDAP, где базовым узлом для поиска будет dc=domain,dc=ru. Если всё OK, то можем приступать к дальнейшим настройкам, если нет, то будет необходимо обратить свой взор на логи LDAP. Настройки Cyrus В настройках cyrus необходимо поменять всего лишь несколько строк. Для этого отредактируем файл /etc/imapd.conf.

emacs /etc/imapd.conf
…..
allowanonymouslogin: no
allowplaintext: yes # Разрешаем plaintext пароль
sasl_pwcheck_method: saslauthd #говорим cyrus аутентифицироваться через saslauthd
sasl_mech_list: PLAIN #Использовать простой пароль

На последнем пункте нужно заострить особое внимание. Так как мы храним в LDAP хеш сумму пароля, то нет смысла аутентифицироваться в LDAP с другой хеш суммой (MD5, SHA, SSHA), потому что кроме как пересчитав хеш исходного текста, проверить правильность пароля не получится. В силу этого необходимо настроить систему так, что все взаимодействия пользователя с Cyrus должны происходить и использованием шифрованного канала, например, TLS. Пока этим заморачиваться не стоит, но для того чтобы включить эту опцию достаточно добавить в файл /etc/imapd.conf следующие строки с указанием нужных сертификатов.

tls_ca_path: /etc/ssl/certs
tls_cert_file: /etc/ssl/cyrus/server.crt
tls_key_file: /etc/ssl/cyrus/server.key
tls_ca_file: /etc/ssl/certs/localhost.pem

После того как настройка cyrus будет произведена можно запустить тестовую программу

/etc/init.d/cyrus restart
imtest -a pozpl -v -m login your.cyrus.domain.ru

Опять же, если не работает, смотрим лог файлы.

Управление почтовыми ящиками пользователей через LAM.

Не без моего скромного участия в LAM появился модуль для управления почтовыми ящиками IMAP. Для администратора это означает, что теперь можно проводить все операции с пользователями и их почтовыми ящиками из одного командного центра. Для того чтобы мы могли этим воспользоваться необходимо чтобы в LDAP находился пользователь прописанный в файле /etc/imap.conf как администратор. Пусть для примера это будет cyrus.

emacs /etc/imapd.conf
….
admins: cyrus

После этого нам необходимо создать в LDAP пользователя с электронным почтовым ящиком cyrus@your_domain.ru

version: 1

dn: uid=cyrus,ou=serv_accounts,ou=users,ou=your,dc=domain,dc=ru
cn: cyrus
gidnumber: 513
homedirectory: /home/cyrus
loginshell: /bin/bash
mail: cyrus@your_domain.ru
objectclass: shadowAccount
objectclass: posixAccount
objectclass: inetOrgPerson
shadowinactive: 10
shadowlastchange: 15385
shadowmax: 99999
shadowmin: 1
shadowwarning: 10
sn: cyrus
uid: cyrus
uidnumber: 10174
userpassword: {SSHA}DbKissJiehNZ2RTKWjj/swalowA+A5eZ

После этого, достаточно просто подключить модуль IMAP mailboxes к вашему профайлу в LAM и прописать нужные параметры.