Linux
為什麼我們在 PAM 中使用 optional,即使它會被忽略?
眾所周知,
optional
是 PAM 的配置文件中的控制值之一。可選:
此模組的成功或失敗僅在它是堆棧中與此服務+類型關聯的唯一模組時才重要。
我很困惑。
這是
/etc/pam.d/login
:session required pam_selinux.so open session required pam_namespace.so session optional pam_keyinit.so force revoke session include system-auth session include postlogin -session optional pam_ck_connector.so
我看到兩條規則可以
optional
通過操作進行控制。我假設我們僅
optional
用於非身份驗證目的規則。是對的嗎?
重要提示:可選模組不會被忽略,它們將被處理,它們的結果將被忽略,即即使它們失敗,認證過程也不會中止。
在許多情況下,您可能希望在身份驗證期間執行某個操作(要執行的模組),但即使在失敗的情況下,您也不希望身份驗證過程中止。
一個實際的例子是,如果您想使用 pam 在登錄期間使用與使用者密碼相同的密碼自動打開 dm-crypt 加密設備:
auth optional pam_exec.so expose_authtok quiet /usr/sbin/cryptsetup --allow-discards open UUID=... /home/username
請注意,如果
required
使用而不是optional
此處,則第一次登錄將成功,因為 cryptsetup 將返回 0 作為其退出程式碼,但如果使用者註銷然後再次登錄,則登錄將失敗,因為設備已經打開並且 cryptsetup 將返回非零退出程式碼。然而,在這種情況下,您仍然希望登錄成功。這只是我想到的一個例子,因為我實際使用了它,也就是說,這不是理論上的情況,但這是您希望失敗的模組不會中止身份驗證過程的許多情況之一。