Security #3. PAM에 대한 이해
개요
리눅스 시스템에서 사용하는 인증모듈인 PAM에 대한 정리와 이해
포스팅 참고 링크
- https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/4/html/reference_guide/ch-pam
- https://www.igloo.co.kr/security-information/%EB%A6%AC%EB%88%85%EC%8A%A4-pam-%EB%AA%A8%EB%93%88%EC%9D%98-%EC%9D%B4%ED%95%B4/
PAM?
PAM은 Pluggable Authentication Modules 의 약자로 리눅스 시스템에서 사용하는 인증모듈로써 어떠한 응용프로그램에 대한 사용자의 권한을 제어하는 모듈 역할을 한다. 과거에는 특정 응용프로그램이 사용자 인증을 하기 위해서는 리눅스 /etc/passwd 파일을 참고해야했는데, 이때 해당 파일에 대한 접근 권한이 있어야 하고 응용프로그램마다 인증하는 방법이 달랐기에 관리의 어려움이 발생했다. 이를 위해 PAM이 만들어졌고 아래와 같은 로직으로 동작한다.
1. 사용자 인증이 필요한 응용프로그램이 PAM 모듈에 인증을 요청
2. PAM은 인증을 요청한 사용자의 정보를 갖고 결과값을 응용프로그램에 전달
장점
- 응용프로그램에서 별도 인증로직을 구현하지 않아도 된다 (개발의 간소화)
- 응용프로그램측이 리눅스 시스템파일에 접근하지 않아도 된다.
- OS(시스템)운영자가 응용프로그램측의 인증동작을 제어 할 수 있어 운영안정성이 향상된다.
기본구조
PAM 모듈은 Module type, Control Flag, Module Name, Module Arguments 총 4개의 기본 구조를 갖고 있다.
* 모듈에 대한 보다 자세한 설명은 RHEL의 경우, usr/share/doc/pam-<version-number> 위치에서 가이드문서 확인가능하다.
Module type
- auth : 사용자에게 비밀번호를 요청하고 입력 받은 정보가 맞는지 검사하는 모듈
- account : 계정에 대한 접근 통제 및 계정 정책을 관리하는 모듈
- password : 사용자가 인증정보를 변경 할 수 있도록 비밀번호 갱신을 관장하는 모듈
- session : 사용자가 인증을 받기 전/후에 수행해야 할 일을 정의하는 모듈
Control Flag
- requisite : 인증결과가 실패일 경우, 인증이 종료
- 인증결과가 성공일 경우, 다음 인증모듈 실행(최종 인증 결과에 미반영)
- 인증결과가 실패일 경우, 즉시 인증실패를 반환
- required : 인증결과가 최종 인증결과에 무조건 반영 (인증결과와는 상관없이 다음인증절차는 진행)
- 인증결과가 성공일 경우, 최종 인증 결과는 무조건 성공
- 인증결과가 실패일 경우, 최종 인증 결과는 무조건 실패
- sufficient : 인증결과가 성공일 경우, 즉시 인증종료
- 인증결과가 성공인 경우, 즉시 인증 성공을 반환
- 인증결과가 실패일 경우, 다음 인증 모듈 실행 (최종 인증 결과에 미반영)
- optional : 일반적으로 최종 인증결과에 반영되지 않음
- 단, 다른 인증 모듈의 명확한 성공/실패가 없다면 이 모듈의 결과를 반환
- include : 다른 PAM 설정 파일 호출
- substack : include와 동일하게 파일을 가져오지만, 컨트롤 플래그에 쓸 수 있는 done, die 에 따라 동작이 상이함
각 Flag 설정의 의미는 위와 같고 예를 들자면 먼저 실행되었던 인증 절차 중 required 처리가 되면 어짜피 최종결과는 실패되겠지만 다음 인증절차는 진행하게되고, 최종 인증절차가 끝나거나 인증절차 중 requisite 건에서 실패가 났을 때 혹은 sufficient 인증결과가 성공인경우 종료되며 실패 처리가 되게 된다.이 부분에서 required를 통해 공격자로부터 어느 부분에서 인증이 실패났는지 감출 수 있기떄문에 PAM의 강점이라고 할 수 있다.
Module Name
이 필드는 사용하고자 하는 모듈의 경로와 이름을 지정하는 필드이며 PAM 모듈을 대부분 /lib/security 또는 /etc/pam.d 디렉터리에 위치함
Module Arguments
모듈 인수는 모듈에 전달되는 인수를 나타낸다. 각각의 모듈은 각각의 인수를 갖고 있다. 모듈마다 인수가 필요할 수도 필요 없을수도 있다.
PAM 설정 관련 예시
예시 ) /etc/pam.d/su 의 경우
- case 1
auth required pam_succeed_if.so_user=test quiet auth sufficient pam_rootok.so
- case2
auth sufficient pam_rootok.so auth required pam_succeed_if.so_user=test quiet
- case 1의 경우
- su 명령어 요청자가 test인지 확인 후 su 명령어 요청자가 root인지 확인
- 위의 경우는 required 조건이 먼저 오기때문에 test 유저가 아니면 root라도 최종적으로 인증이 실패한다.
- case 2의 경우
- su 명령어 요청자가 root인지 확인 후 su 명령어 요청자가 test인지 확인
- case2의 경우는 요청자가 root인경우 pam_rootok.so 에서 인증이 완료되고, control flag가 sufficient 처리가 되어 인증이 완료된다. root가 아니라 실패할 경우 다음 required control flag에서 인증이 성공하므로 root, test 계정 모두 su 명령어를 사용할 수 있다.
다음 포스팅에서는 kerberos, Ldap을 확인하면서 PAM대해 복습할 예정
'System Engineering > Security' 카테고리의 다른 글
Security #5. SSH의 동작원리와 SSH KEY 배포 (0) | 2023.07.29 |
---|---|
Security #4. Kerberos에 대한 이해 (0) | 2023.04.01 |
Security #2. Webserver(웹서버) TLS 1.2 미만 차단조치(Apache, IHS) (0) | 2021.07.07 |
Security #1. TLS와 SSL에 대한 이해 (0) | 2021.06.08 |
댓글