Postfix опускает область (@domain) при проверке подлинности smtpd pam+mysql

Я пытаюсь настроить Postfix, чтобы пользователи могли отправлять электронную почту через SMTP с именем пользователя и паролем. И я пытаюсь сохранить учетные данные в базе данных MySQL. Я пошел по пути saslauthd а также pam и я застрял на полпути.

Включив функцию отладки pam, я вижу, что, когда я пытаюсь отправить электронное письмо с помощью Thunderbird, выполняется запрос для получения пароля:

pam_mysql - SELECT password FROM mailbox WHERE username = 'mehran'

Это в том случае, если имя пользователя содержит значение mehran@example.com, Но когда я пытаюсь:

# testsaslauthd -u mehran@example.com -p 123 -s smtp
0: OK "Success."

И журнал гласит:

pam_mysql - SELECT password FROM mailbox WHERE username = 'mehran@example.com'

Показывая, что это Postfix, кто пропускает @domain из имени пользователя, прежде чем передать его saslauthd (или, по крайней мере, я так считаю). Я искал конфигурацию Postfix, но не вижу, что на это влияет!?

2 ответа

Я нашел проблему, так что вот в случае, если это поможет кому-либо:

Там есть файл конфигурации для saslauthdшахта находится в /etc/sysconfig/saslauthd:

# Directory in which to place saslauthd's listening socket, pid file, and so
# on.  This directory must already exist.
SOCKETDIR=/var/run/saslauthd

# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list
# of which mechanism your installation was compiled with the ablity to use.
MECH=pam

# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.
# DAEMONOPTS=--user saslauth
# OPTIONS="-c -r -m /var/spool/postfix/var/run/saslauthd"
OPTIONS="-c -m /var/run/saslauthd"

# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)
# for the list of accepted flags.
FLAGS=

OPTIONS переменная должна содержать параметры, переданные saslauthd, Это отсутствует -r который делает то, что я искал. Согласно его документации:

-r Объединить царство с логином (между ними должен быть знак "@"). например, login: "foo" realm: "bar" будет передано как login: "foo @ bar". Обратите внимание, что область все равно будет пройдена, что может привести к неожиданному поведению.

Но моя проблема не была решена только этим изменением! Оказалось, что из-за какой-то ошибки в /etc/init.d/saslauthd Скрипт, хотя упомянутый выше файл конфигурации загружен, но не применяется! $OPTIONS никогда не использовался!!!

Вот оригинальный начальный раздел /etc/init.d/saslauthd сценарий:

start() {
    [ -x $path ] || exit 5
        echo -n $"Starting $prog: "
        daemon $DAEMONOPTS $path -m $SOCKETDIR -a $MECH $FLAGS
        RETVAL=$?
        echo
    [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}

И вот как я исправил это:

start() {
    [ -x $path ] || exit 5
        echo -n $"Starting $prog: "
        daemon $DAEMONOPTS $path $OPTIONS -a $MECH $FLAGS
        RETVAL=$?
        echo
    [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}

Все сделано! Теперь запрос содержит полный адрес электронной почты для проверки пароля.

Ваш запрос содержит неверный / неполный параметр для запроса.

Этот запрос добавит домен к локальной части логина:

SELECT password FROM mailbox WHERE username = '%u@%r'

Исправьте запрос в вашей конфигурации SASL для постфикса, например /etc/postfix/sasl/smtpd.conf

Другие вопросы по тегам