1장. 들어가며

Linux-PAM(Linux용 Pluggable Authentication Modules)은 응용에서 사용자를 인증하는 방식을 로컬 시스템 관리자가 선택할 수 있게 해 주는 공유 라이브러리 세트다.

달리 말하면 PAM을 쓰는 응용을 (재작성 및) 재컴파일하지 않고도 사용하는 인증 메커니즘을 전환하는 게 가능하다. 실제로 응용 자체는 전혀 건드리지 않고 로컬 인증 시스템 전체를 업그레이드 할 수도 있다.

과거에 사용자 인증을 필요로 하는 응용들은 특정 인증 메커니즘을 사용하도록 컴파일 해야 했다. 예를 들어 전통적인 UN*X 시스템의 경우 사용자가 올바른 패스워드를 입력하는 것으로 사용자의 신원을 검증한다. 그 패스워드 앞에 "솔트"라는 2개 문자를 붙인 다음 (crypt(3)으로) 암호화한다. 그렇게 암호화한 패스워드가 시스템 패스워드 데이터베이스(/etc/passwd 파일)의 사용자 항목의 두 번째 필드와 동일하면 사용자가 인증된다. 그런 시스템에선 그 한 가지 인증 체계에 기반해서 거의 모든 형태의 권한 부여가 이뤄진다. 사용자 식별자(UID)와 다양한 그룹 소속 여부에 따라 권한이 정해진다. 그리고 사용자의 개인 및 그룹 신원에 기반해서 서비스와 응용을 이용할 수 있다. 전통적으로 그룹 소속은 /etc/group 파일의 항목으로 정해졌다.

권한 부여 소프트웨어의 개발을 안전하고 적절한 인증 체계의 개발과 분리하는 게 Linux-PAM의 목적이다. 이를 위해 응용에서 사용자 인증을 요청하는 데 이용할 수 있는 함수들의 라이브러리를 제공한다. 시스템 파일 /etc/pam.conf를 (또는 /etc/pam.d/ 안에 위치한 일련의 설정 파일들을) 사용해 제각기 사용 가능한 인증 모듈들을 통해 사용자 요청을 인증하도록 PAM 라이브러리를 제각각 구성한다. 모듈들은 보통 /lib/security 내지 /lib64/security 디렉터리에 있으며 동적 적재 오브젝트 파일(dlopen(3)) 참고) 형태로 돼 있다.