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