我有一个 saslauthd 设置来针对 PAM 进行身份验证。它似乎在做它的事情:
root@sasltest:~# testsaslauthd -u quest -p #### -s smtp
0: OK "Success."
我有 libsasl 2.1.23,后缀 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 的连接。)
这篇cyrus-sasl 邮件列表帖子最终让我走上了正确的道路。
为了后代,尝试产生合理明确的配置。/etc/后缀/main.cf:
上面 conf 中的技巧是 postfix+libsasl2 这样做:${cyrus_sasl_config_path}/${smtpd_sasl_path}.conf
一旦我们走到这一步,在 /etc/postfix/sasl/smtpd.conf 中,我们可以告诉 libsasl 我们想与 saslauthd 交谈:
因为 smtpd 是 chroot 的,所以 saslauthd_path 是相对于 /var/spool/postfix 的。我使用绑定挂载将 /var/run/saslauthd 设为私有。
在 Ubuntu 20.04 中遇到类似问题。在那里,
cyrus_sasl_config_path
postfix 的参数根本无法识别。它正在查找/etc/postfix/sasl2/以包含smtpd.conf。在 Ubuntu 20.04 中,smtpd 似乎默认为 chroot。但是,它在/usr/lib/postfix/configure-instance.sh中的 chroot 准备脚本不包含任何与 SASL 相关的文件,因此您必须手动将其放入 chroot。
在 chroot 中创建丢失的文件夹:
在那里创建 SASL2 配置文件:
从相关的全局文件夹链接它:
确保 saslauthd 套接字在文件夹/var/spool/postfix/var/run/saslauthd/中可用。您可以通过调整文件/etc/default/saslauthd来控制它。请参阅在该文件中找到的注释。
我为此苦苦挣扎了大约一个小时,然后通过运行的后缀进程弄清楚
strace -f -p pid
它找不到我的sasldb2
文件,因为它把自己放在一个chroot
.编辑
/etc/postfix/master.cf
并放入n
列中chroot
。重启后缀。现在应该工作了。