Linux

Linux PAM:配置和應用程序之間的映射

  • October 18, 2021

我在 /etc/pam.d 中有多個文件。我認為它們在不同發行版之間的名稱略有不同。而且我也看不到程序名稱和配置之間的直接聯繫(例如chpasswd vs. passwd)。

是否在某個地方或以某種方式定義了哪個應用程序使用哪個 pam 文件?

TL;DR:沒有規則;相反,它取決於應用程序開發人員完成的實現。

長版

當程序使用 PAM 進行身份驗證時,它必須呼叫pam_start()

int pam_start(const char *service_name, const char *user, const struct pam_conv *pam_conversation, pam_handle_t **pamh); 

第一個參數service_name是用於選擇配置的參數。

例如,OpenSSH 伺服器pam_start()在其源文件中呼叫auth_pam.c

sshpam_err =
   pam_start(SSHD_PAM_SERVICE, user, &store_conv, &sshpam_handle);

常量 SSH_PAM_SERVICE定義如下(在同一個文件中):

#if !defined(SSHD_PAM_SERVICE)
extern char *__progname;
# define SSHD_PAM_SERVICE       __progname
#endif

此外, 的值__progname定義ssh.c為:

__progname = ssh_get_progname(av[0]);

您可能知道,av[0]在 C 中是二進製文件的名稱。因此,如果 OpenSSH 守護程序二進製文件被命名為sshdpam_start()將被呼叫sshdservice_name.

(請注意,我忽略了ssh_get_progname()電話,但我認為這仍然足以說明我的答案。)

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