SERVER/ubuntu

[리눅스시스템보안]PAM으로 사용자 계정 보안

혼자좀비 2024. 6. 23. 17:43

PAM(인증모듈)은 Pluggable Authentication Modules의 약자로 리눅스 시스템의 사용자의 인증을 담당하는 모듈이다.

 

※PAM처리 흐름도

1.로그인시도 >2.구성확인(PAM구성파일)>3.PAM모듈에 사용자 신원 확인 >4.확인 후 로그인 허용

 

 

※PAM의 구성 파일은 모듈타입,ControlFlag,PAM모듈,Module Arguments총 네가지이다.

#모듈 타입 4가지

모듈 설명
authentication module 비밀번호,공개키(public key)를 이용하여 사용자의 신원을 확인하는 모듈
account module 계정만료,시간,특정 서비스 접근 권한등 인증 조건을 검사하는 모듈
password module 비밀번호갱신,비밀번호 복잡도등을 설정하는 모듈
session module 사용자 세션의 시작부터 끝까지 가능한 작업을 정의하는 모듈

 

#Control Flag : PAM모듈이 인증한 결과에 따라 어떠한 동작을 실행하는지 나타낸다.

Control Flag 결과 설명
required 성공 최종인증결과는 무조건 성공한다.
실패 최종인증결과는 무조건 실패한다.
requisite 성공 다음 인증 모듈을 실행한다.
실패 인증 실패 결과 즉시 반환
sufficient 성공 인증 성공 결과를 즉시 반환
실패 다음 인증 모듈을 실행
include(@include) 성공 다른PAM구성 파일을 호출한다.
실패
optional 성공 인증결과에 반영되지 않는다. 그러나 다른 인증 모듈의 결과(성공 또는 실패)가 없다면 모듈 결과를 반환한다.
실패
substack   inlcude와 비슷하지만 인증 결과 값에 따라 동작이 달라진다.

 

#PAM모듈 : PAM모듈 필드는 구성 파일에서 PAM인증 모듈을 선택하는 부분으로 원하는 인증 기능을 선택할수 있다.

(대표적으로 pam_rootok,pam_wheel.so등이 있음)

 

#Module Arguments : 모듈이 갖고있는 설정값을 추가로 지정할때 사용한다.

(대표적으로 Debug가있음)

 

아래와 같이 /etc/pam.d디렉토리의 구성 파일을 확인해보면 su,passwd등 사용자 권한에 대한 인증 파일들이 있다.

k@k-VirtualBox:~$ ls /etc/pam.d/

 

위의 pam.d의 su파일을 열어보면 auth,account,session이 있는데

auth모듈 타입에서 사용자 신원을 확인하고, session부분은 인증을 위한 환경 변수를 확인한다. 공통 pam인증 모듈은 @include common모듈을 통해 모듈 타입별 기본 인증 모듈을 추가한다.

 

※PAM구성 파일의 설명(su파일을 보면 알수 있음)

모듈타입 control Flag PAM모듈 설명
auth sufficient pam_rootok.so 사용자가 root라면 인증에 성공하고, 일반 사용자라면 아래 설정에 따라 인증한다.
session required pam_env.so readenv=1 인증을 위한 환경 변수를 확인(설정파일확인)한다.
session required pam_env.so readenv=1
envfile=/etc/
default/locale
인증을 위한 환경 변수를 확인(설정파일확인)한다.
session optional pam_mail.so nopen 로그인 사용자 메일 관련 정보를 미노출시킨다.
session required pam_limits.so 사용자 접근 가능한 자원인지 확인한다.
@include   common-auth common-auth인증 외부 PAM을 호출한다.
(authentication module 기본 설정)
->일반적인 사용자 인증(비밀번호인증등)을 수행한다.
@include   common-account common-account인증 외부 PAM을 호출한다.
(account module기본 설정)
@include   aommon-session common-session인증 외부 PAM을 호출한다.
(session module기본 설정)

 

실습)

1.관리자 권한으로 사용하기 위한 테스트용 그룹 생성

    k@k-VirtualBox:/etc/pam.d$ sudo groupadd wheel

    (wheel그룹으로 맞춰야함... -> pam_wheel.so모듈로 붙는다..)

 

2.관리자 권한이 없는 테스트용 계정 생성

   k@k-VirtualBox:/etc/pam.d$ sudo useradd -m nopamzombi

  

3.사용자를 wheel 그룹에 포함.

    k@k-VirtualBox:/etc/pam.d$ sudo usermod -aG wheel k

 

4.그룹에 포함되었는지 확인

    root@k-VirtualBox:/etc/pam.d# id k
uid=1000(k) gid=1000(k) 그룹들=1000(k),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),120(lpadmin),131(lxd),132(sambashare),1004(zombiarea),1005(wheel)

    k@k-VirtualBox:/etc/pam.d$ id nopamzombi 
       uid=1003(nopamzombi) gid=1004(nopamzombi) 그룹들=1004(nopamzombi),1002(zombiarea)

 

5.su pam구성 파일 수정

     k@k-VirtualBox:/etc/pam.d$ sudo vim /etc/pam.d/su

     (15번째줄에  auth       required   pam_wheel.so부분 주석 제거)

 

6. sudo -i를 통해 root로 접근 후 passwd명령어로 root비밀번호 변경

 

7.변경 후 su - 로 root로그인,로그인후 nopamzombi로 root권한 접근

 

결론)pam설정에 의해 su명령어 권한이 없어 실패함.