如何讓 PAM 子堆疊成為「必備」?

如何讓 PAM 子堆疊成為「必備」?

對於我的 PAM 配置的 auth 部分等,loginmdm呼叫common-auth.我已將common-auth以下內容呼叫為子堆疊(如auth substack krb5ldap-cache-auth):

auth optional pam_echo.so Trying UNIX
# Try UNIX, empty passwords OK
auth sufficient pam_unix.so nullok

auth optional pam_echo.so Checking UID
# If the uid < 500 and UNIX didn't work, then die.
auth requisite pam_succeed_if.so uid >= 500 quiet_success

auth optional pam_echo.so Trying Kerberos
# Try Kerberos, using the same password
# If the password is correct (success), then skip next lines
# If the password is wrong (auth_err), then die
# If Kerberos can't connect (?), then ignore
auth [success=2 auth_err=die default=ignore] pam_krb5.so debug use_first_pass

# Try the cache, using the same password
# Last chance.
auth optional pam_echo.so Trying cache
auth [success=done default=die] pam_ccreds.so action=validate use_first_pass

# Kerberos validated our password.
auth optional pam_echo.so Kerberos validated
# Store the password hash.
auth optional pam_ccreds.so action=store use_first_pass
# See if we can mount user drives, since we have a Kerberos token.
auth optional pam_mount.so
auth optional pam_echo.so Done.

pam_echo.so僅用於調試。)

這似乎對於成功的身份驗證工作得很好。子堆疊機制很方便,因為我可以使用“sufficient”和“done”來終止子堆疊,而不終止較大的堆疊。

但是對於失敗的身份驗證,較大的堆疊會在它應該死亡時繼續(例如,mdm將無用地調用pam_gnome_keyring.sologin將無用地調用)。pam_group.so

有沒有一種方法可以呼叫子堆疊,以便如果子堆疊失敗,堆疊就會死亡?我嘗試過auth requisite substack krb5ldap-cache-auth,但這只是糟糕的 PAM 語法。

答案1

來自 PAM 管理員指南:

substack

包括指定為該控制項的參數的設定檔中給定類型的所有行。這與include子堆疊中的完成和模具操作的評估不同,不會導致跳過整個模組堆疊的其餘部分,而只會跳過子堆疊。

讀你的問題,在我看來你正在尋找include而不是substack。因此你可能應該更換...

auth substack krb5ldap-cache-auth

和...

auth include krb5ldap-cache-auth

然而,在 Debian 系統上,您可能必須使用它:

@include krb5ldap-cache-auth

另外,在 RedHat 系統和衍生系統上,您甚至可能必須使用pam_stack,它通常被認為已被棄用(我相信由於處理問題包括遞歸):

auth requisite pam_stack.so service=krb5ldap-cache-auth

在這些情況下,如果有任何事件觸發中的donedie操作krb5ldap-cache-auth,PAM 將結束整個堆疊,而不僅僅是子堆疊。

相關內容