![Linux PAM:配置和应用程序之间的映射](https://linux22.com/image/163534/Linux%20PAM%EF%BC%9A%E9%85%8D%E7%BD%AE%E5%92%8C%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%B9%8B%E9%97%B4%E7%9A%84%E6%98%A0%E5%B0%84.png)
我在 /etc/pam.d 中有多个文件。我认为不同发行版之间的名称略有不同。而且我也没有看到进程名称和配置之间的直接联系(例如 chpasswd 与 passwd)。
是否在某个地方或以某种方式定义了哪个应用程序使用哪个 pam 文件?
答案1
长话短说:没有规则;相反,它取决于应用程序开发人员的实现。
长版:
当程序使用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()
电话,但我认为这仍然足以说明我的答案。)