ISMS 등 보안 인증 심사를 진행하다보면 서버의 계정 정책에 대한 설정을 수행할 때가 있다.
리눅스 기반 서버의 계정 정책 설정은 CentOS 6/7 이후로는 대부분 PAM 으로 설정한다. 비밀번호 복잡도 설정, 계정 잠금 설정, 로그인 재시도 설정 등 계정에 관련된 대부분의 설정을 수행할 수 있다.
(Linux) 동일한 비밀번호 재사용 제한 (ISMS-P 2.5.4 비밀번호 관리)
pam_pwhistory 모듈을 활용하여 지난 비밀번호를 기억할지 여부를 설정할 수 있다.
pam_pwhistory: PAM module to remember last passwords
/etc/pam.d/system-auth, /etc/pam.d/password-auth 에 아래와 같이 설정할 수 있다.
해당 모듈이 설정되면 /etc/security/opasswd 내 비밀번호가 기억된다.
password requisite pam_pwhistory.so debug use_authtok remember=2
Shell
•
debug: syslog 에 디버깅 로그를 남긴다.
•
use_authtok: 이전의 password 관련 모듈에서 활용된 비밀번호를 그대로 받아서 해당 모듈을 수행한다. 해당 설정이 되어있지 않다면 해당 모듈에서 다시 비밀번호를 요구할 수 있다.
•
remember=2: 지난 비밀번호 2개를 기억한다.
Scripts
Amazon Linux 2 OS 를 기준으로 해당 설정을 적용하는 자동화 스크립트
단, 스크립트의 멱등성은 보장되지 않는다.
originName=system-auth
backupName=system-auth_20200101-01
mv /etc/pam.d/${originName} /etc/pam.d/${backupName}
# pam_pwquality.so 문자열을 찾은 후 그 다음행에 내용 추가
sed -e 's,\(\.*pam_pwquality.so.*\),\1\npassword requisite pam_pwhistory.so debug use_authtok remember=2,g' /etc/pam.d/${backupName} > /etc/pam.d/${originName}
originName=password-auth
backupName=password-auth_20200101-01
mv /etc/pam.d/${originName} /etc/pam.d/${backupName}
sed -e 's,\(\.*pam_pwquality.so.*\),\1\npassword requisite pam_pwhistory.so debug use_authtok remember=2,g' /etc/pam.d/${backupName} > /etc/pam.d/${originName}
# system-auth 와 password-auth 정책은 동일하게 유지한다.
diff system-auth password-auth
Shell
Test
remember=2 설정으로 현재 비밀번호와 이전 비밀번호가 opasswd 에 저장되어 있다. 즉 신규 비밀번호 설정시 지금 쓰는 것, 그 전에 썼던 것은 사용 불가능 하다. 사용할 경우 아래와 같은 메시지가 뜨면서 실패한다.
$ passwd
Changing password for user bokunn.
Changing password for bokunn.
(current) UNIX password:
New password:
Retype new password:
Password has been already used. Choose another.
Shell
ETC for PAM
•
PAM 설정을 통해서 리눅스 계정에 대한 보안 요구 사항을 만족할 수 있다.
•
/etc/pam.d/* 디렉토리 내 파일들의 내용은 아래와 같은 형식을 가진다.
service type control module-path module-arguments
Shell
•
service: /etc/pam.d/* 디렉토리 내에 있는 파일명. 파일명은 소문자여야 한다.
•
PAM 의 주요 특징은 여러가지 규칙이 누적되어 적용될 수 있다.
Reference