3.5. 인증 토큰 관리

3.5.1. 인증 토큰을 변경하기 위한 서비스 함수

#include <security/pam_modules.h>
int pam_sm_chauthtok(pamh,  
 flags,  
 argc,  
 argv); 
pam_handle_t *pamh;
int flags;
int argc;
const char **argv;
 

3.5.1.1. 설명

pam_sm_chauthtok 함수는 pam_chauthtok(3) 인터페이스에 대한 서비스 모듈의 구현이다.

이 함수를 사용해 사용자의 인증 토큰을 (재)설정한다.

유효한 플래그는 다음과 같으며, PAM_SILENT와 논리 OR 되어 있을 수 있다.

PAM_SILENT

어떤 메시지도 찍지 않기.

PAM_CHANGE_EXPIRED_AUTHTOK

이 인자는 사용자의 인증 토큰(패스워드)이 만료된 경우에만 변경해야 한다는 뜻이다. 이 플래그는 선택적이며 반드시 다음 두 플래그 중 하나와 조합돼 있다. 참고로 다음 두 옵션은 상호 배타적이다.

PAM_PRELIM_CHECK

모듈에서 사용자의 인증 토큰을 변경할 준비가 돼 있는지를 확인하고 있는 중이라는 뜻이다. 모듈에서 어떤 네트워크를 통해 다른 시스템에 접속해야 한다면 이 플래그를 받았을 때 그 시스템에 연결할 수 있는지 확인을 해 봐야 한다. 모듈에서 사용자의 인증 토큰을 갱신할 준비가 돼 있다고 확신할 수 없다면 PAM_TRY_AGAIN을 반환해야 하며, 그 정보가 응용으로 전해지게 된다.

password 스택에 control 값으로 sufficient를 쓰면 그 control 값 이후에 오는 모듈들의 PAM_PRELIM_CHECK 부분이 항상 실행되는 건 아니게 된다.

PAM_UPDATE_AUTHTOK

인증 토큰을 바꿔야 하는 호출이라는 표시다. 플래그가 PAM_CHANGE_EXPIRED_AUTHTOK과 논리 OR 되어 있으면 만료돼 있는 경우에만 토큰을 바꾼다.

PAM 라이브러리에서 이 함수를 연속으로 두 번 호출한다. 첫 번째는 PAM_PRELIM_CHECK로 호출하며, 모듈에서 PAM_TRY_AGAIN을 반환하지 않으면 이어서 PAM_UPDATE_AUTHTOK으로 호출한다. 인증 토큰이 (필요시) 바뀌는 건 두 번째 호출에서다.

3.5.1.2. 반환 값

PAM_AUTHTOK_ERR

모듈에서 새 인증 토큰을 얻을 수 없음.

PAM_AUTHTOK_RECOVERY_ERR

모듈에서 이전 인증 토큰을 얻을 수 없음.

PAM_AUTHTOK_LOCK_BUSY

인증 토큰이 현재 잠겨 있어서 인증 토큰을 변경할 수 없음.

PAM_AUTHTOK_DISABLE_AGING

인증 토큰 만료 동작이 꺼져 있음.

PAM_PERM_DENIED

권한 거부됨.

PAM_TRY_AGAIN

예비 검사가 성공하지 않았음. 응용으로 즉시 반환하는 게 좋다는 뜻이다.

PAM_SUCCESS

인증 토큰이 성공적으로 갱신되었다.

PAM_USER_UNKNOWN

패스워드 서비스에서 알지 못하는 사용자다.