Kerberos
Kerberos 身份驗證因強制更改密碼而失敗
我已將 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, test_principal@MY.REALM for host/server.my.realm@MY.REALM, 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。
我找到了答案,這是一個非常奇怪的答案!
我使用
getprinc
裡面的命令kadmin
來獲取問題主體和沒有創建+needchange
且正確驗證的主體的屬性。不同之處在於正確身份驗證的主體
REQUIRES_PRE_AUTH
設置了屬性,而問題主體沒有設置,因此解決方案是以這種方式創建主體:kadmin: addprinc +needchange +requires_preauth test_principal