Postfix 在检查 smtpd pam+mysql 身份验证时省略了领域(@domain)

Postfix 在检查 smtpd pam+mysql 身份验证时省略了领域(@domain)

saslauthd我一直在尝试配置 Postfix,以便用户可以使用用户名和密码通过 SMTP 发送电子邮件。我还尝试将凭证存储在 MySQL 数据库中。我采取了和的路径,pam但我被困在了半途。

启用 pam 调试功能后,我可以看到,当我尝试使用 Thunderbird 发送电子邮件时,执行的检索密码的查询是:

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

这是因为 username 的值为[email protected]。但是当我尝试时:

# testsaslauthd -u [email protected] -p 123 -s smtp
0: OK "Success."

日志内容如下:

pam_mysql - SELECT password FROM mailbox WHERE username = '[email protected]'

这表明 Postfix 在将用户名传递给其他人之前省略了 @domain saslauthd(或者至少我认为是这样)。我搜索了 Postfix 的配置,但不知道这有什么影响!?

答案1

我发现了这个问题,因此将其放在这儿以便对任何人有所帮助:

有一个配置文件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 将领域与登录名结合起来(中间用“@”符号)。例如,登录名:“foo”领域:“bar”将作为登录名:“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
}

全部完成!现在查询包含完整的电子邮件地址以检查密码。

答案2

您的查询包含错误/不完整的查询参数。

此查询将把域附加到登录的本地部分:

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

更正后缀的 SASL 配置中的查询,例如/etc/postfix/sasl/smtpd.conf

相关内容