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명령어 권한이 없어 실패함.
'SERVER > ubuntu' 카테고리의 다른 글
[리눅스시스템 보안]웹서버 구축 및 취약점을 통한 해킹2 (0) | 2024.07.06 |
---|---|
[리눅스시스템 보안]웹서버 구축 및 취약점을 통한 해킹 (0) | 2024.06.30 |
[리눅스시스템보안]방화벽 (0) | 2024.06.23 |
[리눅스시스템보안]사용자계정 (0) | 2024.06.16 |
[리눅스 시스템 보안] GRUB (0) | 2024.06.16 |