chris01 Asked: 2019-11-08 00:53:35 +0800 CST2019-11-08 00:53:35 +0800 CST 2019-11-08 00:53:35 +0800 CST Linux PAM:配置和应用程序之间的映射 772 我在 /etc/pam.d 中有多个文件。我认为它们在不同发行版之间的名称略有不同。而且我也看不到进程名称和配置之间的直接联系(例如chpasswd vs. passwd)。 是否在某个地方或以某种方式定义了哪个应用程序使用哪个 pam 文件? linux 1 个回答 Voted Best Answer binarym 2019-11-08T02:20:52+08:002019-11-08T02:20:52+08:00 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()电话,但我认为这仍然足以说明我的答案。)
TL;DR:没有规则;相反,它取决于应用程序开发人员完成的实现。
长版:
当程序使用 PAM 进行身份验证时,它必须调用
pam_start()
:第一个参数
service_name
是用于选择配置的参数。例如,OpenSSH 服务器
pam_start()
在其源文件中调用auth_pam.c
:常量
SSH_PAM_SERVICE
定义如下(在同一个文件中):此外, 的值
__progname
定义ssh.c
为:您可能知道,
av[0]
在 C 中是二进制文件的名称。因此,如果 OpenSSH 守护程序二进制文件被命名为sshd
,pam_start()
将被调用sshd
为service_name
.(请注意,我忽略了
ssh_get_progname()
电话,但我认为这仍然足以说明我的答案。)