Linux
Linux PAM:配置和應用程序之間的映射
我在 /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 守護程序二進製文件被命名為sshd
,pam_start()
將被呼叫sshd
為service_name
.(請注意,我忽略了
ssh_get_progname()
電話,但我認為這仍然足以說明我的答案。)