Вопрос или проблема
Я бьюсь головой об стену уже 4 часа, и не могу решить эту проблему! Google выдает множество вопросов, связанных с ошибкой аутентификации SASL: Не удалось проверить пароль, но ничего не помогло.
В основном, IMAP работает нормально, я могу войти. Но SMTP с SASL+pam стал настоящей головной болью!
mail.log говорит:
Ошибка аутентификации SASL: Не удалось проверить пароль
auth.log:
pam_unix(smtp:auth): проверьте пароль; пользователь неизвестен
4 янв 13:43:30 favoritewords saslauthd[2193]: pam_unix(smtp:auth): ошибка аутентификации; logname= uid=0 euid=0 tty= ruser= rhost=
4 янв 13:43:32 favoritewords saslauthd[2193]: DEBUG: auth_pam: pam_authenticate не удалась: Ошибка аутентификации
4 янв 13:43:32 favoritewords saslauthd[2193]: do_auth : ошибка аутентификации: [[email protected]] [service=smtp] [realm=domain.com] [mech=pam] [reason=Ошибка PAM аутентификации]
В журнале mysql я вижу:
59 Запрос select crypt from users where id='[email protected]' and enabled = 1
59 Запрос COMMIT
59 Завершить
60 Подключение mail@localhost к mail_db
60 Завершить
/etc/pam.d/smtp выглядит так:
auth required pam_mysql.so user=mail passwd=asdasdasd== host=127.0.0.1 db=mail_db table=users usercolumn=id passwdcolumn=crypt crypt=1 verbose=1
account sufficient pam_mysql.so user=mail passwd=asdasdasd== host=127.0.0.1 db=mail_db table=users usercolumn=id passwdcolumn=crypt crypt=1 verbose=1
и /etc/postfix/sasl/smtpd.conf:
pwcheck_method: saslauthd
mech_list: plain login cram-md5 digest-md5
log_level: 7
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail
sql_passwd: asdasdasd==
sql_database: mail_db
sql_select: select crypt from users where id='%u@%r' and enabled = 1
ЗАМЕТКА: Я думаю, что /etc/postfix/sasl/smtpd.conf используется вместо /etc/pam.d/smtp, и это проблема.
Быстрый ответ. Перезапустите службу pam.
Похоже, что в PAM много утечек памяти, и особенно с SASLauthd он часто сбрасывается.
Я пытаюсь найти способ ограничить количество разрешенных запросов, так как сейчас их становится около 50 в секунду и это часто вызывает сбои.
Ответ или решение
Ошибка аутентификации SASL: Неудача при проверке пароля
Ваша проблема с ошибкой аутентификации SASL при использовании PAM для SMTP отправки сообщений является довольно распространенной, но её решение требует внимательного анализа конфигураций. Ниже мы рассмотрим возможные причины возникновения ошибки "SASL authentication failure: Password verification failed" и предложим шаги для устранения проблемы.
Ознакомление с ошибкой
В логах вы наблюдаете следующие сообщения:
SASL authentication failure: Password verification failed
Это свидетельствует о том, что при попытке аутентификации произошла ошибка. В частности, из логов auth.log
видно, что:
pam_unix(smtp:auth): check pass; user unknown
Это указывает на то, что система PAM не может найти пользователя в базе данных, что чаще всего означает, что указанный логин неправильный или пользователь отсутствует.
Анализ конфигурации
-
Проверка конфигурации PAM:
В вашем файле/etc/pam.d/smtp
указаны следующие строки:auth required pam_mysql.so user=mail passwd=asdasdasd== host=127.0.0.1 db=mail_db table=users usercolumn=id passwdcolumn=crypt crypt=1 verbose=1 account sufficient pam_mysql.so user=mail passwd=asdasdasd== host=127.0.0.1 db=mail_db table=users usercolumn=id passwdcolumn=crypt crypt=1 verbose=1
Здесь важно убедиться, что указанные логин и пароль к MySQL являются корректными, а также что таблица
users
и соответствующие колонки правильно настроены. -
Проблема с именами пользователей:
Ваша команда для выборки из базы данных:select crypt from users where id='%u@%r' and enabled = 1
может требовать, чтобы логин имел формат
user@domain.com
. Убедитесь, что вы действительно используете правильное имя пользователя при попытке аутентификации. -
Конфликт между PAM и SASL:
Ваша конфигурация в/etc/postfix/sasl/smtpd.conf
может конфликтовать с настройками PAM. Несмотря на то, что вы указалиpwcheck_method: saslauthd
, стоит проверить, что все параметры соответствуют друг другу и не приводят к конфликту. -
Перезапуск служб:
Как вы упомянули, перезапуск службы PAM может помочь. Проверьте статусsaslauthd
и убедитесь, что служба работает корректно. Для этого используйте команды:systemctl restart saslauthd systemctl status saslauthd
Рекомендации по устранению неисправностей
-
Логи и отладка:
Увеличьте уровень журналирования в конфигурациях, чтобы лучше понять, в чем заключается проблема. Ваша настройка:log_level: 7
должна уже обеспечивать подробные логи, но стоит проверять их на наличие дополнительных подсказок.
-
Проверьте таблицы базы данных:
Убедитесь, что нужный пользователь существует в таблицеusers
и что полеenabled
имеет значение 1. Вы можете выполнить запросы напрямую в MySQL для проверки данных. -
Проблемы с памятью:
Если вы сталкиваетесь с утечками памяти или частыми сбоями, возможно, стоит установить лимиты на количество запросов. Вы можете использовать настройки сервера для ограничений, либо настроить правилом обработки на стороне приложения. -
Тестирование альтернативного метода:
Попробуйте временно переключиться на другой метод аутентификации, например,pwcheck_method: auxprop
. Это поможет узнать, если проблема именно в PAM, или в другой части конфигурации.
Заключение
Ошибки аутентификации SASL могут иметь множество причин. Тщательный анализ конфигурации, проверка логов и пользователя помогут выявить и устранить проблему. Если описанные выше шаги не приводят к успеху, рекомендуется обратиться к системным администраторам со специализированным опытом в данной области для дальнейшей диагностики.