SASL – Simple Authentication and Security Layer, это метод аутенификации пользователя для встраивания в сетевые протоколы основанные на соединении. Ниже описана конфигурация одной из реализаций механизма - cysrus-sasl версии 2.
В cysrus-sasl существует два основных способа аутенификации: auxprop - через библиотеку, слинкованную с приложением и saslauthd - по особому протоколу через сервер аутенификации saslauthd.
auxprop позволяет проводить аутенификацию в базе данных SQL (mysql, sqlite), файле BeklyDB или в LDAP. Список вариантов проверки saslauthd можно узнать командой
# saslauthd -v
saslauthd 2.1.26
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap httpform
Один экземпляр saslauthd может использовать только один механизм аутенификации.
Не стоит использовать auxprop совместно с БД, поскольку существующая реализация требует хранить пароли БД открытым текстом. Более гибким способом является связка saslauthd
+ pam
+ pam_mysql
.
Поддержка SASL включена, в частности, postfix
и в cyrus-imapd
. Опции SASL для cyrus-imapd прописываются в файл /etc/imapd.conf
, для postfix в CentOS 7 - в файле /etc/sasl2/smtpd.conf
(/usr/[local/]lib[64]/sasl2/smtpd.conf
в других дистрибутивах).
Файл конфигурации cyrus-imapd /etc/imapd.conf
#Для отладки взаимодействия с SQL сервером (печать sql-запросов)
sasl_log_level: 5
#Для логирования необходимо вставить в конфигурацию `rsyslogd` строку
#*.=debug /var/log/debug
#Механизм запроса пароля. В данном случае в виде открытого текста.
sasl_mech_list: PLAIN
#Механизм доступа к SASL
sasl_pwcheck_method: auxprop
#Плагин, используемый через auxprop
#Сами плагины лежат в /usr/[local/]lib[64]/sasl2/
sasl_auxprop_plugin: sql
#Опции для sql плагина
# mysql - тип сервера (еще есть sqlite)
sasl_sql_engine: mysql
# Доступ к базе
sasl_sql_user: mailadmin
sasl_sql_passwd: mailpassword
sasl_sql_hostnames: localhost
sasl_sql_database: mail
# Запрос должен извлечь пароль в виде текста для пользователя %u@%r (%r - realm)
# По умолчанию вместо %r подставляется имя хоста, на котором запущен cyrus-imapd
sasl_sql_statement: select password from accountuser where username = '%u' and domain_name = '%r'
Файл конфигурации postfix - /etc/postfix/main.cf
# Сервер, который будет делать проверку
smtpd_sasl_path = smtpd
smtpd_sasl_auth_enable = yes
Файл /etc/sysconfig/saslauthd
содержит опции для запуска saslauthd, в том числе, используемый механизм проверки.
MECH=pam
Файл настроек sasl для демона smtpd /etc/sasl2/smtpd.conf
pwcheck_method: saslauthd
mech_list: PLAIN
Файл настроек PAM для службы smtp /etc/pam.d/smtp
Приложения передают в saslauthd имя сервиса. postfix передаёт строку smtp.
#%PAM-1.0
auth required pam_mysql.so config_file=/etc/security/pam_mysql.conf [where=smtpauth=1]
account required pam_mysql.so config_file=/etc/security/pam_mysql.conf [where=smtpauth=1]