Назад | Перейти на главную страницу

Ошибка аутентификации SMTP + PAM-MySQL не может аутентифицироваться

Я создаю почтовый сервер с помощью Postfix и настраиваю аутентификацию для проверки настройки базы данных с помощью Postfixadmin.

Я могу пройти аутентификацию через Courier IMAP, так как он может правильно аутентифицироваться по хешированному паролю, но я подозреваю, что мой механизм аутентификации SASL + PAM-MySQL SMTP не может.

Я получаю эти ошибки в /var/log/mail.log:

pam_unix(smtp:auth): check pass; user unknown
Aug 22 03:23:08 omitted saslauthd[26402]: pam_unix(smtp:auth): authentication failure; logname= uid=0 euid=0 tty= ruser= rhost= 
Aug 22 03:23:10 omitted saslauthd[26402]: DEBUG: auth_pam: pam_authenticate failed: Authentication failure
Aug 22 03:23:10 omitted saslauthd[26402]: do_auth         : auth failure: [user=user@domain.com] [service=smtp] [realm=domain.com] [mech=pam] [reason=PAM auth error]

Вот содержание /etc/pam.d/smtp:

auth required pam_mysql.so user=postfixadmin passwd=omitted host=127.0.0.1 db=postfixadmin table=mailbox usercolumn=username passwdcolumn=password crypt=2
account sufficient pam_mysql.so user=postfixadmin passwd=omitted host=127.0.0.1 db=postfixadmin table=mailbox usercolumn=username passwdcolumn=password crypt=2

Вот соответствующий фрагмент для шифрования пароля от /etc/postfixadmin/config.inc.php:

// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
// md5 = md5 sum of the password
// system = whatever you have set as your PHP system default
// cleartext = clear text passwords (ouch!)
// mysql_encrypt = useful for PAM integration
// authlib = support for courier-authlib style passwords
// dovecot:CRYPT-METHOD = use dovecotpw -s 'CRYPT-METHOD'. Example: dovecot:CRAM-MD5
$CONF['encrypt'] = 'mysql_encrypt';

А вот содержание моего /etc/postfix/sasl/smtp.conf:

pwcheck_method: saslauthd
mech_list: plain login
log_level: 7
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: postfixadmin
sql_passwd: omitted
sql_database: postfixadmin
sql_select: select password from mailbox where username='%u@%r'

Я попытался использовать хеш MD5, но Courier не смог. Так вот из окна ...

У меня точно такая же конфигурация, как у вас (Postfix + Cyrus SASL с использованием saslauthd + PAM), и я также потратил часы на ее настройку. Но знайте, что это работает отлично.

В моем случае у меня те же настройки, что и у вас в /etc/pam.d/smtp но не в /etc/postfix/sasl/smtp.conf.

Похоже, вы смешиваете использование плагина SQL Cyrus (auxprop_plugin: sql) с помощью saslauthd и PAM mysql.

Документация Postfix говорит, что если вы хотите хранить зашифрованные пароли (что, похоже, так, поскольку вы установили crypt = 2 в конфигурации PAM), то вы НЕ МОЖЕТЕ использовать плагин Cyrus SASL sql.

Вы можете попробовать только PAM. Для этого вам нужно только следовать в /etc/postfix/sasl/smtp.conf

pwcheck_method: saslauthd
mech_list: login plain
log_level: 4

Вам не нужна конфигурация базы данных / пароля в этом файле, так как PAM уже все знает!

Также проверьте /etc/default/saslautd, У меня есть:

START=yes
DESC="SASL Authentication Daemon"
NAME="saslauthd"
MECHANISMS="pam"
MECH_OPTIONS=""
THREADS=1
OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"

Проверьте, что вы выбрали пам в МЕХАНИЗМЫ переменной и проверьте флаги в ПАРАМЕТРЫ переменная. Обычно у вас должно быть более 1 в ПОТОКИ переменная. Вы можете позволить этому вот так. Вам не нужно устанавливать «1», как у меня.

РЕДАКТИРОВАТЬ: вроде ответил на очень старый вопрос! Это не имеет значения, на него будет ссылаться Google и он может быть полезен всем, кто настраивает SASL с PAM.