我设置了 saslauthd 来针对 PAM 进行身份验证。它似乎可以完成以下工作:
root@sasltest:~# testsaslauthd -u quest -p #### -s smtp
0: OK "Success."
我有 libsasl 2.1.23,postfix 2.7.1。
我有一个配置如下的后缀:
smtpd_sasl_type = cyrus
smtpd_sasl_path = /var/spool/postfix/private/saslauthd/mux
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
使用 master.cf 如下:
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
但是,尝试在此后缀中进行身份验证会出现以下错误消息:
Jan 23 22:13:14 sasltest postfix/smtpd[1252]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Jan 23 22:13:14 sasltest postfix/smtpd[1252]: warning: SASL authentication problem: unable to open Berkeley db /etc/sasldb2: No such file or directory
Jan 23 22:13:14 sasltest postfix/smtpd[1252]: warning: X[A.B.C.D]: SASL LOGIN
身份验证失败:身份验证失败
同时,我的调试日志 saslauthd 没有输出。
我将其解释为 libsasl2 尝试使用 sasldb auth,而不是尝试与 saslauthd 对话。我不知道如何告诉 libsasl,我希望它与 saslauthd 对话。
各种说明都会告知您创建文件 /etc/sasl2/smtpd.conf 或 /etc/postfix/sasl/smtpd.conf。我尝试创建包含以下内容的文件:
pwcheck_method: saslauthd
mech_list: LOGIN PLAIN
但没有效果。
如何指示 libsasl 使用 saslauthd 身份验证?
(我当然可以创建 /var/spool/postfix/etc/sasldb2,但这仍然不会导致与 saslauthd 的连接。)
答案1
这cyrus-sasl 邮件列表帖子最终让我走上了正确的道路。
为了后代,尝试生成合理明确的配置。/etc/postfix/main.cf:
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
cyrus_sasl_config_path = /etc/postfix/sasl
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
上述配置中的技巧是 postfix+libsasl2 执行此操作:${cyrus_sasl_config_path}/${smtpd_sasl_path}.conf
一旦我们到达那里,我们就可以在 /etc/postfix/sasl/smtpd.conf 中告诉 libsasl 我们想要与 saslauthd 对话:
pwcheck_method: saslauthd
mech_list: LOGIN PLAIN
saslauthd_path: private/saslauthd/mux
由于 smtpd 是 chrooted,saslauthd_path 是相对于 /var/spool/postfix 的。我使用绑定挂载将 /var/run/saslauthd 置于私有状态。
答案2
在 Ubuntu 20.04 中遇到了类似的问题。在那里,cyrus_sasl_config_path
postfix 的参数根本无法识别。它正在查找/etc/postfix/sasl2/用于容纳smtpd 配置文件反而。
在 Ubuntu 20.04 中,smtpd 似乎默认处于 chroot 状态。但是,其 chroot 准备脚本/usr/lib/postfix/configure-instance.sh没有覆盖任何与 SASL 相关的文件,因此您必须手动将其放入 chroot。
在 chroot 中创建缺少的文件夹:
mkdir -p /var/spool/postfix/etc/postfix/sasl2
在那里创建 SASL2 配置文件:
cat >>/var/spool/postfix/etc/postfix/sasl2/smtpd.conf <<EOT pwcheck_method: saslauthd mech_list: LOGIN PLAIN EOT
从相关的全局文件夹链接它:
mkdir -p /etc/postfix/sasl2 ln -s /var/spool/postfix/etc/postfix/sasl2/smtpd.conf /etc/postfix/sasl2/smtpd.conf
确保文件夹中的 saslauthd 套接字可用/var/spool/postfix/var/运行/saslauthd/。您可以通过调整文件来控制/etc/default/saslauthd. 请参阅该文件中的注释。
答案3
我为此挣扎了大约一个小时,最后才通过strace -f -p pid
正在运行的 postfix 进程发现它无法找到我的sasldb2
文件,因为它将自己置于了chroot
.
编辑并在列中/etc/postfix/master.cf
输入。重新启动 postfix。现在应该可以工作了。n
chroot