Wisdom’s Cloud
[Linux] [CentOS] 패스워드 정책 설정 본문
이번 시간에는 패스워드의 사용 기간과 복잡도, 임계값을 설정해보자.
1. 패스워드 사용 기간 설정
패스워드 사용 기간은 아래와 같이 /etc/login.defs 파일에서 설정할 수 있다.
- PASS_MAX_DAYS: 패스워드를 사용할 수 있는 최대 일수
- PASS_MIN_DAYS: 패스워드 변경 사이에 허용되는 최소 일수
- PASS_MIN_LEN: 패스워드 최소 길이
- PASS_WARN_AGE: 패스워드가 만료되기 전에 경고하는 일수
테스트 계정을 생성해서 확인해보면, 변경한 설정값들은 기존 계정에는 영향을 미치지 않고 생성한 계정에만 적용되는 것을 볼 수 있다.
따라서 기존 계정의 패스워드 사용 기간을 변경하려면 아래의 옵션과 함께 chage 명령어를 사용하면 된다.
변경한 내용은 -l 옵션을 통해 확인할 수 있다.
- -M: PASS_MAX_DAYS
- -m: PASS_MIN_DAYS
- -W: PASS_WARN_AGE
2. 패스워드 복잡도 설정
패스워드 복잡도는 아래와 같이 /etc/security/pwquality.conf 파일에서 설정할 수 있다.
마이너스 값은 각 항목의 최소 수를 의미한다.
- difok: 이전 패스워드에는 없고 새 패스워드에만 있는 문자 수
- minlen: 패스워드 최소 길이
- dcredit: 패스워드에 포함된 숫자의 최대 수
- ucredit: 패스워드에 포함된 대문자의 최대 수
- lcredit: 패스워드에 포함된 소문자의 최대 수
- ocredit: 패스워드에 포함된 특수문자의 최대 수
- minclass: 패스워드에 허용되는 문자 타입의 최소 수
- maxrepeat: 패스워드에 허용되는 연속된 같은 문자의 최대 수
- maxclassrepeat: 패스워드에 허용되는 같은 문자 타입의 연속된 문자의 최대 수
- gecoscheck: /etc/passwd 파일의 설명 필드에 새 패스워드가 있는지 검사 (0이 아닐 경우 검사)
- dictpath: 패스워드 사전의 경로 (기본값은 cracklib)
테스트 계정의 패스워드를 재설정해보면, 패스워드 복잡도가 설정한대로 적용된 것을 확인할 수 있다.
그렇다면 패스워드 최소 길이는 /etc/login.defs 파일과 /etc/security/pwquality.conf 파일 둘 다 설정할 수 있는데, 어떤 구성 파일이 우선시 될까?
앞에서 확인한대로 login.defs에서 변경한 설정은 새로 생성된 계정에만 적용이 된다.
따라서 pwquality.conf에서 설정하지 않으면 login.defs가 적용되지만, 둘 다 설정되어 있으면 pwquality.conf가 적용된다.
login.defs에서는 5, pwquality.conf에서는 10으로 설정해서 확인해보면 pwquality.conf가 우선시되는 것을 확인할 수 있다.
3. 패스워드 임계값 설정
패스워드 임계값을 설정하기 위해 사용되는 PAM에 대해 간략하게 알아보고 가자.
PAM(Pluggable Authentication Module)이란?
PAM은 리눅스 시스템에서 사용하는 착탈형 인증 모듈로, 응용 프로그램에 대한 사용자의 사용 권한을 제어하는 모듈이다.
즉, 시스템에 공통적인 인증 방법을 제공하기 때문에 응용 프로그램이 직접 패스워드 파일을 읽지 않고, PAM에게 요청하여 해당 인증에 대한 결과를 전달 받게 된다.
PAM 설정 파일은 /etc/pam.d 디렉터리에 있다.
이전에는 system-auth 파일에서 계정에 대한 임계값 설정을 일괄 관리하였으나, 현재는 system-auth 파일과 passowrd-auth 파일로 분리하여 관리하기 때문에 두 곳에서 설정을 할 수 있다.
system-auth 파일에 설정할 경우 콘솔을 통한 로그인 및 su 전환에 대한 임계값 설정이 적용되고, password-auth 파일에 설정할 경우 GUI를 통한 로그인 및 ssh 원격 접속에 대한 임계값 설정이 적용된다.
따라서 응용 프로그램별로 인증에 대한 모듈 참조 시 어떤 파일을 참조하느냐의 차이이기 때문에 두 곳에 설정하는 것을 권장한다.
PAM 설정 파일 형태는 아래와 같다.
module_interface control_flag module_name 및 module_arguments
- module_interface는 모듈들이 수행할 수 있는 인증 작업 유형으로, 4가지 모듈 인터페이스를 제공한다.
- auth: 사용자를 인증
- account: 액세스가 허용되는지 확인
- password: 사용자 암호를 변경
- session: 사용자 세션을 구성하고 관리
- control_flag는 모듈들의 인증 결과에 따라 어떻게 동작할지를 결정해준다.
- required: 인증 결과가 실패일 경우, 인증 종료
- requisite: 인증 결과와 관계없이 다음 인증 실행
- sufficient: 인증 결과가 성공일 경우, 인증 종료
- optional: 인증 결과가 무시됨
- include: 다른 PAM 설정 파일 호출
- module_name는 사용할 모듈 이름이고, module_arguments는 해당 모듈이 사용할 인수이다. PAM 모듈은 /lib64/security 디렉터리에서 확인할 수 있으며, 앞으로 사용할 모듈들만 살펴보자.
- pam_tally2.so: 실패한 로그인 시도 횟수를 기준으로 계정을 잠그는 모듈 (CentOS 8부터는 pam_tally2.so 모듈이 더이상 사용되지 않으므로 pam_faillock.so 모듈을 사용해야 함)
- pam_pwhistory.so: 패스워드 변경 이력을 기록하여 패스워드 재사용을 방지하는 모듈
PAM에 대해 알아봤으니 이제 PAM을 사용하여 로그인 실패 시 잠금 설정과 패스워드 재사용 금지 설정을 해보자.
3-1) 로그인 실패 시 잠금 설정
/etc/pam.d/system-auth 파일과 /etc/pam.d/password-auth 파일에 아래와 같이 pam_tally2.so 모듈을 추가해준다.
pam_tally2.so 모듈의 인수는 다음과 같다.
- deny: n회 로그인 실패 시 계정을 잠금
- unlock_time: 계정이 잠긴 후 n초가 지나면 자동으로 계정 잠김 해제
- no_magic_root: root는 잠금 설정을 적용하지 않음
- reset: 로그인 성공 시 실패한 횟수 초기화
pam_tally2 명령어를 통해 해당 계정의 실패한 로그인 횟수를 볼 수 있으며, 설정한대로 5번 로그인에 실패하면 lock이 걸리는 것을 확인할 수 있다.
lock이 걸리고 60초 후에 다시 로그인할 수 있으며, 로그인이 성공하면 실패한 로그인 횟수가 초기화되는 것을 확인할 수 있다.
3-2) 패스워드 재사용 금지 설정
/etc/pam.d/system-auth 파일과 /etc/pam.d/password-auth 파일에 아래와 같이 pam_pwhistory.so 모듈을 추가해준다.
pam_pwhistory.so 모듈의 인수는 다음과 같다.
- remember: 패스워드를 /etc/security/opasswd에 기록하여 마지막 n개의 패스워드 재사용을 금지
- use_authtok: 재사용 금지 시 새 패스워드를 이용하도록 요구
새 테스트 계정을 만들어서 패스워드를 3번 변경한 후, 처음 설정한 패스워드로 다시 변경하려고 하면 재사용이 안되는 것을 확인할 수 있다.
[메모]
설정한 내용들을 테스트하면서 알게 되었는데, root는 암호 생성 규칙을 적용하는 사용자이기 때문에 경고 메시지에도 불구하고 자신이나 일반 사용자에 대해 암호를 설정할 수 있다고 한다.
따라서 PAM에서 설정한 패스워드 정책은 일반 계정에만 적용되고, root는 이를 우회하여 패스워드를 변경할 수 있다. 😃
[참고 문서]
https://linux.die.net/man/5/login.defs
https://linux.die.net/man/5/pwquality.conf
https://www.redhat.com/sysadmin/linux-gecos-demystified
https://access.redhat.com/solutions/656833
https://atl.kr/dokuwiki/doku.php/%EB%B3%B4%EC%95%88%EC%B7%A8%EC%95%BD%EC%A0%90_%EC%A0%90%EA%B2%80
'LINUX > Advanced' 카테고리의 다른 글
[Linux] [CentOS] Jumbo Frame (0) | 2022.09.18 |
---|---|
[Linux] [CentOS] 보안 설정 (0) | 2022.09.16 |
[Linux] [CentOS] YUM Repository (0) | 2022.09.09 |
[Linux] [CentOS] swap (0) | 2022.09.08 |
[Linux] [CentOS] LVM(2) (0) | 2022.09.07 |