Pam

success=3 澄清 pam 規則

  • April 5, 2022

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 includeauth來自/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 行type authonly。在您的情況下,將被跳過的行將在/etc/pam.d/system-auth文件中。


當您使用auth sufficient時,這意味著如果該行列出的模組報告驗證成功,則該auth行的處理將立即停止。auth sufficient這意味著文件auth中的所有行都system-auth將被跳過,無論有多少行。

當您使用auth [success=3 default=ignore]時,下一auth行中有include一行,您還必須調查包含的文件以準確了解會發生什麼。當您這樣做時仍然詢問密碼這一事實表明您的文件中顯然有超過 3auth行。system-auth

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