LINUX PAM
사용자를 인증하고 그 사용자의 서비스에 대한 액세스를 제어하는 모듈화된 방법. PAM은 관리자가 응용포로그램들의 사용자인증방법을 선택할 수 있도록 해준다. 즉, Linux System에 대한 권한, 설정등을 하는데 있어서 유연성, 보안성을 제공하기 위한 소프트 웨어라고 생가하면 된다.
관련 디렉토리
/etc/pam.d – 서비스+시스템의 인증 설정 파일
/lib/x86_64-linux-gnu/security - PAM인증 모듈(리눅스 버전에 따라 다를 수 있음)
PAM인증 설정 파일의 구조
[Auth Type] [Control Flag] [Module_Path] [Module_Argument]
Auth Type
auth : 이 모듈타입은 사용자 인증의 두가지 면을 제공한다. 첫째는, 응용프로그램이 사용자에게 패스워드를 물어보거나 다른 확인 방법을 사용하도록 해서 그 사용자가 자신이 주장하는 사람이 맞는지 확인하는 것이다. 두번째는, 그룹 멤버쉽을 주거나 (앞서 이야기한 /etc/groups파일에 있는 내용을 통해서) credential(신임)속성을 통해 다른 권한을 주는 것이다.
account : 이 모듈은 인증이 아닌 계정관리를 수행한다. 이것은 보통 시간/날짜나 현재의 시스템 자원 상황(최대 사용자수)이나 사용자의 위치('root'는 콘솔에서만 로그인이 가능하다)등에 따라 서비스에 대한 접근을 허가하거나 제한하는 것이다.
password : 사용자와 연관된 인증토큰 (패스워드)들을 갱신할 때 필요하다. 보통, challenge/response 방식에 기반한 인증모듈 종류별로 각각 하나의 password모듈씩이 존재한다.
session : 서비스를 사용하기 직전/직후에 필요한 작업과 관련이 있다. 이러한 것들은 사용자와 교환할 어떤 데이터들의 opening/closing과 관련한 정보들의 기록, 디렉토리의 마운트 등이 해당된다.
Control Flag : 통제를 담당하는 부분으로 PAM에 무엇을 해야할 지를 알려준다. 4가지의 형식이 있다.
required
성공 : 다음 모듈을 실행(영향 X)
실패 : 다음 모듈을 실행(다른 모듈이 성공을 해도 무조건 실패를 반환/최종 실패)
sufficient
성공 : 다음 모듈을 실행하지 않고 중단(최종 성공)
실패 : 다음 모듈을 실행(다른 모듈에게 영향을 주지 않음)
requisite
성공 : 다음 모듈을 실행(영향 X)
실패 : 다음 모듈을 실행하지 않고 중단(최종 실패)
optional
성공, 실패에 중요치 않고 모듈을 실행
주요 모듈
pam_permit.so
-무조건 성공 반환
-auth type 모두 가능
EX)auth sufficient pam_permit.so
//인증에 있어서 해당 계정과 비밀번호에 대해서 일치하는지 유무를 보지않고 무조건 성공
pam_deny.so
-무조건 실패
-auth type 모두 가능
-실패 시 각기 인증 종류에 따라서 다른 결과를 리턴하나 무조건 실패
pam_access.so
-Login Access Control Table
-로그인 시 접근제어 리스트를 이용하여 허용과 차단설정
-/etc/security/access.conf 사용
-auth type모두 가능
-리턴 값은 /etc/security/access.conf에 따라 달라짐
/etc/security/access.conf 필드 설정
[permission] : [users] : [origins]
permission : 권한(+허용,-거부)
users : 계정, 그룹, ALL
origins : IP, HOST, 네트워크 대역, ALL
EX)ssh에서 192.168.0.10에서 들어오는 IP차단
/etc/pam.d/sshd
auth required pam_access.so
/etc/security/access.conf
-:ALL:192.168.0.10
+:ALL:ALL
pam_time.so
-시간을 이용하여 인증 모듈을 사용
-auth type은 account만 가능
-/etc/security/time.conf를 이용하여 제어
-계정에 대한 비밀번호와 무관하게 들어오는 계정을 시간을 이용하여 차단, 허용
/etc/security/time.conf 필드 설정
[services] ; [ttys] ; [users] ; [times]
services : 적용할 서비스
ttys : 적용할 터미널 방식
users : 계정, 그룹, *
times : 시간과 분, 날짜 기록(시간은 24시로 HHMM)
EX)ssh에서 test라는 계정에 대해서 수요일 오전 9시부터 오후5시까지 접근허용, 나머진 불가
/etc/pam.d/sshd
account required pam_time.so
/etc/security/time.conf
sshd;*;test;we0900-1700
pam_listfile.so
-파일에 있는 목록을 이용하여 접근제어
-auth type모두 가능
-Module-Argument사용
-옵션, Item, TIME, Sense, file, onerr, apply, quiet등이 있음
Item
=파일에 있는 목록을 어떠한 종류의 항목으로 할 것인지
tty | user | rhost | ruser | rgroup | shell
file
=어떤 경로에 파일이 위치하는지 지정
Sense
=파일의 목록을 item에 따라서 해당 목록에 있는 값과 일치하는 경우 allow이면 내용을 보여주고 deny이면 거부
onerr
=에러가 발생시 어떻게 처리 할지를 경정
=succed | fail
=옵션을 사용할 경우 파일의 경로를 찾아 갔을 때 지정한 파일이 경로에 존재하지 않을 경우 모듈의 값을 성공으로 할 것인지 실패로 할 것인지 설정
=Sense가 allow이면 onerr는 fail
EX)ssh를 사용할 수 있는 계정을 test로만 설정
/etc/pam.d/sshd
auth required pam_listfile.so item=user sense=allow onerr=fail file=/etc/security/list.list
/etc/security/list.list
test
pam_secceed_if.so
-if문을 사용하듯이 사용
-옵션 값이 사용됨
-auth type 모두 가능
-옵션: user, group, shell, uid, gid, home, service
field [관계연산자] 값
EX) user = test // 계정이 test라면
uid = 500 // uid값이 500이라면
gid >= 500 // gid값이 500이상이라면
user ingroup test // 해당 계정이 test그룹안에 포함되어 있다면
user notingroup test // 해당 계정이 test 그룹안에 포함되어 있지 않다면
use_uid // 현재 사용하는 계정을 이용
quiet // 실패시 기록 남김
auth required pam_succeed_if.so user = test
pam_rootok.so
-root 계정일 시 무조건 성공 반환
-root 계정이 아닐 시 무조건 실패
-auth type은 auth만 가능
EX)su에서 root에서 다른 계정으로 넘어갈 시 비밀번호에 대해서 묻지않게 설정
/etc/pam.d/su
auth sufficient pam_rootok.so
pam_wheel.so
-계정이 wheel그룹안에 포함되어 있다면 성공 그렇지 않으면 실패
-auth type은 auth, account가능
-계정 그룹을 이용하여 접근 제어하고자 할 경우 많이 사용
pam_env.so
-환경 변수에 대한 설정을 하여 성공, 실패
-환경 변수에 대한 적용/ 미적용 (기본값은 미적용)
-기본적으로 무조건 성공
-auth type은 auth, session가능
pam_fprintd.so
-패스워드 프롬프트를 대신하는 인증 서비스
-현재는 사용하지 않음.
-무조건 실패
pam_unix.so
-현재 사용하는 패스워드 인증 모듈
-기존 유닉스 계열의 운영체제의 패스워드 인증 모듈
-/etc/passwd, /etc/shadow 파일을 참조하여 패스워드 인증.
PAM을 응용한 예시
proftpd
보안을 위해 ftpusers를 사용하지 않고 root만 로그인 가능하도록 설정.
[root]#rm -rf /etc/ftpusers
[root]#vim /etc/proftpd/proftpd.conf
DefaultRoot ~ //주석 제거
RootLogin ON //추가
AuthOrder mod_auth_pam.c* mod_auth_unix.c //주석 제거
[root]#vim /etc/pam.d/proftpd
#auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed //주석
auth required pam_nologin.so //추가
[root]#vim /etc/pam.d/login
#auth required pam_nologin.so //주석 제거
[root]#touch /etc/nologin
'Security' 카테고리의 다른 글
PAM 모듈 정리 (0) | 2021.01.12 |
---|---|
Linux 로그인 시 Login Incorrect가 반복되는 현상 (0) | 2020.12.29 |
OpenSSH 8.1 패치 (0) | 2020.11.22 |
보안취약점 점검 가이드 및 조치 방법 (0) | 2020.11.18 |
pam_tally2.so 모듈 설정 관련 주의사항 (0) | 2020.11.16 |