Linux PAM:配置和应用程序之间的映射

Linux PAM:配置和应用程序之间的映射

我在 /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 守护程序二进制文件名为sshdpam_start()则将sshd作为service_name.

(请注意,我忽略了这个ssh_get_progname()电话,但我认为这仍然足以说明我的答案。)

相关内容