Linux

為什麼我們在 PAM 中使用 optional,即使它會被忽略?

  • February 15, 2018

眾所周知,optional是 PAM 的配置文件中的控制值之一。

linux-pam.org

可選:

此模組的成功或失敗僅在它是堆棧中與此服務+類型關聯的唯一模組時才重要。

我很困惑。

這是/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 將返回非零退出程式碼。然而,在這種情況下,您仍然希望登錄成功。

這只是我想到的一個例子,因為我實際使用了它,也就是說,這不是理論上的情況,但這是您希望失敗的模組不會中止身份驗證過程的許多情況之一。

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