공부한 내용 정리하는 공간입니다.
틀린 내용이 있을 수 있습니다.
모든 지적, 첨언 환영합니다.
PAM (Pluggable Authentication Modules)
리눅스 및 유닉스에서 인증을 관리하는 모듈화된 시스템
다양한 인증 방식을 통합적으로 관리
중앙 집중형 인증 시스템
PAM 설정 파일 안에 적힌 모듈 파일은 해당되는 인증 정책 설정 파일의 정책을 따름
>PAM과 관련된 라이브러리 : /lib64/security
>라이브러리 안에 모듈 파일 존재
/etc/pam.d
PAM을 이용하는 서비스 디렉터리
여러가지 서비스별 PAM 설정 파일 존재
첫 줄부터 순서대로 모듈 실행
| PAM 설정 파일 구조 | |||
| type | control | module name | module arquments |
type
Account (계정 확인 정책) : 사용자 계정 확인
>접근 권한, 계정 활성화/비활성화 여부, 패스워드 만료 여부, 접속 시간 확인 등
Auth (비밀번호 확인 정책) : 패스워드 유효성 확인
>패스워드 진위 여부 확인 등
Password (패스워드 정책) : 패스워드 복잡도 등
session : 로그인/로그아웃 시 수행할 작업
control
PAM이 해야 할 일
module의 결과값(True/False)을 받아서 수행
| required (필수) | 인증 성공 | 다음 모듈 실행, 다른 모듈이 False가 아니면 최종 성공 |
| 인증 실패 | 다음 모듈 실행, 다른 모듈 실행 후 최종 결과를 실패로 반환 | |
| requisite (필요) | 인증 성공 | 다음 모듈 실행 |
| 인증 실패 | 즉시 최종 결과를 실패로 반환 (다른 인증 실행 X) | |
| sufficient (충분) | 인증 성공 | 즉시 최종 결과를 성공으로 반환 (다른 인증 실행 X) |
| 인증 실패 | 다음 모듈 실행 | |
| optional | 최종 결과에 반영되지 않음 |
module name
사용하는 모듈명
절대경로나 /lib/security에 있는 모듈명
module arguments
모듈이 사용하는 인수
여러 인수를 사용하는 경우에는 공백으로 구분
ex1) root로 콘솔 로그인 금지 설정
cd /etc/pam.d
cat gdm-password
/etc/pam.d/gdm-password 첫 줄에 내용 추가
>gdm(gnome disply manager)에서 사용자 로그인 인증을 관리하는 PAM 설정 파일
>gnome : linux GUI
auth required pam_succed_if.so uid >= 1000
패스워드 유효성을 확인하는 정책
모듈은 uid가 1000 이상 (일반 사용자) 일 경우에 True를 반환
uid가 1000 미만 (root, 시스템 계정) 일 경우에 False를 반환
>pam_succed_if.so : 사용자의 특정 조건 (/etc/passwd, /etc/group 등) 을 검사
control이 required이기 때문에 False가 반환되면 이후 모듈을 진행하지만 최종 결과는 인증 실패로 반환됨
설정 이유 : 공격자가 root 계정 정보만 알면 접속이 가능하기 때문
>금지하면 root 계정 정보와 일반 사용자의 계정 정보도 알아내서 '일반 사용자 로그인>root 로그인'으로 두 단계를 거쳐야하기 때문에 보다 안전
ex2) 명령어 su 사용 시 wheel 그룹 멤버는 패스워드 없이 로그인
cd /etc/pam.d
cat su
/etc/pam.d/su 첫 줄에 내용 추가
auth sufficient pam_wheel.so trust use_uid
패스워드 유효성을 확인하는 정책
모듈은 su 명령을 실행한 사용자의 UID가 wheel 그룹에 속해 있을 경우에 추가적인 비밀번호 입력 없이 True를 반환
su 명령을 실행한 사용자 의 UID가 wheel 그룹에 속해 있지 않을 경우에 False를 반환
>pam_wheel.so : 사용자의 그룹 (/etc/group) 을 검사
control이 sufficient이기 때문에 True가 반환되면 즉시 최종 결과를 인증 성공으로 반환
False가 반환되면 다음 모듈 실행
ex3) 원격 접속 사용 시간 제한
nano /etc/security/time.conf
/etc/security/time.conf에 내용 추가
>/etc/security/time.conf : 사용자 인증 제한 시간 지정
>제한 설정 저장
sshd; *; gildong; !Wd0930-1730
sshd; *; root; !Wd0930-1730
gildong, root는 주중 09:30~17:30에는 SSH 로그인을 할 수 없음
cd /etc/pam.d
cat sshd
/etc/pam.d/sshd 첫 줄에 내용 추가
account required pam_time.so
사용자 계정을 확인하는 정책
모듈은 /etc/security/time.conf에서 정의한 제한 설정을 확인하여 True/False를 반환
>pam_time.so : etc/security/time.conf 검사
control이 required이기 때문에 False가 반환되면 이후 모듈을 진행하지만 최종 결과는 인증 실패로 반환됨