/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()
전화를 무시했다는 점에 유의하세요. 하지만 제 답변에는 여전히 충분하다고 생각합니다.)