PAM 认为 Kerberos 密码已过期

PAM 认为 Kerberos 密码已过期

多年来,我一直在一个小型网络中运行 Kerberos / LDAP 身份验证。Kerberos 保存在 LDAP 中,然后复制到另一个站点。第二个站点的计算机向副本进行身份验证,旧站点向原始服务器进行身份验证。最近,我添加了几个新用户帐户。

在原有的网站上,一切都运行顺利。新用户可以毫无问题地登录系统。

在第二个站点上使用副本kinit user也可以正常工作。但是,login user声称密码已过期,必须立即更改。更改密码后,用户可以正常登录。

检查副本 KDC 上的设置kadmin.local一切正常:

kadmin.local:  getprinc user
Principal: [email protected]
Expiration date: [never]
Last password change: Di Nov 22 21:06:35 CET 2022
Password expiration date: [never]
Maximum ticket life: 0 days 10:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Di Nov 22 21:06:35 CET 2022 ([email protected])
Last successful authentication: Di Nov 22 21:19:27 CET 2022
Last failed authentication: So Nov 13 09:05:17 CET 2022
Failed password attempts: 0
Number of keys: 8
[ ... ]
Attributes: REQUIRES_PRE_AUTH
Policy: [none]

因此,密码和主体都不会过期。因此kinit工作如预期:

root@client:~# kinit user
Password for [email protected]: 
root@client:~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: [email protected]

Valid starting       Expires              Service principal
22.11.2022 21:25:17  23.11.2022 07:25:17  krbtgt/[email protected]
        renew until 23.11.2022 21:25:11

然而,login声称密码已过期,必须更改:

root@ganesha:~# login user
Password: 
Sie müssen Ihr Passwort sofort ändern (Passwortablauf).
Current Kerberos password: 
Enter new Kerberos password: 
Retype new Kerberos password: 
Linux client 5.10.0-19-amd64 #1 SMP Debian 5.10.149-2 (2022-10-21) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Letzte Anmeldung: Dienstag, den 22. November 2022, 20:59:02 CET auf pts/5
user@client:~$

在此登录之后,主体的Last password changeLast modified已更新。Last successful authentication不会改变。成功后kinit也不会改变。但成功loginkinit原始客户端上确实会改变。这可能是另一个问题,但它同样发生在旧用户身上,这两个站点都可以完美运行。使用时getprinc我无法发现新旧用户之间的任何差异。

以下loginPAM 设置应该有效,authaccountDebian 安装的默认设置:

auth    optional   pam_faildelay.so  delay=3000000
auth    requisite  pam_nologin.so
auth    [success=2 default=ignore]      pam_krb5.so minimum_uid=1000
auth    [success=1 default=ignore]      pam_unix.so nullok try_first_pass
auth    requisite                       pam_deny.so
auth    required                        pam_permit.so
auth    optional   pam_group.so

account [success=1 new_authtok_reqd=done default=ignore]        pam_unix.so 
account requisite                       pam_deny.so
account required                        pam_permit.so
account required                        pam_krb5.so minimum_uid=1000

我设置了一个新的 Bullseye 客户端,它通过 VPN 使用原始的 Kerberos 和 LDAP。它显示了相同的行为。我做了一些 PAM 调试:

Jan 23 21:32:44 psyche login[2861]: pam_krb5(login:auth): user user authenticated as [email protected]
Jan 23 21:32:44 psyche login[2861]: pam_unix(login:account): expired password for user user (password aged)
Jan 23 21:32:53 psyche login[2861]: pam_krb5(login:chauthtok): user user changed Kerberos password
Jan 23 21:32:53 psyche login[2861]: pam_unix(login:session): session opened for user user(uid=10##) by admin(uid=0)

在所有系统上都能正常工作的旧用户没有条目(login:account),因此当然不需要更改密码。所以,这似乎与复制无关。更奇怪的是,有些系统login对这些用户来说工作正常。我检查了一下,/etc/pam.d/common-account两个系统上的情况都一样。

我很感激任何关于检查什么的想法。

感谢您的帮助。

答案1

实际原因与 Kerberos 无关。失败的帐户已shadowMax在 LDAP 中设置。虽然我一开始并不知道这个设置,但即使shadowLastChangeplusshadowMax仍落后于当前日期,凭据也会被报告为已过期。设置shadowMax为 -1 或完全删除该值可以解决问题。

这并不能完全解释为什么另一个站点的设置似乎完全忽略了该值,但这是另一个故事。

相关内容