Ошибка аутентификации SASL: Ошибка проверки пароля SASL+PAM

Вопрос или проблема

Я бьюсь головой об стену уже 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 не может найти пользователя в базе данных, что чаще всего означает, что указанный логин неправильный или пользователь отсутствует.

Анализ конфигурации

  1. Проверка конфигурации 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 и соответствующие колонки правильно настроены.

  2. Проблема с именами пользователей:
    Ваша команда для выборки из базы данных:

    select crypt from users where id='%u@%r' and enabled = 1

    может требовать, чтобы логин имел формат user@domain.com. Убедитесь, что вы действительно используете правильное имя пользователя при попытке аутентификации.

  3. Конфликт между PAM и SASL:
    Ваша конфигурация в /etc/postfix/sasl/smtpd.conf может конфликтовать с настройками PAM. Несмотря на то, что вы указали pwcheck_method: saslauthd, стоит проверить, что все параметры соответствуют друг другу и не приводят к конфликту.

  4. Перезапуск служб:
    Как вы упомянули, перезапуск службы PAM может помочь. Проверьте статус saslauthd и убедитесь, что служба работает корректно. Для этого используйте команды:

    systemctl restart saslauthd
    systemctl status saslauthd

Рекомендации по устранению неисправностей

  1. Логи и отладка:
    Увеличьте уровень журналирования в конфигурациях, чтобы лучше понять, в чем заключается проблема. Ваша настройка:

    log_level: 7

    должна уже обеспечивать подробные логи, но стоит проверять их на наличие дополнительных подсказок.

  2. Проверьте таблицы базы данных:
    Убедитесь, что нужный пользователь существует в таблице users и что поле enabled имеет значение 1. Вы можете выполнить запросы напрямую в MySQL для проверки данных.

  3. Проблемы с памятью:
    Если вы сталкиваетесь с утечками памяти или частыми сбоями, возможно, стоит установить лимиты на количество запросов. Вы можете использовать настройки сервера для ограничений, либо настроить правилом обработки на стороне приложения.

  4. Тестирование альтернативного метода:
    Попробуйте временно переключиться на другой метод аутентификации, например, pwcheck_method: auxprop. Это поможет узнать, если проблема именно в PAM, или в другой части конфигурации.

Заключение

Ошибки аутентификации SASL могут иметь множество причин. Тщательный анализ конфигурации, проверка логов и пользователя помогут выявить и устранить проблему. Если описанные выше шаги не приводят к успеху, рекомендуется обратиться к системным администраторам со специализированным опытом в данной области для дальнейшей диагностики.

Оцените материал
Добавить комментарий

Капча загружается...