Kerberos

Kerberos 身份驗證因強制更改密碼而失敗

  • March 9, 2019

我已將 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

一些筆記

  • 列出主體的屬性(通過getprincin kadmin.local)顯示 0 次失敗的登錄嘗試
  • 如果我創建沒有標誌的帳戶+needchange,我可以正確地進行身份驗證。
  • 如果我在使用者成功驗證一次後添加+needchange標誌(通過modprincin ),我會得到預期的行為;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

引用自:https://unix.stackexchange.com/questions/140066