Infra/LINUX

# [Linux] PAM

leehi0110 2023. 3. 24. 19:35
반응형

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

 

[OS] Linux PAM 모듈이란?

PAM(Pluggable Authentication Modules)란 Linux 에서 사용되는 인증 모듈로써, 사용자의 사용 권한(접근, 패스워드 등)을 제어하는 모듈입니다. 저도 업무를 보면서 해당 개념을 처음 접했는데요. PAM을 사용

goddoeun.tistory.com

 

반응형

'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