PAM
PAM은 리눅스 시스템에서 사용하는 '인증 모듈(Pluggable Authentication Modules)'로써 응용 프로그램(서비스)에 대한 사용자의 사용 권한을 제어하는 모듈이다.
IGLOO
사용 예)
* 로그인 시 암호를 두 개 입력하도록 하는 경우
* telnet 같은 경우는 따로 설정 파일이 없는데 이에 대한 제어를 하기 위한 경우
* 사용자에 대한 접근제어는 가능하지 않다.(방화벽에서는 사용자에 대해 차단 할 수 없음)
* 암호 정책 설정 할 때
PAM 체계
PAM aware App.(ex:su, telnet)
* PAM library(ex:)
* PAM File(ex:)
* PAM Module
* /bin/su
* /lib/libpam.so.0
* /etc/pam.d/su
* /lib/security/\*
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
>
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
>
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
>
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
PAM aware APP에서 PAM library를 끌어다가 써야한다.(so는 동적 라이브러리를 가르킨다.)
ldd /usr/bin/su (동적 라이브러리 확인)
모듈이 PAM 라이브러리를 끌어다 쓰는 형식으로 활용될 수도 있다.
cat /etc/pam.d/su (프로그램이 실행 될 때 이 안에 있는 설정 파일을 읽어들여서 적용시킴)
PAM File 안에는 PAM Moudule을 끌어다 쓰는 것을 확인 할 수 있다.
PAM library는 C 언어로 작성되어있는데 끌어다 쓸 수 있는 형식으로 작성되어 있다.
PAM Package
|-|-|:-:|-|
|type |control|module-path|module-arguments|
■type
auth
ID/PASS 인증을 한다.
Account
액세스가 허용된 사용자인지 확인한다. LDAP 같은 경우는 서버에서 제공하는 ID/PASS를 가지고 확인
Password
사용자 암호를 변경하는데 사용한다.
session
세션 로그
마운트 해서 쓰는 경우 책임지게 된다
auth: su 명령어 같은 경우 스위칭 되기 전 사용자를 확인한다. 원격에서 들어오는 경우 확인
acconunt: root 사용자로 스위칭 하는 경우 실제로 사용자가 있는지 확인한다.
requisite(필수)
성공하는 경우 -> 다음라인으로 넘어감
실패하는 경우 -> 반환 메시지 출력하고 스위칭 되지 않는다.
required(필요)
성공하는 경우 -> 다음라인으로 넘어감
실패하는 경우 -> 다음라인을 읽기는 하지만 최종적으로 실패하게 된다.
requisite 나 requred나 결과가 실패하게 되면 인증에 실패하게 되는데 프로그램에 따라 범용적으로 사용할 수 있도록 하기 위해서 설정을 다르게 하도록 한 것 같다.
sufficient(충분)
성공하는 경우 -> required가 성공한 경우는 인증 성공
실패하는 경우 -> 실패하면 다음라인으로 넘어감
optional(옵션)
다른 모듈의 성공/실패가 없으면 모듈의 결과가 반영
다른 모듈의 성공/실패가 있으면 모듈은 무시됨
include(포함)
매개 변수와 일치하는 구성 파일의 모든 행을 가져와서 모듈에 인수로 추가(auth라고 되어있는 부분만 가져옴)
라이브러리 사용
/lib/security 밑에 있는 라이브러리는 상대 경로로 써주어도 되지만 다른 경로에 있으면 절대경로로 사용해야 한다.
이러한 라이브러리는 인자를 가질 수 있다.
telnet은 내부적으로 login을 사용하고 있다. login은 PAM 설정 파일에 설정이 되어있으므로 결과적으로 telnet은 PAM에 의해 인증절차를 사용하게 된다.
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
/ pam_securetty.so 모듈이 지정해 놓은 보안 규칙을 만족해야만 로그인이 허용된다는 설정이다. 이 모듈은 /etc/securetty 파일에서 지정되어 있는 tty에서 요청한 슈퍼유저만 로그인을 허용한다. /
auth include system-auth
account required pam_nologin.so
account include system-auth
password include system-auth
session required pam_selinux.so close
session optional pam_keyinit.so force revoke
session required pam_loginuid.so
session include system-auth
session optional pam_console.so
session required pam_selinux.so open
● session required pam_unix.so
● session => lastlog, last 등 로그를 남기도록 함
other
프로그램이 pam을 쓰기로 했는데 파일이 없거나 모듈이 없는 경우 deny가 된다.
[참고] man 명령어를 export LANG=KR_ko.UTF-8 인 경우 옛날 페이지가 보여지게 된다.
pam 라이브러리 보기
들으면서 정리
/etc/pam.d/remote
콘솔 케이블을 연결할 때 사용한다.
console
keyboard가 없는 경우 노트북에 콘솔케이블을 연결하게 된다.
console 설정을 해야한다. (ex: putty, xshell) port가 여러개 있기 때문에 연결 설정을 해주어야 한다.
/etc/pam.d/
크레딧을 받게 되면 암호의 길이를 줄일 수 있다. 기본값은 1이다. credit은 credit=N(N => -1, -2 ...)와 같이 설정할 수 있다. 패스워드를 최소 12개의 길이를 설정하게 되었을 때 3개의 크레딧이 있으면 9글자만 설정해도 사용할 수 있도록 하게된다.
->
*/etc/pam.d/pwquality.so
기존 cracklib에 대한 인자 값을 바꾸도록 설정해야 했지만 qwquality.so는 /etc/security/qwquality.conf에서 바꿀 수 있도록 하였다.
qwquality는 cracklib을 감싸고 있다.
PAM 파일의 모듈의 기능을 찾는 법을 알아보자
1) /etc/pam.d file에 대한 내용 보기
2) man 정의된 내용 확인하기
3) 실제 어떤 PAM 파일에서 사용되는지 확인하기
PAM(/llib64/security/pam.env.so)
system-auth에서 사용되는 것을 확인하였다.
GNOME-Display manager
4) PAM 파일
daemon은 데몬이 다시 재기동 될 때 PAM 파일이 읽혀지게 된다.
/etc/pam.d/sshd
sshd의 사용자를 제어하는 방법은 2개의 파일이 있는데 하나는 pam 파일에 대한 것이고 하나는 sshd의 파일에 대한 것이다.
(주의) pam 파일은 여러 프로그램들이 참조하기 때문에 설정하는 것을 주의해야한다.
(에러제어) /var/log/messages, /var/log/secure