PAM
정의
- Pluggable Authentication Modules
- 리눅스 시스템에서 사용하는 인증모듈
- 응용 프로그램에 대한 사용자의 사용 권한을 제어하는 모듈
배경
- PAM 사용 이전에는 각 응용프로그램에서 자체적으로 로직을 구현하여 사용.
- 특히 시스템에 저장된 사용자 정보를 통해 인증할 경우, /etc/passwd에 대한 접근 권한을 가지고 있어야 했음.
- 응용 프로그램마다 사용자 인증방식이 상이하여 관리에 어려움.
동작원리
- passwd 파일을 열람하지 않고 PAM 모듈에 사용자 인증을 요청한다.
- PAM은 인증을 요청한 사용자의 정보를 가지고 결과를 도출하여 응용프로그램에 전달한다.
장점
- 응용프로그램에서 직접 인증 로직을 구현하지 않아 개발 간소화.
- passwd 파일 등 시스템 파일을 열람하지 않아도 됨.
- 시스템 운영자가 응용프로그램의 인증 동작 제어 가능.
기본구조
Module type - Control Flag - Module Name - Module Argument
1. Module type
: PAM에 어떤 종류의 인증을 사용할 것인가 지정하는 필드
- auth : 사용자에게 비밀번호를 요청하고 입력 받은 정보가 맞는지 검사하는 모듈
- account : 명시된 계정이 현재 조건에서 유효한 인증 목표인지 검사 및 계정에 대한 접근 통제 및 계정 정책 관리하는 모듈
- password : 사용자가 패스워드를 변경할 수 있도록 패스워드 갱신을 관장하는 모듈
- session : 사용자가 인증을 받기 전/후에 수행해야 할 일을 정의하는 모듈
2. Control Flag
: PAM에서 사용되는 모듈들이 결과에 따라 어떤 동작을 해야하는지 결정하는 필드
- requisite : 인증 결과 성공의 경우 다음 인증 모듈 실행/인증 결과 실패의 경우 즉시 인증 실패 반환
- required : 인증 결과와 관계없이 다음 인증 실행 (required에서 실패가 되면 최종 인증 결과는 실패가 됨)
- sufficient : 인증 결과가 성공일 경우 즉시 인증 성공을 반환 / 인증 결과 실패일 경우 다음 인증 모듈 실행
- optional : 일반적으로 최종 인증 결과에 반영되지 않음
- include : 다른 PAM 설정 파일 호출
- Module name
: 사용하고자 하는 모듈의 경로와 이름을 지정하는 필드
: PAM 모듈은 대부분 /lib/security 또는 /etc/pam.d 디렉터리에 위치
- pam_rootok : root 계정인 경우, 추가 인증 없이 무조건 허용하는 모듈
- pam_wheel.so : SU명령어 사용인증에 사용되며 특정그룹(wheel)에 대한 인증 제어하는 모듈
- pam_succeed_if.so : 인수로 주어진 조건에 따라 인증을 제어하는 모듈
- pam_securetty.so : root 계정인 경우에만 적용되는 모듈. /etc/securetty 파일을 참고하여 해당 파일에 root가 있으면 특정 서비스에 대한 root 접근을 허용하는 모듈. (root 이외의 계정일 경우 항상 인증 성공값을 반환)
다른 sufficient인증 방법보다 앞서 require 인증방법으로 등록하는 것이 표준 사용방식
- pam_deny.so : 접근을 거부하는데 사용되는 모듈. 응용프로그램에게 항상 실패를 리턴.
- Module Argument
: 모듈-인수는 모듈에게 전달되는 인수를 나타낸다. 각각의 모듈은 각각의 인수를 가지고 있다. 모듈마다 인수가 필요할 수도 필요 없을 수도 있다.
- debug : 시스템 로그 파일에 디버그 정보를 남기도록 지정
- No_warn : 모듈이 경고 메시지를 보내지 않도록 지정
- Use_first_pass : 사용자에게 password 입력을 요구하지 않도록 지정하는 인수. 이전 모듈에서 입력받은 password가 존재하지 않을 경우, 인증 실패 반환
- Try_first_pass : 이전 모듈에서 입력 받은 password로 인증 시도하며, 이전에 입력받은 password가 존재하지 않을 경우, 사용자에게 입력 요구
인증과정
PAM 사용 예
- 특정계정에 대해 telnet 접속은 막고, ftp 접속만 허가하도록 하기
(1) /etc/pam.d/login 파일을 열어서 아래 라인 추가
auth required /lib/security/pam_listfile.so item=user sense=deny file=/etc/loginusers onerr=succeed
(2) /etc/lofingusers 파일을 만들고 telnet 접속을 막을 계정 추가
[root@www root]# cat /etc/loginusers
beneficial
=> beneficial이라는 계정은 텔넷은 사용할 수 없고 ftp만 가능
참고