使用 security/sssd 了解 FreeBSD 上的 PAM 身份驗證過程
我試圖了解我在 FreeBSD 10.0 上的 PAM 配置的異常行為
該機器配置了兩種不同的身份驗證領域,一種是預設的 Unix 身份驗證,另一種是使用系統安全服務守護程序 (sssd)。
目前我正在使用此配置,
/etc/pam.d/sshd
因為我只想允許 sssd 從 ssh 登錄。auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient /usr/local/lib/pam_sss.so #auth sufficient pam_krb5.so no_warn try_first_pass #auth sufficient pam_ssh.so no_warn try_first_pass auth required pam_unix.so no_warn use_first_pass # account account required pam_nologin.so #account required pam_krb5.so account required pam_login_access.so account required /usr/local/lib/pam_sss.so ignore_unknown_user account required pam_unix.so # session #session optional pam_ssh.so want_agent session optional /usr/local/lib/pam_sss.so session optional /usr/local/lib/pam_mkhomedir.so mode=0700 session required pam_permit.so # password password sufficient /usr/local/lib/pam_sss.so use_authtok #password sufficient pam_krb5.so no_warn try_first_pass password required pam_unix.so no_warn try_first_pass
如果我理解正確,當 sssd 使用者登錄機器時,它會上
auth sufficient /usr/local/lib/pam_sss.so
線,因為這樣sufficient
它會毫無問題地登錄。當本地使用者帳戶嘗試登錄時,它將在 sssd 檢查中失敗,但將成功pam_unix.so
使用第一次輸入的密碼,而無需再次詢問密碼。但這不是正在發生的事情。要以本地帳戶成功登錄,我必須
use_first_pass
從pam_unix.so
auth realm 中的選項中刪除,當使用者登錄時,系統首先要求提供 sssd 帳戶,但由於外部身份驗證服務中不存在本地使用者而失敗。然後系統再次要求輸入相同的密碼,但在pam_unix.so
模組上進行身份驗證。最後授予訪問權限。例如,它的行為方式如下:
ssh sssd-test.example.com -l local-user-account Password: Password for local-user-account@sssd-test.example.com: Last login: Sat May 24 16:22:40 2014 from 192.168.1.100 FreeBSD 10.0-RELEASE-p1 (GENERIC) #0: Tue Apr 8 06:45:06 UTC 2014 Welcome to FreeBSD! $
我不知道為什麼會發生這種情況,或者它是否與
account
會話有關。至於我對 PAM 的理解,配置應該是正確的。提前致謝,
好吧,我關於 PAM 工作原理的前提是正確的。
pam_sss.so
模組期望參數forward_pass
傳遞給其他 PAM 模組的密碼,作為模組pam_unix.so
。因此,只需使用此選項即可完成工作。結果行是:auth sufficient /usr/local/lib/pam_sss.so forward_pass
這以另一個問題告終。如果 sssd 甚至 sssd 的身份驗證域關閉,您將無法登錄,因為該
pam_sss.so
模組將無法正常工作,因此不會轉發密碼。所以顯而易見的選擇是放在
pam_unix.so
前面pam_sss.so
,讓一切都“足夠”,pam_deny.so
最後加上很好。這是解決問題的 Linux 方法,但這似乎不適用於 FreeBSD。在通過郵件列表Google搜尋後,在 FreeBSD 上執行此操作的正確方法是使用 PAM 中的奇怪順序:
auth sufficient pam_opie.so no_warn no_fake_prompts auth requisite pam_opieaccess.so no_warn allow_local auth sufficient pam_unix.so no_warn auth sufficient /usr/local/lib/pam_sss.so use_first_pass auth required pam_unix.so no_warn use_first_pass
所以
pam_unix.so
在 PAM 中放了兩次,第一次作為sufficient
,最後一次作為required
。我不知道為什麼會發生這種情況,但它正在工作並且似乎是正確的做法。