본문 바로가기

리눅스-기초명령어/보안

PAM

1. PAM(Pluggable Authentication Module)

사용자를 인증하고 그 사용자의 서비스에 대한 접근을 제어하는 모듈화된 방법

 

기본구성

PAM을 이용하는 서비스들은 /etc/pam.d 안에 설정되어있다. 특별히 지정되지 않은 서비스에 대한 인증은 /etc/pam.d/other에서 관리한다.

 

PAM의 설정 파일 구성

-type,

-control,

-module_name,

-module_arguments

 

기본 구조 

 

 

2. type

어떤 종류의 인증이 사용될 것인지를 알려주는 항목

 

type 설명
auth 사용자에게 비밀번호를 요구하고 입력 받은 암호가 맞는지를 확인
account 사용자가 해당 서비스에 접근이 허용되는지 검사하는것으로 계정에 대한 접근 통제 및 계정 정책을 관리하는 모듈
password 비밀번호 변경을 관리 하는 모듈
session 사용자가 인증받기 전/후로 수행해야하는 일을 정의하는 모듈

3. Control 

특정 모듈의 성공과 실패를 어떻게 처리할 것인지를 나타낸다.

 

control 설명
requisite 해당 모듈은 인증을 계속하기 위해 반드시 성공해야 한다. 만약 이 지점에서 실패하면 사용자는 실패에 대한 메시지를 즉시 받는다.
required 해당 모듈은 인증을 계속하기 위해 반드시 성공해야 한다. 
만약 실패하면 사용자는 다른 모든 모듈의 테스트가 끝날때까지 결과를 받지 못한다.
sufficient 실패하면 이 모듈의 결과는 무시된다. 이 모듈이 성공하고 앞선 required 모듈 중 실패가 없으면 성공결과를 반환한다.
optional 일반적으로 최종 인증 결과에 반영되지않음 다른 인증결과에 성공/실패가 없다면 이 모듈의 결과값을 반영 한다.
include 다른 PAM관련 모듈을 불러온다.
substack 다른 PAM 관련 모듈을 불러온다. 서브스택의 동작 결과에 따라 나머지 모듈을 처리하지 않는다.

 

4.  Module Name

 

이 필드는 사용하고자 하는 모듈의 경로와 이름을 지정하는 필드이며 PAM 모듈은 대부분 /lib/security 또는 /etc/pam.d 디렉터리에 위치한다.

 

Name 설명
pam_rootok root 계정인 경우 추가 인증없이 무조건 허용하는 모듈
pam_wheel.so SU 명령어 사용 인증에 사용되며 특정 그룹(wheel)에 대한 인증 제어
pam_succeed_if.so 인수로 주어진 조건에 따라 인증을 제어 하는 모듈
pam_securetty.so root 계정인 경우에만 적용되는 모듈로써 /etc/securetty 파일을 참고하여 해당 파일에 root가 있을 경우 특정 서비스에 대한 root접근을 허용 하는 모듈(root 이외의 계정일 경우 항상 인증 성공값을 반환)

5. Module Arguments

 

모듈-인수는 모듈에게 전달되는 인수를 나타낸다. 각각의 모듈은 각각의 인수를 가지고 있다. 모듈마다 인수가 필요할 수도 필요 없을 수도 있다.

 

Argument 설명
Debug 시스템 로그 파일에 디버그 정보를 남김
No_warn 모듈이 경고 메시지를 보내지 않도록 지정
User_first_pass 사용자에게 password 입력을 요구하지 않도록 지정하는 인수로 이전 모듈에서 입력 받은 password가 없다면 인증 실패 반환
Try_first_pass 이전에 입력받은 password로 인증 시도하며 없다면 사용자에게 입력 요구



6. 인증 과정 설명

[root@rocky1 admin]# vi /etc/pam.d/su

#vi 편집기에서 이부분에 주석을 해제


auth            required        pam_wheel.so use_uid


[root@rocky1 pam.d]# authselect apply-changes
Changes were successfully applied.
[root@rocky1 admin]# su - admin
Last login: Mon May 15 17:31:42 KST 2023 on pts/0

[admin@rocky1 ~]$ id
uid=1000(admin) gid=1024(asdf) groups=1024(asdf)
[admin@rocky1 ~]$ su root
Password:
su: Permission denied  # 암호를 입력해도 접속이 불가



해석 

#%PAM-1.0
auth            required        pam_env.so
auth            sufficient      pam_rootok.so #root가 아니므로 다음 조건 실행
#Un

comment the following line to implicitly trust users in the "wheel" group.
auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.

# 그룹이 wheel인가?
auth           required        pam_wheel.so use_uid #이 조건의 성공/실패  상관 없이 

                                                                           다음 조건 실행
auth            substack        system-auth               # 비밀번호 입력
auth            include           postlogin


# 결과적으로  그룹이 wheel이 아니므로 다른 조건 성공에 상관없이 실패이지만 required를 사용했기에 다음 단계로 진행이 되었고 그 결과 비밀번호가 틀린 것처럼 착각할 수 있다.
에러 메시지로 바로 표시가 되지 않기에 보안상에 도움이 된다.

 

'리눅스-기초명령어 > 보안' 카테고리의 다른 글

authselect  (0) 2023.09.01
selinux  (1) 2023.09.01
방화벽  (0) 2023.09.01