Authentication

使用 security/sssd 了解 FreeBSD 上的 PAM 身份驗證過程

  • May 25, 2014

我試圖了解我在 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_passpam_unix.soauth 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。我不知道為什麼會發生這種情況,但它正在工作並且似乎是正確的做法。

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