1. 소개(Introduction)

Linux-PAM(Linux용 착탈형 인증 모듈)은 시스템 관리자가 응용프로그램들이 사용자를 인증하는 방법을 선택할수 있도록 해주는 공유 라이브러리 묶음이다.

즉, PAM을 사용하는 응용프로그램을 재컴파일(재작성)하지 않고, 인증 방법을 변경할 수 있다는 것이다. 정말로, 누군가 응용프로그램 자체를 손대지 않고 인증시스템을 몽땅 업그레이드할 수 있을지도 모른다.

전통적으로 사용자 인증을 필요로 하는 응용프로그램은 특정 인증 방법을 사용하기 위해서는 컴파일을 해야만 했었다. 예를 들어, 전통적인 UN*X 시스템의 경우에, 사용자에 대한 신원확인을 올바른 패스워드를 입력하게 하여 확인하였다. 이 패스워드의 앞에 "salt"라는 두 글자를 붙여 암호화(crypt(3))된다. 사용자는 이 암호화된 패스워드가 시스템 패스워드 데이터베이스 (/etc/passwd)의 해당 사용자의 데이터의 두번째 필드와 일치할 경우 인증을 받게 된다. 이러한 시스템들에서, 만약 전부가 아니라면 대부분의 권한들은 이러한 하나의 인증 방식만으로 부여받게 된다. 권한은 사용자의 ID(uid)와 여러 그룹의 멤버쉽의 형태로 받게 된다. 서비스와 응용프로그램들은 사용자의 UID와 그룹 ID에 따라 사용여부가 결정된다. 전통적으로 그룹 멤버쉽은 /etc/group파일의 내용에 따라 부여받는다.

안타깝게도 컴퓨터의 속도가 향상되고 네트워크에 분산해서 연산을 하는 기법이 널리 사용되면서, 과거에 한때 안전하게 여겨졌던 이와 같은 인증 방법은 약점이 노출되었다. 이러한 현실에서 한가닥 희망으로 새로운 인증 방법이 꾸준히 계발되고 있다.

Linux-PAM 프로젝트의 목적은 권한을 부여하는 소프트웨어의 개발과 안전하고 적절한 인증안의 개발을 분리하려는데에 있다. 이는 응용프로그램이 사용자 인증을 처리하기 위해 사용될 함수의 라이브러리를 제공함으로써 가능하다. PAM라이브러리는 /etc/pam.conf(또는 /etc/pam.d/에 있는 여러 파일들)에서 각 시스템에 맞게 설정을 하여, 각 시스템에서 사용가능한 인증 모듈을 통해 사용자의 인증 요구를 처리한다. 모듈 자체는 일반적으로 /usr/lib/security에 위치해 있고, 동적으로 로드가능한 오브젝트 파일 (see dlopen(3))의 형태를 갖는다.