PAM:auth:pam_unix(dovecot:auth):身份验证失败;

PAM:auth:pam_unix(dovecot:auth):身份验证失败;

我们的 ubuntu 服务器上设置了 opnldap,并且收到了用户以下消息:

 auth: pam_unix(dovecot:account): account has expired (account expired)
Sep  3 19:05:03  auth: pam_unix(dovecot:auth): authentication failure; logname= uid=0 euid=0 tty=dovecot ruser=XXXX rhost=::1  user=XXXX

我使用 ldappasswd 成功更改了密码,但错误仍然存​​在。经过一番研究,似乎 shadowLastChange 没有更新。

我们怎样才能解决这个问题?

/usr/share/slapd/slapd.conf

access to attrs=userPassword,shadowLastChange
        by dn="@ADMIN@" write
        by anonymous auth
        by self write
        by * none
access to dn.base="" by * read

# The admin dn has full write access, everyone else
# can read everything.
access to *
        by dn="@ADMIN@" write
        by * read

好的-这似乎是一个 PAM 问题。

如果我将 /etc/nsswitch.conf 编辑为:

shadow: compat

我没有收到帐户已过期的消息。

如果我将其改为:

shadow: files ldap

是的。但无论哪种情况,我仍然会收到 dovecot 错误。

答案1

不想重新提起一个已经过时的问题,但鉴于这是“dovecot pam authentication failed ldap”的搜索结果,让我补充一点额外的知识:

我在测试中看到的唯一更新shadowAccount属性的东西是passwd修改 LDAP 中用户密码时的命令...大多数其他工具不太关心shadowAccount类及其属性,也不会触及它们。然而,我发现只需shadowAccount要将类添加到用户中如果他们要登录主机, 因为关心。如果你只是做一些像电子邮件身份验证(Dovecot)的事情,那么它就没什么用。我可以这里是错误的,但是除了主机登录之外我还没有看到任何其他查询shadowAccount属性的内容。

现在,如果你正在使用 Dovecot 进行身份验证通过PAM(我猜你可能正在使用,因为 Dovecot 正在查询它,而你正在更改nsswitch),那么请记住,虽然 PAM 会注意这些额外的属性,但你仍然需要正确的工具来更改它们……这意味着更改用户密码的任何内容也需要通过 PAM。虽然这可能是一个不受欢迎的观点,但如果你不需要主机登录,只需要 Dovecot 或其他服务,就没有必要让 PAM 参与进来,因为它将检查更多可能无关紧要的东西。(它最多可以强制执行其他事情,比如密码过期,但就我个人而言,当你登录的服务有没有提供更改密码的功能就像那样)从长远来看,让非主机/shell 登录服务自己检查 LDAP 可能会更容易,从而允许其他事情,例如搜索过滤器特定于该服务。

然而假设你已经设置 Dovecot 来检查 LDAP 本身,而不是依赖于 PAM,在 Dovecot 的末尾10-auth.conf有一个!include针对不同身份验证机制的行列表,如 LDAP、SQL 等。默认情况下,该文件auth-system.conf.ext包含在其他机制,如 LDAP。这意味着,在我的测试中,Dovecot 检查这些按提供顺序,Dovecot 将首先尝试使用 PAM 验证用户身份,然后,如果失败,再使用 LDAP 验证身份。因此,您将收到一条 PAM 错误,指出是的authentication failure(以及第一个错误,表明什么如果您更改此顺序,以便首先查询最有可能成功的方法(假设为 LDAP),那么就无需使用 PAM 进行检查,因此 PAM 也不会抛出任何错误。

为了解决这个问题可以注释掉,但如果您没有在 LDAP 中设置系统用户(如或) !include auth-system.conf.ext,这可能会导致系统用户被视为不存在。rootpostmaster

我个人的解决方案是剪掉那行并将其粘贴在底部, 像这样:

#!include auth-deny.conf.ext
#!include auth-master.conf.ext

!include auth-ldap.conf.ext

#!include auth-sql.conf.ext
#!include auth-passwdfile.conf.ext
#!include auth-checkpassword.conf.ext
#!include auth-vpopmail.conf.ext
#!include auth-static.conf.ext

!include auth-system.conf.ext

这意味着 Dovecot 将第一的咨询 LDAP,然后据我的测试显示,如果 LDAP 没有给出结果,请咨询 PAM。

答案2

我以前从来没有真正回答过自己的问题,但我想分享一下,以防其他人遇到这个问题。这与 saslauthd 未安装、配置和运行有关。一旦我这样做,错误就消失了。

相关内容