[Comm] Postfix + SMTP-AUTH + SASL + MySQL
Eugene Prokopiev
prokopiev на stc.donpac.ru
Вс Окт 30 19:01:21 MSK 2005
Здравствуйте!
Задача: настроить SMTP-авторизацию в Postfix, имена и пароли
пользователей уже хранятся в MySQL (открытым текстом):
mysql> select userid, passwd from dbmail_users;
+--------------------------------+----------+
| userid | passwd |
+--------------------------------+----------+
| john | jpwd |
+--------------------------------+----------+
Имею установленные:
# rpm -qa | grep postfix (взят из бэкпортов)
postfix-control-1.2-alt1
postfix-2.2.4-alt0.M24.1
postfix-html-2.2.4-alt0.M24.1
postfix-mysql-2.2.4-alt0.M24.1
postfix-tls-2.2.4-alt0.M24.1
# rpm -qa | grep sasl (сначала пытался взять из бекпортов, но там alt0,
т.е. версия младше - как это получилось?)
libsasl2-2.1.19-alt1
libsasl2-plugin-sql-2.1.19-alt1
cyrus-sasl2-2.1.19-alt1
cyrus-sasl2-docs-2.1.19-alt1
Читаю /usr/share/doc/postfix-2.2.4/README.ALT-ru_RU.KOI8-R: "Вся
конфигурация SASL находится в /etc/postfix/sasl"
Однако:
# ls -l /etc/postfix/sasl
ls: /etc/postfix/sasl: No such file or directory
Пытаюсь определить, где лежат конфиги, стандартым методом :)
# rpm -qli `rpm -qa | grep sasl` | grep /etc
/etc/sasl2
/etc/sasl2/sasldb2
/etc/rc.d/init.d/saslauthd
/etc/sasl2/saslauthd.conf
/etc/sasl2/saslpasswd.conf
/etc/sysconfig/saslauthd
Cмотрю, что там уже наконфигурено:
# cat /etc/sasl2/saslpasswd.conf
pwcheck_method: sasldb
# cat /etc/sasl2/saslauthd.conf | grep -v "^[#]"
ldap_servers: ldap://10.1.1.15/ ldap://10.1.1.25/
ldap_bind_dn: cn=operator,ou=Profile,o=foo.com
ldap_bind_pw: secret
ldap_version: 3
ldap_timeout: 5
ldap_time_limit: 5
Прихожу в некоторое замешательство от отсутствия упоминаний об sql и иду
в search.altlinux.ru, где упоминается совсем другой файл
/usr/lib/sasl2/smtpd.conf. О lib говорит и google в ответ на "postfix
sasl mysql". Предполагаю, что и в ALT когда-то следовали общим правилам,
а затем решили поместить этот файл в более приличное место.
Создаю этот файл и вписываю в него:
pwcheck_method: auxprop
auxprop_plugin: sql
mech_list: plain login
sql_engine: mysql
sql_hostnames: localhost
sql_user: dbmail
sql_passwd: dbmailpwd
sql_database: dbmail
sql_select: select passwd from dbmail_users where userid='%u'
После запуска сервиса saslauthd приходит мысль протестировать
когфигурацию с помощью testsaslauthd, который я успел заметить в rpm
-qli cyrus-sasl2:
testsaslauthd: usage: testsaslauthd -u username -p password
[-r realm] [-s servicename]
[-f socket path] [-R repeatnum]
Мана нет, что указывать в -r и -s непонятно, приходится оставить эту
затею и тестировать непосредственно Postfix.
В /usr/share/doc/postfix-2.2.4/README.ALT-ru_RU.KOI8-R сказано:
"Некоторые типы представлений (и поддержка SASL) требуют дополнительной
настройки (не отраженной в оригинальной документации) для работы в
chroot окружении. Простое решение этой проблемы - использовать для
таких представлений сервис proxy, который работает вне chroot.
Для SASL решение более нетривиальное и требует частного подхода, но, в
большистве случаев, может быть решено следующим образом - сокет демона
saslauthd должен находится в пределах chroot (например, в каталоге
/var/spool/postfix/var/run/saslauthd)"
Осталось придумать, как поместить сокет демона saslauthd в чрут
постфикса. Как сделать это правильно (и проверить, правильно ли сделал)
не знаю, поэтому делаю так:
# mkdir /var/spool/postfix/var/run
# ln -s /var/run/saslauthd/mux /var/spool/postfix/var/run/mux
Дальше в main.cf дописываю:
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks
permit_sasl_authenticated reject
Перезапускаю Postfix и тестирую то, что получилось:
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 myserver.myprovider.ru ESMTP Postfix
ehlo client
250-myserver.myprovider.ru
250-PIPELINING
250-SIZE 10240000
250-ETRN
250-AUTH SRP PLAIN OTP NTLM LOGIN DIGEST-MD5 CRAM-MD5
250 8BITMIME
Ага, теперь спрашиваю у google, чем кодировать логин/пароль при
использовании PLAIN или LOGIN. Последний отвечает, что нужен mimencode.
# apt-cache search mimencode
#
Никого ...
Ладно, воспользуемся Thunderbird. Отправляю письмо, указываю
логин/пароль, у меня спрашивают его еще раз. В логах:
SASL CRAM-MD5 authentication failed
SASL NTLM authentication failed
SASL PLAIN authentication failed
SASL LOGIN authentication failed
SASL CRAM-MD5 authentication failed
и т.д.
И постоянно повторяется:
postfix/smtpd[12043]: warning: SASL authentication problem: unable to
open Berkeley db /etc/sasl2/sasldb2: No such file or directory
Файл этот есть, но если Postfix пытается искать его у себя в чруте, то
он естественно его не найдет. Но откуда он вообще берет это? Догадка,
что сервис saslauthd не виноват, подтверждается, т.к. после его
опускания в лог валятся те же сообщения. Т.е. Postfix плевал на
saslauthd и пытается искать логин/пароль сам.
Все, я шокирован окончательно ...
Последняя идиотская попытка: если /etc/postfix/sasl упомянут, то может
нужно создать такой файл и вписать туда содержимое smtpd.conf? Или
создать такой каталог и в него этот файл положить? А демон saslauthd не
нужен?
Попробовал, не работает.
Что мне делать дальше?
Кстати, при старте saslauthd я вижу тоже не совсем то, что хотелось бы:
Oct 30 18:51:03 myserver saslauthd[16198]: detach_tty : master pid
is: 16198
Oct 30 18:51:03 myserver saslauthd[16198]: ipc_init : listening
on socket: /var/run/saslauthd/mux
Oct 30 18:53:31 myserver postfix/smtpd[16697]: sql_select option missing
Oct 30 18:53:31 myserver postfix/smtpd[16697]: auxpropfunc error no
mechanism available
Oct 30 18:53:31 myserver postfix/smtpd[16697]: _sasl_plugin_load failed
on sasl_auxprop_plug_init for plugin: sql
Что не так?
--
С уважением, Прокопьев Евгений
Подробная информация о списке рассылки community