초심자를 위해, 예제를 먼저 살펴보겠다. 사용자에게 어떤 서비스를 제공해주는 응용프로그램을 생각해보자; login이 이런 프로그램중 하나이다. login은 두가지 일을 한다. 하나는 요청한 사용자가 자신이 주장하는 사용자가 맞는지 확인해서 원하는 사용자로 설정해주고 두번째로, 요구한 서비스를 제공해주는 것이다; login의 경우 서비스는 그 사용자의 UID로 실행되는 명령shell(bash, tcsh, zsh, 등등) 이다.
전통적으로, 앞의 단계는 login 프로그램이 사용자에게 패스워드를 물어 보고, 시스템에 있는 것과 일치하는지 확인함으로써 수행된다. 따라서 시스템에 관련된 한도 안에서 사용자가 그가 주장하는 사용자가 맞는지 확인한다. 이 작업을 Linux-PAM에게 위임하게 된다.
응용프로그램 개발자 입장에서 보면(이 경우에는 login프로그램을 작성하는 사람), Linux-PAM이 사용자의 신원을 확인하는 인증과정을 맡게 되는 것이다.
Linux-PAM의 유연성은 시스템 관리자인 당신이 어느 인증안을 사용할 것인지 마음대로 요구할 수 있다는 것이다. 당신은 Linux시스템에서 PAM을 사용하는 어떤 또는 모든 응용프로그램에 대해서도 인증안을 정할 자유를 갖고 있다. 즉, 당신은 단순 신뢰(pam_permit, 모두 허용하는 것)같이 순진한 것부터 망막검사, 음성, 그리고 one-time 패스워드를 조합한 것처럼 대단히 의심많은 수준까지 사용해서 인증할 수 있다.
당신이 지금 보고 있는 Linux-PAM의 유연성을 보여주기 위해 다음의 상황을 생각해보자: 시스템 관리자(부모)는 그(녀)의 사용자들(아이들)의 수학 능력을 향상시키길 원한다. 그녀는 아이들이 좋아하는 "Shoot'em up game" (물론 PAM을 사용하는 프로그램이어야 한다)을 사용하도록 인증하는데 12보다 작은 임의의 몇몇 숫자들의 곱을 맞추도록 요구하도록 설정할 수 있다. 만약 그 게임이 좋은 점이 있다면 아이들이 곧 구구단을 배울 것이라는 사실은 확실하다. 아이들이 자람에 따라 인증방법도 (긴 숫자의)나눗셈을 포함하도록 업그레이드 할 수 있다.
Linux-PAM은 네가지 종류의 작업을 한다. 이것들은 인증(authentication); 계정(account); 세션(session); 패스워드(password)관리작업이다. 선호하는 관리방안과 응용프로그램의 동작의 관련성은 해당하는 Linux-PAM설정 파일의 내용으로 정해진다. 관리작업은 설정 파일 내에 지정된 모듈에 의해 수행된다. 이 파일의 문법은 아래에서 다룬다.
다음 그림은 Linux-PAM의 전체 구성을 보여준다.
+----------------+ | application: X | +----------------+ / +----------+ +================+ | authentication-[---->--\--] Linux- |--<--| PAM config file| | + [----<--/--] PAM | |================| |[conversation()][--+ \ | | | X auth .. a.so | +----------------+ | / +-n--n-----+ | X auth .. b.so | | | | __| | | _____/ | service user | A | | |____,-----' | | | V A +----------------+ +------|-----|---------+------+------+ +---u-----u----+ | | | | auth.... |--[ a ]--[ b ]--[ c ] +--------------+ | acct.... |--[ b ]--[ d ] +--------------+ | password |--[ b ]--[ c ] +--------------+ | session |--[ e ]--[ c ] +--------------+ |
그림의 왼쪽은 X라는 응용프로그램을 나타낸다. Linux-PAM 라이브러리와 연결된 이런 응용프로그램은 설정된 인증 방법에 대해 전혀 모르는 상태이다. Linux-PAM 라이브러리(그림 가운데)는 PAM설정 파일의 내용을 보고 X라는 응용프로그램에에 맞는 모듈들을 로드한다. 이 모듈들은 네개의 관리 그룹(그림 아래의 가운데)으로 분류되고, 설정파일에 적혀있는 순서대로 처리된다. Linux-PAM에 의해 이 모듈들이 호출되면 응용프로그램을 위해 다양한 인증을 수행한다. 사용자에게 제공되거나 사용자로부터 받아야할 텍스트 정보들은 응용프로그램이 제공하는 conversation 함수를 통해 교환된다.
[아래 글은 Seth Chaiklin이 제공한 것이다.]
여태까지 우리는 모든 응용프로그램들이 적절히 코딩된 이상적인 상황에서 PAM이 어떻게 동작하는지 설명했다. 하지만, 현재(1998년 10월)의 시점에서 이것은 실제 상황과 많이 다르다. 그래서, 여기에서는 시스템에 PAM을 사용하려고 시도할 때에 고려해야할 몇가지 사항을 적는다. 모든 문제에 PAM은 유용한 것인가? 만일 Linux를 1인 사용자 시스템으로 사용하거나 모든 사용자들을 신뢰할 수 있는 환경이라면, PAM을 사용하는 것은 실질적으로 이익이 없다. |
Ed: 실제로 장점이 있기는 하다. Win95처럼 인증자체를 사실상 바보로 만들어 버릴 수 있다.
네트워크 환경에서, 사용자들이 어떻게 인증을 받는가 등에 대해 좀더 생각해볼 필요가 있다는 것은 확실하다.
Linux를 서버로 사용하고 있다면, 그리고 그 서버에서 몇몇 서로 다른 서비스(예를 들어 패스워드 컨트롤을 사용하여 일부 사용에 제약을 두는 WWW, PPP등)들을 제공하고 있다면, 실질적이고도 유익한 PAM의 가치가 있을 수 있다. 특히, 모듈 사용을 통해 PAM은 프로그램이 특정 패스워드 데이터베이스에 대한 코드를 가지고 있지 않더라도 여러 패스워드 데이터베이스을 검색할 수 있도록 해준다. 아래에 PAM이 가능하게 해주는 예가 있다. * Apache는 PAM서비스를 제공하는 모듈을 가지고 있다. 이제 특정 디렉토리들을 사용하는 인증이 PAM에 의해 수행될 수 있다. 이것은 RADIUS, NIS, NCP 같이 PAM이 사용가능한 모듈 전부를 인증에 사용하다는 이야기가 된다. (즉, 이것은 Novell 패스워드 데이터베이스가 사용가능하다는 것이다.) * pppd는 PAM이 적용된 버젼이 있다(RedHat에 있다.) 이제 ppp 사용자를 인증하기 위해 여러 데이터베이스를 사용하는 것이 가능하다. 일반 Linux기반의 패스워드 데이터베이스(/etc/passwd나 /etc/shadow같은 것들)뿐만 아니라, Novell 패스워드 데이터베이스나 NT기반의 패스워드 데이터베이스에 대해서도 인증을 하는 PAM모듈을 사용할 수 있다. * 앞의 두 예의 조합이 가능하다. 당신의 사무실/부서에 있는 사람들이 이미 Novell이나 NT 기반의 LAN에 ID와 패스워드를 등록했다고 생각해보자. 이 데이터베이스를 당신의 Linux서버에서 사용하고 싶다면(PPP, Web access뿐아니라, 일반 shell access까지도), 양쪽 모두 별도의 데이터베이스를 유지하는 것보다 PAM을 사용해서 기존의 데이터베이스를 사용한 인증을 할 수 있다. 인증을 필요로하는 모든 프로그램에서 PAM을 사용할 수 있는가? 대답은 예/아니오 모두 가능하다. 소스코드에 접근 할 수 있고, 적절히 PAM기능을 추가할 수 있다면 대답은 '예'이다. 소스코드에 접근할 수 없고, 프로그램 자체가 PAM기능을 지원하지 않는다면 대답은 '아니오'이다. 즉, 어떤 프로그램이 PAM을 사용하려한다면 프로그램이 PAM을 지원하도록 만들어야 한다. 만약 그렇지 않다면, PAM을 사용하는 것은 불가능하다. 프로그램이 PAM지원 기능을 갖고 있는지 아닌지 어떻게 알 수 있는가? 간편한 방법(하지만 항상 믿을것은 못된다.)은 'ldd <programname>'이다. 만약 libpam과 libpam_misc가 프로그램이 사용하는 라이브러리들 중에 없다면, 그 프로그램은 PAM을 사용하지 않는 것이다. 그러나, 라이브러리를 가지고 있더라도 여전히 문제는 있는데 왜냐하면 PAM이 코딩된 프로그램이 제대로 동작하지 않을 수 있기 때문이다. 그래서, 믿을 만한 검증방법은 아래의 테스트를 하는 것이다. /etc/pam.d 디렉토리에서 실행시키려는 프로그램의 설정파일을 만든다. 정확한 파일의 이름은 프로그램내에 하드-코딩되어 있다. 보통은 프로그램 이름과 같은 이름이지만, 항상 그렇지는 않다. 설명의 편의를 위해 그 프로그램의 이름이 'pamprog'라고 하고, 설정파일은 /etc/pam.d/pamprog라고 하자. /etc/pam.d/pamprog의 내용을 다음과 같이 하자: auth required pam_permit.so auth required pam_warn.so 이제 pamprog를 사용해보자. 설정파일의 첫번째 줄은 모든 사용자를 통과시키는 것이다. 두번째 줄은 syslog파일에 경고 메시지를 남기는 것이다. 이 테스트가 성공한다면, 당신은 이 프로그램이 pam을 제대로 지원하고 있다는 것을 알 수 있다. 그리고 /etc/pam.d/pamprog 파일내의 모듈 설정을 통해 어떻게 모듈을 쌓을 것인지를 결정하는 더 흥미있는 일을 할 수 있게된다. |