정보보안 - 유닉스 PAM
PAM
- PAM(Pluggable Authentication Module : 탈착형 인증 모듈)
- 개요
- 사용자를 인증
- 서비스에 대한 액세스를 제어하는 라이브러리
- 권한을 부여하는 소프트웨어의 개발과 안전하고 적정한 인증의 개발을 분리
- 로그인, telnet, ftp 등의 프로그램 사용시 PAM 을 이용
- 절차
- 각종 프로그램 (로그인, telnet, ftp 등) 에서 PAM 라이브러리 호출
- PAM 라이브러리에서 사용자 인증, 결과값 전송
- 구성파일
/etc/pam.d
디렉터리 내에 있는 서비스에서 PAM을 사용/etc/pam.d/other
:/etc/pam.d
디렉터리 외부에서 PAM을 사용할 경우
- 기본 구조
cat /etc/pam.d/login
: remote 서비스
type control module-path module-arguments auth required /lib/security/pam_securetty.so account required /lib/security/pam_stack.so service=system-auth password required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth session optional /lib/security/pam_console.so - type : PAM 모듈의 종류
- account : 사용자의 시스템 사용 권한을 확인하는 모듈
- auth : 패스워드 확인 등 실질적인 인증기능을 하는 모듈
- password : 패스워드 설정, 패스워드 확인 모듈
- session : 인증 성공시 세션을 연결시켜 주는 모듈
- control : 모듈 성공/실패에 따른 라이브러리 동작 결정
- requisite : 실패했을 경우 즉시 인증 거부
- required : 인증이 실패하더라도 다음 라인 수행, 최종적으론 인증 실패
- sufficient
- 이전 요청 모듈이 실패하더라도 현재 성공시 PAM 인증승인
- 실패할 경우 다음 라인 수행
- optional : 거의 사용하지 않음 (모듈의 성공/실패와 연관없음)
- include : 모듈이 아닌 PAM 파일의 결과를 사용
- module-path : 실제 모듈 파일 경로
/lib/security/*.so
- module-arguments : 모듈 전달 인수값
- 지원 모듈 목록
- pam_securetty.so
- /etc/securetty 터미널을 사용하는 경우 root 원격 접속 허용
- 허용할 터미널만을 기재
- 원칙 : root 계정은 콘솔로 연결해야 함
- pam_listfile.so
- /etc/pam.d/vsftpd ftp 허용/거부 관련
- pam_nologin.so
- /etc/nologin 파일이 있으면 root 로만 로그인 가능
- pam_deny.so
- pam_cracklib.so
- 사전에 등록된 단어를 이용한 공격(사전공격) 차단을 방지
- pam_wheel.so
/etc/pam.d/su
와 연계하여 사용- root 권한을 얻을 수 있는 그룹
- pam_rootok.so
- UID : 0 인 사용자를 인증하는 모듈
- root 가 암호입력 없이 서비스를 사용하는 것을 지원
- pam_tally.so
- 로그인 시도횟수를 세는 모듈
- pam_limits.so
- 시스템 자원에 대한 사용자 제한을 설정하는 모듈
- pam_securetty.so
- 개요
- PAM 사용 예
- /etc/pam.d/login(remote) 파일 열기
- 한단계 씩 진행
- #PAM-1.0 : 주석절
- auth required pam_securetty.so
- auth : 인증기능 모듈
- pam_securetty.so :
/etc/securetty
에 리스팅되어 있는 터미널을 제외한 나머지는 root 접속 실패
- auth required pam_unix.so nullok
- pam_unix.so :
/etc/passwd
,/etc/shadow
를 이용한 인증 - nullok : null password 허용
- pam_unix.so :
- auth required pam_nologin.so
- pam_nologin.so :
/etc/nologin
파일 여부 체크, 있으면 root 제외한 모든 사용자 접속 차단
- pam_nologin.so :
- account required pam_unix.so
- account : 사용자의 시스템 자원 권한 확인
- pam_unix.so : account 인터페이스를 사용할 경우 유저 계정 활성화여부, 비밀번호 만료여부 등을 확인
- password required pam_cracklib.so retry=3
- pam-cracklib.so : 패스워드 변경 시 취약한 패스워드인지 확인 / 차단
- password required pam_unix.so shadow nullok
- PAM 사용 서비스에서 패스워드 변경 시 shadow, null ok
- /etc/pam.d/login(remote) 파일 열기
- /etc/securetty
- pam_securetty.so 모듈이 사용하는 파일
- 원격 root 접속을 허용할 터미널을 기록
- tty10 : 서버와 연결된 키보드를 통해서 콘솔로 직접 로그인한 터미널
- tty11
- tty9
-
pty/10 : 가상터미널 (원격접속) - telnet, ssh 등. 주석처리 - 불가
-
pty/11 : 주석처리 - 불가
- /etc/pam.d/remote (혹은 login)
- auth required pam_securetty.so
- OS 기종별 root 원격접속 제어
- SunOS
/etc/default/login
: root에 대한 원격접속 등console = /dev/console
: 콘솔에서만 root 접속 가능
- HP-UX
/etc/securetty
console
: 콘솔에서만 root 접속 가능
- AIX
/etc/security/user
rlogin=false
: 콘솔에서만 root 접속 가능
- Linux
/etc/securetty
에서 설정
- SunOS
- pam_tally.so -> pam_tally2.so
- 계정 잠금 임게값 설정
- 5회 초과 시 Password Lock
- 패스워드 공격에 대한 방어
- 무작위/무차별 공격 (Brute force)
- 사전 공격 (Dictionary Attack)
/etc/pam.d/system_auth
파일에 추가auth required pam_tally2.so deny=5 unlock_time=120
;- deny=5 : 5번 실패시 잠금
- unlock_time=120 : 2분간 잠금
/var/log/secure
: 실패로그 저장위치- user1 이 로그인 횟수 5회 초과시 확인 방법
#pam_tally2 -u [계정명]
: 결과값 확인- 결과값 :
user1 6 시간값 IP주소값
- 결과값 :
#pam_tally -u [계정명] -r
: 횟수 리셋
- 계정 잠금 임게값 설정
- OS 별 계정 잠금 임계값 설정
- SunOS
/etc/security/policy.conf
: LOCK_AFTER_RETRIES=YES > 잠금설정/etc/default/login
: RETRIES=5 > 횟수설정
- HP-UX
/tcb/files/auth/system/default
: u_maxtries#5
- AIX
/etc/security/user
: logintries=5
- LINUX
/etc/pam.d/system_auth
auth required /lib/security/pam_tally.so deny=5 unlock_time=120 no_magic_root
: no_magic_root > root 패스워드 잠금 X
- SunOS
- su 명령
/etc/pam.d/su
- auth sufficient pam_rootok.so
- auth include system_auth : 다른 PAM 파일에 대한 결과 사용
- root 가 타 사용자로 변환할 경우 -> 패스워드 확인 X
- 일반사용자가 타 일반사용자 혹은 root 로 변환 -> 패스워드 확인 O
댓글남기기