Linux

如何通過 pam_krb5 中的 kerberos 拒絕訪問禁用的 AD 帳戶?

  • March 15, 2017

我有一個有效的 AD/Linux/LDAP/KRB5 目錄和身份驗證設置,但有一個小問題。當一個帳戶被禁用時,SSH 公鑰認證仍然允許使用者登錄。

很明顯,kerberos 客戶端可以辨識禁用的帳戶,因為 kinit 和 kpasswd 返回“客戶端憑據已被撤銷”而沒有進一步的密碼/互動。

是否可以配置 PAM(在 sshd_config 中使用“UsePAM yes”)以禁止禁用帳戶的登錄,其中身份驗證由公鑰完成?這似乎不起作用:

account     [default=bad success=ok user_unknown=ignore] pam_krb5.so

請不要在您的答案中引入 winbind - 我們不使用它。

做了更多的功課,正在回答我自己的問題。

在 RedHat 的 pam_krb5 ( pam_krb5-2.3.14-1/src/acct.c) 中,除非模組參與了身份驗證階段,否則 pam_sm_acct_mgmt() 函式會根據模組配置返回 PAM_IGNORE 或 PAM_USER_UNKNOWN。因此,它需要更改 pam_krb5 程式碼才能執行我想要的操作。

JohnGH 的回答是一個很好的解決方法;使用“代理”屬性來傳達相同的含義,例如破壞外殼或添加到“禁用使用者”組。

另一種解決方法(部分測試)是在過去設置帳戶到期日期,並使用諸如 pam_unix 之類的模組使帳戶檢查失敗。這使用 LDAP,而不是 KRB5,但查詢同一個集中管理的使用者目錄。

我在其他地方讀到過其他人要求“修復” SSH,以便無法通過 SSH 登錄鎖定的帳戶。(參見 Debian 錯誤 219377)這個請求作為一個更新檔被拒絕了“因為它打破了使用者的一些期望

$$ who were $$過去使用 passwd -l 只鎖定密碼。”(參見 Debian 錯誤 389183)例如,有些人希望能夠鎖定帳戶以防止密碼登錄,但仍允許 SSH 密鑰訪問。 PAM 不會拒絕對剛剛被鎖定的帳戶進行 SSH 密鑰身份驗證(例如,由於密碼嘗試無效,因為 SSH 密鑰身份驗證旨在不注意密碼欄位,而密碼欄位通常是鎖定帳戶的地方。)

我知道密碼雜湊條目是在 pam_authenicate() 時間隱式檢查的,而不是在 pam_acct_mgmt() 時間。pam_unix.so pam_sm_acct_mgmt() 根本不檢查密碼雜湊,並且在公鑰認證期間不呼叫 pam_authenticate()。

如果您的意圖是能夠集中禁用帳戶登錄,還有其他可能的解決方法,包括:

更改登錄外殼。

(重新)移動他們的 authorized_keys 文件。

拒絕訪問的另一個選項可能是在 sshd_config 中使用 DenyGroups 或 AllowGroups。(然後將使用者添加到“sshdeny”組,或將其從“sshlogin”組中刪除以禁用他們登錄。)(閱讀此處:https ://help.ubuntu.com/8.04/serverguide/user-management .html )

http://web.archiveorange.com/archive/v/67CtqEoe5MhDqkDmUMuL 我讀到:“問題是 pam_unix 只檢查影子條目的到期日期,而不是密碼雜湊欄位的內容。” 如果這是真的,那麼使帳戶到期而不是鎖定它會滿足您的需要嗎?

您的問題的答案可能是“是的,如果您在密碼欄位以外的地方禁用它們”

引用自:https://serverfault.com/questions/393989