我已将 PAM 身份验证配置为使用 Kerberos,并且可以使用我的委托人的 Kerberos 凭据正确进行身份验证。
当我尝试使用过期密码创建主体时遇到了麻烦:
kadmin: addprinc +needchange test_principal
Run Code Online (Sandbox Code Playgroud)
当我尝试登录时(从 VT 或图形迎宾器),在正确输入密码后,我收到了密码已过期的预期消息,系统提示我创建一个新密码。完成此操作后,身份验证失败并出现以下错误kdc.log:
krb5kdc[...](info): TGS_REQ (4 etypes {18 17 16 23}) 192.168.0.200: NO PREAUTH: authtime 0, test_principal@MY.REALM for host/server.my.realm@MY.REALM, Generic error (see e-text)
Run Code Online (Sandbox Code Playgroud)
以及以下(并不奇怪)错误/var/log/auth.log:
pam_krb5(gdm3:auth): (user test_principal) credential verfication failed: KDC returned error string: NO PREAUTH
Run Code Online (Sandbox Code Playgroud)
一些笔记
getprincin kadmin.local)显示 0 次失败的登录尝试+needchange标志的帐户,我就可以正确进行身份验证。+needchange标志(通过modprincin kadmin.local),我会得到预期的行为;即提示用户更改密码,然后验证成功。/etc/passwd但由 LDAP 条目备份。正如其他地方所建议的,我尝试像这样创建我的主体:
kadmin: addprinc -requires_preauth +needchange test_principal
Run Code Online (Sandbox Code Playgroud)
这没有任何区别。
我的用例
我正在从旧的 NIS 系统迁移,我想为我的用户提供连续性。我想让他们输入旧密码,但随后被迫更改它们以符合我打算通过 Kerberos 强制执行的更严格的密码策略规则。
我在 Debian Wheezy 上运行 MIT Kerberos V。
我找到了答案,这是一个非常奇怪的答案!
我使用getprinc其中的命令来获取问题主体和在没有创建且正确验证的kadmin主体的属性。+needchange
不同之处在于,正确身份验证的主体具有REQUIRES_PRE_AUTH属性集,而问题主体没有该属性,因此解决方案是通过以下方式创建主体:
kadmin: addprinc +needchange +requires_preauth test_principal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |