![Kerberos 身份验证因强制更改密码而失败](https://linux22.com/image/39051/Kerberos%20%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81%E5%9B%A0%E5%BC%BA%E5%88%B6%E6%9B%B4%E6%94%B9%E5%AF%86%E7%A0%81%E8%80%8C%E5%A4%B1%E8%B4%A5.png)
我已将 PAM 身份验证配置为使用 Kerberos,并且可以使用我的主体的 Kerberos 凭据正确进行身份验证。
当我尝试使用过期密码创建主体时遇到了麻烦:
kadmin: addprinc +needchange test_principal
当我尝试登录(从 VT 或图形问候语)时,在正确输入密码后,我收到了预期的消息:密码已过期,系统提示我创建一个新密码。完成此操作后,身份验证失败,并出现以下错误kdc.log
:
krb5kdc[...](info): TGS_REQ (4 etypes {18 17 16 23}) 192.168.0.200: NO PREAUTH: authtime 0, [email protected] for host/[email protected], Generic error (see e-text)
以及以下(并不奇怪)错误/var/log/auth.log
:
pam_krb5(gdm3:auth): (user test_principal) credential verfication failed: KDC returned error string: NO PREAUTH
一些笔记
- 列出主体的属性(通过
getprinc
inkadmin.local
)显示 0 次失败的登录尝试 - 如果我创建没有标志的帐户
+needchange
,我就能正确地进行身份验证。 - 如果我在用户成功验证一次后添加
+needchange
标志(通过modprinc
in ),我会得到预期的行为;kadmin.local
即提示用户更改密码,然后认证成功。 - 该主体没有等效条目,
/etc/passwd
但由 LDAP 条目支持。 正如其他地方所建议的,我尝试像这样创建我的主体:
kadmin: addprinc -requires_preauth +needchange test_principal
这没有什么区别。
我的用例
我正在从旧的 NIS 系统迁移,并且希望为我的用户提供连续性。我想让他们输入旧密码,但随后被迫更改它们以符合我打算通过 Kerberos 强制执行的更严格的密码策略规则。
我在 Debian Wheezy 上运行 MIT Kerberos V。
答案1
我找到了答案,这是一个非常奇怪的答案!
我使用getprinc
其中的命令来获取问题主体和在没有该主体的情况下创建且正确验证的kadmin
主体的属性。+needchange
不同之处在于,正确身份验证的主体具有REQUIRES_PRE_AUTH
属性集,而问题主体没有该属性,因此解决方案是通过以下方式创建主体:
kadmin: addprinc +needchange +requires_preauth test_principal