[LINUX/UNIX] PAM - 스팸 말고 팸!
in 운영체제 on 보안
플러그형 인증 모듈
PAM?
환경 : centos 8
리눅스에는 PAM이라는 인증 모듈을 사용한다. 각 프로그램이 사용할 인증 모듈과 설정을 /etc/pam.d/
라는 디렉터리에 저장하면 각 프로그램에서 인증을 수행할 때, 해당 파일에 지정된 설정대로 진행할 수 있다.
간단히 PAM 파일 하나를 까보면
sshd의 PAM 설정
크게 3개의 열로 구분되어 있고, 몇몇 줄에는 전달인자로 보이는 close, revoke 등이 있다.
타입 (type)
맨 첫줄에 나오는 타입은 쉽게 말해서 대상이다. 후술할 ‘모듈’을 어떤 '대상'
에 적용할지 설정하는 것이다. PAM에는 총 4가지의 대상이 있다.
auth | 패스워드 입력 등 접근자가 사용자가 맞는지에 대해 |
account | 해당 사용자가 사용하고자 하는 서비스에 접근이 가능한지에 대해 |
password | 패스워드 갱신, 정책 등 패스워드가 유효한지에 대해 |
session | 사용자가 인증을 받기 전,후 실행되어야 하는 것들에 대해 |
처리 방식 (control flag)
control flag는 쉽게 말해서 처리 방식이다. 선술된 ‘대상’에 모듈 인증이 성공/실패하였을 때, 어떻게 처리할지에 대한 설정이다.
타입 | 모듈 인증 성공시 | 모듈 인증 실패시 |
requisite | 다음 모듈 실행 | 즉시 실패 반환 |
required | 최종 인증 결과 성공 | 최종 인증 결과 실패 |
sufficient | 즉시 성공 반환 | 다음 모듈 실행 |
optional | 인증 결과에 반영되지 않지만, 다른 모듈의 결과가 없다면 해당 모듈의 결과를 반환 | 다음 모듈 실행 |
include | 다른 PAM 모듈 호출 | 해당 PAM 모듈 실행 |
PAM 모듈 (module)
PAM 모듈은 /usr/lib/security
, /usr/lib64/security
등 주로 security
디렉터리에 위치한다. 종류도 많고 중간중간 추가적으로 설치도 가능하기 때문에 주요 모듈만 간략히 알아보도록 하자.
pam_permit/pam_deny | 항상 성공/실패를 반환 |
pam_rootok | root의 접근은 암호 없이 허용 |
pam_unix, pam_pwdb | 암호를 확인/변경할 때 사용하는 모듈 |
pam_securetty | /etc/securetty에 나열되지 않은 터미널은 접근을 차단 |
같은 모듈일지라도 모듈이 인증을 수행하는 대상(타입)에 따라 약간씩 동작이 달라지고 전달 인자도 달라진다.
이 세가지의 사항이 합쳐저 하나의 라인이 되고, 모든 라인의 검사가 수행되면 최종적으로 서비스에 접근을할지말지 결정된다.