3.2. 인증 관리

3.2.1. 사용자 인증을 위한 서비스 함수

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

3.2.1.1. 설명

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

이 함수는 사용자를 인증하는 작업을 수행한다.

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

PAM_SILENT

어떤 메시지도 찍지 않기.

PAM_DISALLOW_NULL_AUTHTOK

이 인증 메커니즘을 위한 인증 토큰 데이터베이스에 사용자 항목이 NULL이면 PAM_AUTH_ERR를 반환한다. 이 플래그가 없으면 그렇게 NULL 토큰인 경우 사용자 입력을 요구하지 않고 성공으로 이어지게 된다.

3.2.1.2. 반환 값

PAM_AUTH_ERR

인증 실패.

PAM_CRED_INSUFFICIENT

어떤 이유로 사용자를 인증하기 위한 크리덴셜이 충분치 않다.

PAM_AUTHINFO_UNAVAIL

모듈에서 인증 정보에 접근할 수 없었다. 네트워크나 하드웨어 장애 등이 원인일 수 있다.

PAM_SUCCESS

사용자가 성공적으로 인증되었다.

PAM_USER_UNKNOWN

인증 서비스에서 알지 못하는 사용자다.

PAM_MAXTRIES

인증 모듈들 중 하나 이상에서 사용자 인증 시도 최대 횟수에 도달했다. 재시도 하지 말 것.

3.2.2. 크리덴셜을 변경하기 위한 서비스 함수

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

3.2.2.1. 설명

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

이 함수는 해당 인증 체계에 대한 사용자 크리덴셜을 변경하는 작업을 수행한다. 일반적으로 인증 모듈에서는 사용자에 대한 인증 토큰 이상의 정보에 접근이 가능할 수도 있다. 이 함수를 이용해 그런 정보를 응용에서 이용할 수 있게 만든다. 사용자가 인증된 후에 세션 수립 전에 호출해야 한다.

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

PAM_SILENT

어떤 메시지도 찍지 않기.

PAM_ESTABLISH_CRED

사용자의 크리덴셜 설정.

PAM_DELETE_CRED

인증 서비스와 관련된 크리덴셜 삭제.

PAM_REINITIALIZE_CRED

사용자 크리덴셜 재설정.

PAM_REFRESH_CRED

사용자 크리덴셜의 수명 연장.

pam_sm_setcred() 반환 코드가 어떻든 상관없이, pam_setcred() 함수 호출을 평가하기 위해 auth 스택을 탐색하는 방식은 pam_authenticate() 라이브러리 호출을 평가할 때와 정확히 같다. 그리고 보통 pam_authenticate() 평가 시 무시된 스택 항목은 libpam에서 pam_setcred() 함수를 평가할 때도 무시된다. 무시되지 않는 경우에 모듈별 pam_sm_setcred() 호출의 반환 코드를 required로 처리한다.

3.2.2.2. 반환 값

PAM_CRED_UNAVAIL

모듈에서 사용자의 크리덴셜을 얻을 수 없다.

PAM_CRED_EXPIRED

사용자의 크리덴셜이 만료되었다.

PAM_CRED_ERR

모듈에서 사용자의 크리덴셜을 설정할 수 없다.

PAM_SUCCESS

사용자 크리덴셜이 성공적으로 설정되었다.

PAM_USER_UNKNOWN

인증 모듈에서 알지 못하는 사용자다.

PAM_SUCCESS 외의 반환 값들은 보통 크리덴셜 스택 실패 처리로 이어진다. 처음 발생한 오류가 pam_setcred()의 반환 값을 결정하게 된다.