Postfix smtpd 无法与 saslauthd 通信

Postfix smtpd 无法与 saslauthd 通信

我设置了 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_pathpostfix 的参数根本无法识别。它正在查找/etc/postfix/sasl2/用于容纳smtpd 配置文件反而。

在 Ubuntu 20.04 中,smtpd 似乎默认处于 chroot 状态。但是,其 chroot 准备脚本/usr/lib/postfix/configure-instance.sh没有覆盖任何与 SASL 相关的文件,因此您必须手动将其放入 chroot。

  1. 在 chroot 中创建缺少的文件夹:

    mkdir -p /var/spool/postfix/etc/postfix/sasl2
    
  2. 在那里创建 SASL2 配置文件:

    cat >>/var/spool/postfix/etc/postfix/sasl2/smtpd.conf <<EOT
    pwcheck_method: saslauthd
    mech_list: LOGIN PLAIN
    EOT
    
  3. 从相关的全局文件夹链接它:

    mkdir -p /etc/postfix/sasl2
    ln -s /var/spool/postfix/etc/postfix/sasl2/smtpd.conf /etc/postfix/sasl2/smtpd.conf
    
  4. 确保文件夹中的 saslauthd 套接字可用/var/spool/postfix/var/运行/saslauthd/。您可以通过调整文件来控制/etc/default/saslauthd. 请参阅该文件中的注释。

答案3

我为此挣扎了大约一个小时,最后才通过strace -f -p pid正在运行的 postfix 进程发现它无法找到我的sasldb2文件,因为它将自己置于了chroot.

编辑并在列中/etc/postfix/master.cf输入。重新启动 postfix。现在应该可以工作了。nchroot

相关内容