System

PAM (Pluggable Authentication Modules)

supp0rt 2024. 8. 19. 15:08

리눅스 시스템에서 사용하는 ‘인증 모듈(Pluggable Authentication Modules)’로써 응용 프로그램(서비스)에 대한 사용자의 사용 권한을 제어하는 모듈이다.

응용프로그램 자체적으로 사용자 인증하는 과정

  1. User → su root → su 명령어 파일
  2. su 명령어 파일 → root 정보 확인 → passwd 파일
  3. passwd파일 → 정보 확인 결과 반환 → su 명령어 파일
  4. su 명령어 파일 → su 명령어 결과 반환 → User

PAM 모듈을 통한 사용자 인증 과정

  1. User → su root → su 명령어 파일
  2. su 명령어 파일 → root 정보 확인 → PAM 모듈
  3. PAM 모듈 → 정보 확인 결과 반환 → su 명령어 파일
  4. su 명령어 파일 → su 명령어 결과 반환 → User

응용프로그램이 자체적으로 사용자 인증을 거치게 되면

  1. 응용프로그램이 직접 /etc/passwd에 접근할 수 있는 권한이 필요
  2. 따라서 침해 사고의 위험 존재

따라서 PAM 인증 모듈이 그 자리를 대신하여 인증 과정을 수행 함

→ 개발 간소화, passwd 파일 열람 X, 시스템 운영자의 응용프로그램 인증 동작 제어

→ Why? PAM 모듈 자체적으로 인증 조건을 명시하면 됨

출처: IGLOO

PAM 기본 구조는 다음과 같다

Module Type + Control Flag + Moduls Name 및 Module Arguments

해당 구조를 가지고 PAM 인증 수행

출처 : IGLOO

Control Flag 확인

예시 1

auth   required   pam_succed_if.so user=honeypunch quiet

auth  usfficient  pam_unix.so try_first_pass
auth   requisite   pam_succed_if.so user=honeypunch quiet

auth   usfficient  pam_unix.so try_first_pass

required 는 인증 성공 여부와 상관없이 다음 인증 모듈 수행

requisite 는 인증 실패 시 인증 결과 반환

따라서 1번 항목은 honeypunch 계정이 아니여도 비밀번호를 요구하지만, 2번 항목은 해당 계정이 아닐 시 인증 종료

예시 2

auth   required   pam_succed_if.so user=honeypunch quiet

auth  sufficient  pam_unix.so try_first_pass
auth   sufficient pam_rootok.so

auth   required   pam_succed_if.so user=honeypunch quiet

1번 항목은 honeypunch 계정에 대해서 인증 성공 여부 결정

2번 항목은 root계정 확인 후 honeypunch 계정인지 확인

순서에 따라 다른 결과를 불러올 수 있다.

즉, 1번 항목은 root 계정으로 su를 진행해도 통과가 되지 않는다 ⇒ required 후 sufficient의 module_name이 try_first_pass 이므로 처음에 넣은 비밀번호로 인증을 한번 더 수행

⇒ 즉, root 계정 이여도 honeypunch의 비밀번호로 인증을 수행

2번 항목은 root 계정인지 확인 후 honeypunch 계정인지 확인

⇒ root 계정이 아니어도 sufficient control flag로 인하여 인증 실패여도 다음 인증 모듈 실행

⇒ 계정 확인 가능

결론

  1. PAM은 기존의 응용프로그램의 인증 과정에서 벗어나고자 새로운 모듈 사용
  2. PAM 사용 시 /etc/passwd 접근을 하지 않고 인증 가능
  3. PAM 인증 설정 시 Control Flag와 순서에 따라 기능이 완전히 달라질 수 있음

출처

https://www.igloo.co.kr/security-information/리눅스-pam-모듈의-이해/