1. PAM ?
- 리눅스에서 사용하는 인증 모듈로써 사용자의 사용 권한 ( 접근, 패스워드 등 )을 제어하는 모듈이다.
- PAM 사용 이전에는 자체적으로 로직을 구현하거나, 별도의 접근제어 툴을 사용하여 접근, 명령어, 원격접속 등의 관리를 수행했다.
- PAM 모듈은 소프트웨어 개발, 인증 및 안전한 권한 부여 쳬계를 분리하고자 하는 목적으로 만들어졌기 떄문에, 인증을 위한 로직을 직접 만들 필요가 없고,
passwd 파일을 열람하지 않아도 돼 시스템을 더욱 안전하게 운영할 수 있게 됐다.
2. 기존 인증 vs PAM 인증
- 응용프로그램 자체적으로 사용자 인증 과정
- PAM 모듈을 통한 사용자 인증 과정
3. PAM 기본 구조
- Module Type
- 모듈 타입 필드는 PAM에 어떤 종류의 인증을 사용할 것인지를 지정하는 필드이다.
auth | 사용자에게 비밀번호를 요청하고 입력 받은 정보가 맞는지 검사하는 모듈 |
account | 명시된 계정이 현재 조건에서 유효한 인증 목표인지 검사하는 것으로 계정에 대한 접근 통제 및 계정 정책을 관리하는 모듈 |
password | 사용자가 인증 정보 ( password )를 변경할 수 있도록 비밀번호 갱신을 관장하는 모듈 |
session | 사용자가 인증을 받기 전/후에 수행해야 할 일을 정의하는 모듈 |
- 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_seuretty.so | root 계정인 경우에만 적용되는 모듈로서 /etc/securety 파일을 참고하여 해당 파일에 root가 있으면 특정 서비스에 대한 root 접근을 허용하는 모듈 ( root 이외의 계정일 경우, 항상 인증 성공 값을 반환 ) |
- Module Arguments
- 모듈에게 전달 되는 인수로, 각각의 모듈은 각각의 인수를 가지고 있다. 모듈마다 인수가 필요할 수 도, 아닐 수도 있다.
Debug | 시스템 로그 파일에 디버그 정보를 남기도록 지정 |
No_warn | 모듈이 경고 메시지를 보내지 않도록 지정 |
Use_first_pass | 사용자에게 password 입력을 요구하지 않도록 지정하는 인수로 이전 모듈에서 |
Try_first_pass | 이전 모듈에서 입력 받은 password로 인증 시도하며, 이전에 입력 받은 password가 존재하지 않을 경우 사용자에게 입력 요구 |
4. PAM 인증 과정 예시
- su 명령어 사용을 위한 PAM 인증 과정
- tmpuser에서 root 계정으로 전환을 위해 su 명령어를 사용하면 /etc/pam.d/su 파일을 확인한다.
- /etc/pam.d/su 파일의 첫 구문은 root 계정일 경우 인증을 무조건 허용하는 pam_rootok.so 모듈을 확인한다.
- tmpuser는 root가 아니기 때문에 다음 구문 실행
- 요청자 ( tmpuser )가 wheel 그룹에 속한 사용자 인지, pam_wheel.so 모듈을 확인한다.
- 해당 Control Flag는 required이기 때문에 요청자가 wheel group에 속하거나 그렇지 않더라도 다음 구문을 무조건 실행한다.
- "required" control flag를 사용하게 될 경우, 모듈 인증 성공 / 실패 여부와 상관 없이 다음 구문을 실행하기 때문에 사용자 입장에서는
에러 발생 원인을 특정할 수 없어 보안상 이점이 있다.
- system-auth 파일을 확인하여 사용자에게 패스워드를 입력하라고 질의한다. ( 위 3번의 required flag로 인해 해당 과정은 무조건 거치게 된다 )
✓ try_first_pass : 이전 모듈에서 입력 받은 패스워드가 있을 경우, 해당 패스워드로 먼저 인증을 시도하고, 이전에 받은 패스워드가 없을 경우 새로 입력 받는다.
🙋♂️ 궁금한 점이나 잘못된 내용을 댓글로 적어주시면 감사하겠습니다 !!
참조 : https://goddoeun.tistory.com/m/5
'Infra > LINUX' 카테고리의 다른 글
# [Linux] Alias with arguments ( 매개변수를 이용한 별명 ) (0) | 2023.04.18 |
---|---|
# [Linux] Shell Alias ( 쉘 별칭 ) (0) | 2023.04.14 |
# [Linux] scp 명령어 (0) | 2023.03.17 |
# [Linux] systemd & systemctl (0) | 2023.02.08 |
# [Linux] Daemon (데몬) (0) | 2023.02.07 |