And Brain said,
PAM, 리눅스 인증(Authentication)의 최전선 본문
PAM?
PAM(Pluggable Authentication Modules)은 리눅스 및 유닉스 계열 운영체제에서 인증(Authentication)을 모듈화하여 관리하는 프레임워크로 시스템에서 인증을 유연하게 관리할 수 있도록 설계되었습니다. PAM을 활용하면 애플리케이션을 직접 수정하지 않고도 비밀번호 인증, 2FA(이중 인증), 생체 인식, LDAP 인증 등을 손쉽게 적용할 수 있습니다.
PAM의 동작 원리
PAM은 리눅스 시스템 내에서 인증 요청이 발생할 때 이를 처리하게 됩니다. 사용자가 로그인하거나 특정 시스템 리소스에 접근할 때, PAM이 어떻게 동작하는지 자세히 살펴보겠습니다.
PAM 인증 흐름
사용자가 특정 서비스(예: sshd, sudo, su, gdm)에 접근을 시도합니다.
해당 서비스는 PAM 라이브러리(libpam API)를 호출하여 인증 요청을 전달합니다.
PAM은 /etc/pam.d/ 디렉터리 또는 /etc/pam.conf 파일에서 해당 서비스에 적용될 인증 정책을 검색합니다.
정의된 인증 정책에 따라, 여러 PAM 모듈(pam_unix.so, pam_faillock.so 등)이 차례로 실행됩니다.
각 모듈이 실행되면서, 사용자 입력(비밀번호, 인증 토큰 등)을 검증하고 성공(Success) 또는 실패(Fail) 여부를 반환합니다.
PAM은 모든 모듈의 결과를 취합하여 최종적으로 인증 성공 또는 실패를 결정합니다.
서비스는 PAM의 인증 결과를 기반으로 사용자의 접근을 허용하거나 차단합니다.
PAM이 적용되는 주요 서비스
PAM은 다양한 시스템 서비스와 연동되며, 대표적인 서비스는 다음과 같습니다.
sshd | 원격 로그인(SSH) 인증을 처리 |
sudo | 관리자 권한 실행 시 사용자 인증을 수행 |
su | 다른 사용자 계정으로 전환할 때 인증 적용 |
gdm, xdm | GUI 환경에서 로그인할 때 인증 적용 |
passwd | 비밀번호 변경 요청 시 적용 |
login | 콘솔 로그인 시 인증 수행 |
PAM 인증 흐름 예시 (SSH 로그인 시)
사용자가 SSH를 통해 서버에 접속할 때, PAM이 어떻게 동작하는지 단계별로 살펴보겠습니다.
사용자가 SSH 클라이언트에서 로그인 요청 (ssh user@server)을 보냅니다.
sshd 서비스는 PAM을 호출하여 인증을 진행합니다.
/etc/pam.d/sshd 파일을 참조하여 PAM 정책을 로드합니다.
auth 모듈(pam_unix.so, pam_faillock.so 등)을 실행하여 사용자 인증을 수행합니다.
인증이 성공하면, session 모듈(pam_limits.so 등)이 실행되어 사용자 환경을 설정합니다.
최종적으로 SSH 접속이 허용됩니다.
PAM 설정 파일 구조
PAM의 설정 파일은 /etc/pam.d/ 디렉터리에 있으며, 각 서비스별로 존재합니다. 시스템의 인증 방식은 이 설정 파일에 정의된 규칙을 기반으로 결정됩니다.
📂 PAM 설정 파일 구조 예시
/etc/pam.d/
├── system-auth # 시스템 공통 인증 설정
├── password-auth # 원격 인증 설정 (SSH 등)
├── sshd # SSH 인증 설정
├── sudo # sudo 명령어 인증 설정
├── su # 사용자 계정 변경 인증 설정
PAM 설정 파일 형식
각 설정 파일은 다음과 같은 형식으로 작성됩니다.
<모듈 유형> <제어 플래그> <모듈 경로> <모듈 옵션>
ex) /etc/pam.d/sshd
auth required pam_unix.so nullok
필드 | 설명 |
auth | 사용자 인증을 처리하는 모듈 |
required | 실패하면 전체 인증이 실패하지만, 다음 모듈도 실행 |
pam_unix.so | UNIX 기본 인증 모듈 (/etc/passwd, /etc/shadow 사용) |
nullok | 비밀번호가 없는 계정도 허용 |
system-auth와 password-auth
- system-auth: 시스템 전반에서 공통적으로 사용되는 인증 정책을 포함
- password-auth: SSH 등 원격 로그인 시 적용되는 인증 정책을 포함
sshd, sudo 등 대부분의 서비스는 개별 설정 파일에서 system-auth 또는 password-auth를 include하는 방식으로 공통 인증 정책을 사용합니다.
# /etc/pam.d/sshd
auth include system-auth
이 설정은 /etc/pam.d/system-auth에 정의된 모든 인증 규칙을 sshd에서도 사용하도록 합니다.
system-auth 설정 파일 분석
system-auth는 시스템의 공통 인증 정책을 정의하며, 여러 서비스에서 이를 include하여 사용합니다.
system-auth 설정 파일 예시
# /etc/pam.d/system-auth
auth required pam_env.so
auth required pam_unix.so try_first_pass nullok
auth optional pam_faillock.so preauth
auth required pam_faillock.so authfail
auth required pam_deny.so
account required pam_unix.so
account required pam_permit.so
account required pam_faillock.so
password required pam_unix.so sha512 shadow try_first_pass use_authtok
password optional pam_permit.so
session required pam_limits.so
session required pam_unix.so
session optional pam_mkhomedir.so skel=/etc/skel umask=077
PAM의 주요 모듈별 역할 설명
PAM 주요 모듈
PAM에서 가장 많이 사용되는 모듈들의 역할을 정리하면 다음과 같습니다.
(**운영체제별로 조금은 상이할 수 있습니다**)
pam_unix.so | 기본적인 UNIX 계정 인증 (비밀번호 확인, /etc/passwd, /etc/shadow 사용) |
pam_faillock.so | 로그인 실패 횟수를 기록하고 일정 횟수 초과 시 계정 잠금 |
pam_tally2.so | pam_faillock과 유사하지만 tally2 파일로 관리됨 |
pam_env.so | 환경 변수를 설정하는 모듈 (/etc/security/pam_env.conf 참고) |
pam_deny.so | 인증을 무조건 거부하는 모듈 (보안 강화 용도) |
pam_permit.so | 인증을 무조건 허용하는 모듈 (일반적으로 예외 처리에 사용) |
pam_securetty.so | root 계정이 특정 TTY에서만 로그인하도록 제한 |
pam_wheel.so | wheel 그룹에 속한 사용자만 su를 통해 root로 전환 가능 |
pam_mkhomedir.so | 홈 디렉터리가 없는 사용자가 로그인할 때 자동 생성 |
pam_limits.so | /etc/security/limits.conf 설정을 기반으로 자원 제한 적용 |
pam_exec.so | 인증 중 특정 스크립트 또는 바이너리를 실행 |
운영체제별로 PAM 설정 명령어가 차이가 있으니 자신의 운영체제에 맞게 사용해주시면 됩니다.
CentOS / RHEL 계열 (8 이상) authselect가 기본 유틸리티로 사용됩니다.
RHEL 계열 7 이하에서는 authconfig를 사용합니다.
Ubuntu / Debian 계열
Ubuntu 및 Debian 계열에서는 pam-auth-update를 사용합니다.
SUSE / openSUSE
SUSE 계열에서는 pam-config 명령어를 사용하여 PAM 구성을 변경합니다.
Thanks for watching, Have a nice day.
'IT > 보안' 카테고리의 다른 글
AWS로 배우는 IAM, 넌 지나갈 수 없다. (+Spring boot 연동 예제) (1) | 2025.02.12 |
---|---|
버퍼 오버플로우(Buffer Overflow) 공격, 원리와 그 방어 (1) | 2025.02.11 |
NFS(Network File System)의 개념과 보안문제 (0) | 2025.02.11 |
DoS/DDoS(Denial of Service) 공격, 원리와 그 방어 (0) | 2025.02.10 |
FTP(File Transfer Protocol)의 개념과 보안 문제 (0) | 2025.02.10 |