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

Postfix (MySQL): зашифрованные пароли не работают

Обновить: Я пытался вставить пароль в виде обычного текста в БД. Это работает, и теперь я тоже могу отправлять почту. Я снова попытался настроить все это (используя указанное руководство), но с тем же результатом. Любые идеи?

Исходный вопрос: Просто настройте связку Postfix / Courier, следуя этот учебник. Раньше я успешно использовал это руководство, но на этот раз у меня возникли проблемы с отправкой электронной почты. Моя основная проблема в том, что я действительно не знаю, где искать ключи к разгадке причины этой ошибки. Mail.log дает мне только следующие строки:

Apr 21 17:38:50 gordon postfix/smtpd[5059]: connect from xxx.xx-xxx-xx.my.isp.carrier[xx.xxx.xx.xxx]
Apr 21 17:38:51 gordon imapd: LOGIN, user=my@domain.com, ip=[::ffff:xx.xxx.xx.xxx], port=[57701], protocol=IMAP
Apr 21 17:38:51 gordon postfix/smtpd[5059]: warning: xxx.xx-xxx-xx.my.isp.carrier[xx.xxx.xx.xxx]: SASL LOGIN authentication failed: authentication failure

При поиске выясняется, что «сбой аутентификации» - это очень общее сообщение об ошибке, которое может быть вызвано рядом различных ошибок, из-за чего новичку, как я, тем труднее найти проблему.

Система

в учебник, ссылка на который приведена выше, автор использует алгоритм хеширования CRYPT. Этот факт можно посмотреть в SQL-запросе:

INSERT INTO `user` (`email`, `password`, `name`) VALUES ("admin@example.com", ENCRYPT("adminpassword"), "Administrator");

Saslauthd использует pam-mysql для аутентификации пользователя, поэтому нам нужно настроить pam-mysql для использования того же алгоритма хеширования. Файл конфигурации определен в /etc/pam.d/smtp

auth    required   pam_mysql.so user=mail passwd=mailpassword host=127.0.0.1 db=mail table=user usercolumn=email passwdcolumn=password crypt=1
account sufficient pam_mysql.so user=mail passwd=mailpassword host=127.0.0.1 db=mail table=user usercolumn=email passwdcolumn=password crypt=1

Важным параметром является crypt потому что он определяет метод шифрования пароля пользователя

  • 0 (или "простой") = без шифрования. Пароли хранятся в виде открытого текста. Сильно сбитый с толку.
  • 1 (или "Y") = использовать функцию crypt (3)
  • 2 (или "mysql") = Используйте функцию MySQL PASSWORD (). Возможно, что функция шифрования, используемая pam-mysql, отличается от функции шифрования сервера MySQL, поскольку pam-mysql использует функцию, определенную в API C-клиента MySQL, вместо использования функции SQL PASSWORD () в запросе.
  • 3 (или "md5") = использовать функцию MySQL MD5 ()

Итак, если вам нужно использовать зашифрованный пароль для аутентификации, установите crypt параметр, чтобы он соответствовал исходному запросу.


Еще один важный параметр - verbose. Вы можете установить его как 1, чтобы знать, что делает pam-mysql.

Дополнительная информация: Пакет PAM-MySQL README readme.php