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 데몬 바이너리의 이름이 이면 sshd다음 pam_start()sshd같습니다 service_name.

(제가 이 ssh_get_progname()전화를 무시했다는 점에 유의하세요. 하지만 제 답변에는 여전히 충분하다고 생각합니다.)

관련 정보