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]
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 을 사용하는것을 권고한다.
※ PAM (Pluggable Authentication Module: 착탈형 인증 모듈) : 사용자를 인증하고 그 사용자의 서비스에 대한 액세스를 제어하는 모듈화된 방법
위치는 /etc/pam.d 에 해당되며, 해당 폴더 내의 설정파일을 잘못 수정할 경우 그 어떤 계정으로도 접속이 불가능 하도록 되기 떄문에 신중하게 수정이 필요한 부분이기도 하다.
각 서비스 업무 구분 단위로 파일이 존재 하며, 각 서비스 별로 관리하고자 하는 인증 단계를 추가로 설정할수 있다.
기본적으로 시스템에서 Major로 관리하는 파일은 system-auth 파일과, password-auth 파일이다.
※ 그 외의 서비스 파일들은 기본적으로 password-auth 파일의 설정을 include 하도록 되어있다.(6버전 이상의 경우)
1. PAM의 기본구조
[type] [control] [module-path] [module-arguments]
| type | PAM에 어떤 타입의 인증이
사용될 것인지를 알려줌 같은 타입의 모듈은 쌓일 수 있고, 사용자에 인증되기 위한 다중 요구사항을 만족하도록 요청 | |
| 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 을 사용하는것을 권고한다.
댓글
댓글 쓰기