用 success=3
澄清 pam 規則
pam_ssh_agent_auth.so
在通過 ssh pubkey 進行身份驗證時,我正在嘗試配置為使用 sudo 為某些使用者提供無密碼體驗。我開始查看gentoo wiki,它建議使用
... auth [success=3 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys auth include system-auth <- 1st skipped account include system-auth <- 2nd skippedm session include system-auth <- 3rd skipped ... <- should continue from here
我在 Fedora 上,
/etc/pam.d/sudo
看起來如下所示:auth [success=3 default=ignore] pam_ssh_agent_auth.so file=/etc/ssh/sudo_authorized_keys auth include system-auth account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so session include system-auth
我不是 PAM 專家,但是查看手冊頁時,我將其解釋
success=3
為“如果此規則成功,則跳過接下來的 3 行”,因此如果使用者正確登錄並且存在代理,我希望不會詢問密碼。唉,這是行不通的:無論如何都在詢問密碼。
[success=3 default=ignore]
如果我只使用而不是使用,則身份驗證按預期工作sufficient
- 我相信這基本上是相同的,在這種情況下我無法分辨出任何區別,因為模組堆棧由接下來的 3 個模組組成。顯然,使用
[success=3 default=ignore]
和sufficient
不是一回事,因為我沒有得到相同的結果。有人可以向我解釋實際差異是什麼以及為什麼前者在這種情況下不起作用?
謝謝
首先,
include
一行不是 PAM 模組。而不是計算auth include system-auth
作為要跳過的一項,PAM 庫將
auth include
用auth
來自/etc/pam.d/system-auth
. 因此,要確定跳過了哪些 3 行[success=3 default=ignore]
,您需要首先將include
語句替換為system-auth
文件的適當內容,然後計算要跳過的行數。其次,我認為
[success=3 default=ignore]
不會跨模組類型工作。在對使用者進行身份驗證時,應用程序將首先呼叫
pam_authenticate()
,在此期間 PAM 庫將只處理該auth
類型的條目。一旦使用者成功通過身份驗證,應用程序就可以呼叫pam_acct_mgmt()
,這將只處理該account
類型的條目。一旦完成,pam_open_session()
將只處理該session
類型的條目。由於身份驗證通過、帳戶管理通過和會話設置通過是三個不同的操作,我認為
auth [success=3 default=ignore]
只會跳過接下來的 3 行typeauth
only。在您的情況下,將被跳過的行將在/etc/pam.d/system-auth
文件中。當您使用
auth sufficient
時,這意味著如果該行列出的模組報告驗證成功,則該auth
行的處理將立即停止。auth sufficient
這意味著文件auth
中的所有行都system-auth
將被跳過,無論有多少行。當您使用
auth [success=3 default=ignore]
時,下一auth
行中有include
一行,您還必須調查包含的文件以準確了解會發生什麼。當您這樣做時仍然詢問密碼這一事實表明您的文件中顯然有超過 3auth
行。system-auth