LINUX PAM 설정해 보자

리눅스 시스템에서 OS 가 기동된 이후에 서버에 유저가 접속을 시도 할때 인증을 하도록 되어있는데, 바로 이 인증을 관활하는 것이 PAM 이다.

※ PAM (Pluggable Authentication Module: 착탈형 인증 모듈) : 사용자를 인증하고 그 사용자의 서비스에 대한 액세스를 제어하는 모듈화된 방법

위치는 /etc/pam.d 에 해당되며, 해당 폴더 내의 설정파일을 잘못 수정할 경우 그 어떤 계정으로도 접속이 불가능 하도록 되기 떄문에 신중하게 수정이 필요한 부분이기도 하다.

각 서비스 업무 구분 단위로 파일이 존재 하며, 각 서비스 별로 관리하고자 하는 인증 단계를 추가로 설정할수 있다.
기본적으로 시스템에서 Major로 관리하는 파일은 system-auth 파일과, password-auth 파일이다.

※ 그 외의 서비스 파일들은 기본적으로 password-auth 파일의 설정을 include 하도록 되어있다.(6버전 이상의 경우)

1. PAM의 기본구조

[type]   [control]   [module-path]   [module-arguments]


typePAM에 어떤 타입의 인증이 사용될 것인지를 알려줌
같은 타입의 모듈은 쌓일 수 있고, 사용자에 인증되기 위한 다중 요구사항을 만족하도록 요청
 account계정은 사용자가 해당 서비스에 접근이 허용되었는지, 패스워드가 기간이 만료가 되었는지를 결정
auth주로 패스워드를 통하지만 생체인증과 같은 보다 정교한 방법을 통해서 사용자가 자신이 주장하는 사용자가 맞는지를 결정
password패스워드는 사용자가 그들의 인증을 변경하도록 어떤 방법을 제공
session사용자가 인증 받기 전후에 해야 할 것, 사용자의 홈 디렉토리를 마운트/언마운트, 로그인/로그아웃 서비스를 제한하는 등의 포함
control통제를 담당하는 부분으로 PAM에 무엇을 해야 할 지를 알려줌
 requisite이 모듈을 이용하는 인증이 실패할 경우, 즉시 인증을 거부
required인증이 거부되기 전에 비록 PAM이 이 서비스에 등록된 다른 모든 모듈들을 요구함에도 불구하고 실패할 경우 인증을 거부
sufficient비록 이전에 요청되어진 모듈이 실패하더라도 이 모듈에 의해서 인증이 성공할 경우, PAM은 인증을 승인
optional이 모듈이 서비스에 대한 응용프로그램의 성공/실패에 중요하지 않음
module-path모듈경로는 PAM에게 어떤 모듈을 사용할지 경로를 표시함
절대 경로가 아닌경우의 대부분 PAM모듈은 /lib/security 위치
module-argument모듈-인수는 모듈에게 전달되는 인수를 나타냄
각각의 모듈은 각각의 인수를 가지고 있음


2. PAM 관리(linux 7)

pam에서 설정 관리하는 module에 대해서 일일이 확인하며 설명하기에는 내용도 많고 관리 차원에서 힘들기 때문에 보통은 수정을 하지 않고 사용하는것을 권고한다.

#%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 [success=1 default=ignore] pam_succeed_if.so user in root:admin
※root, admin 계정에 대해서는 패스워드를 아무리 많이 틀려도 계정 lock을 걸지 않음 다른 계정을 추가하고자 싶을때는 root:admin:username 과같이 추가하면 된다.
auth required pam_faillock.so preauth silent audit deny=4 unlock_time=1800
※유저의 계정이 패스워드가 4번 틀릴경우 1800초 동안 계정의 접근을 막음
auth sufficient pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=4 unlock_time=1800
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so

account required pam_faillock.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 enforce_for_root try_first_pass local_users_only retry=3 authtok_type=
※패스워드의 복잡도를 나타낸다, /etc/security/pwquality.conf 파일의 설정을 따라간다.
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=2
※패스워드의 암호화 타입 및 재활용 기억 횟수를 나타낸다.
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

기본적으로 5,6 버전과 7버전에서의 차이는 인증 모듈을 pam_tally를 사용하는지 pam_faillock을 사용하는지가 다를 것이다.

pam_tally 에서의 계정 실패에 따른 lock 발생시
"pam_tally -r" 명령어를 수행하면 lock 을 해제 할수 있다.
pam_faillock 환경에서의 lock 발생시에는
" faillock --user USERNAME --reset " 또는 " fail --reset " 으로 lock을 해제할수 있다.

패스워드의 복잡도를 나타내는 모듈또한 5,6 버전에서는 pam_cracklib.so를 사용하는데,  7버전에서는 pam_pwquality.so 모듈을 사용한다.

pam_cracklib.so 의 경우 system-auth 파일에
password requisite pam_cracklib.so try_first_pass retry=3 lcredit=-1 dcredit=-1 ocredit=-1
과 같이 설정하여 사용할수 있다.
lcredit=N : 최대 포함하는 글자수 (0보다 작을 경우 최소포함하는 글자수)
dcredit=N : 최대 포함하는 숫자수 (0보다 작을 경우 최소포함하는 숫자수)
ocredit=N :  최대 포함하는 특수문자수 (0보다 작을 경우 최소포함하는 특수문자수)
등 기타 설정을 확인하고 싶다면 man pam_cracklib를 통해 설정 옵션을 확인할수 있다.

pam_pwquality.so 모듈의 경우 기본적으로 해당 옵션을 pam_cracklib.so  처럼 표현 할수도 있지만, /etc/security/pwquality.conf 파일에 수정하여 동일한 효과를 낼수도 있다.


7버전에서 pam_tally 또는 pam_tally2, pam_cracklib.so를 사용하여도 무방하다.
(/lib/security에 모듈이 모두 존재하기 때문)
하지만 더 진화된 모듈인 faillock 과 pwquality 을 사용하는것을 권고한다.






댓글

가장 많이 본 글