我们的 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
,这可能会导致系统用户被视为不存在。root
postmaster
我个人的解决方案是剪掉那行并将其粘贴在底部, 像这样:
#!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 未安装、配置和运行有关。一旦我这样做,错误就消失了。