우분투 계정 보안 조치
우분투 환경에서 계정 보안을 강화하기 위해 수행하는 패스워드 복잡성 정책 설정과 계정 잠금(로그인 실패 임계값) 설정 방법입니다.
1. 패스워드 기본 정책 설정(/etc/login.defs)
/etc/login.defs 파일은 계정 생성 시 적용되는 기본 패스워드 정책을 정의한다.
기존 설정 확인
cat /etc/login.defs | egrep -v '^#' | egrep 'PASS_MIN_LEN|PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE'
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
보안 기준에 맞게 정책 변경
sudo sed -i \
's/PASS_MAX_DAYS\s*99999/PASS_MAX_DAYS\t90/g; \
s/PASS_MIN_DAYS\s*0/PASS_MIN_DAYS\t1/g; \
s/#PASS_MIN_LEN/PASS_MIN_LEN\t8/g; \
s/PASS_WARN_AGE\s*7/PASS_WARN_AGE\t7/g;' /etc/login.defs
변경 후 설정 확인
cat /etc/login.defs | egrep -v '^#' | egrep 'PASS_MIN_LEN|PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE'
PASS_MAX_DAYS 90
PASS_MIN_DAYS 1
PASS_WARN_AGE 7
PASS_MIN_LEN 8
- PASS_MAX_DAYS 패스워드 최대 사용 기간
- PASS_MIN_DAYS 패스워드 변경 최소 간격
- PASS_WARN_AGE 만료 전 경고 일수
- PASS_MIN_LEN 최소 패스워드 길이
2. 계정 생성 및 정책 적용 확인
useradd -s /bin/bash devops
chage -l devops
Last password change : May 03, 2023
Password expires : Aug 01, 2023
Password inactive : never
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
- /etc/login.defs 설정이 정상 적용됨을 확인할 수 있다.
3. 패스워드 복잡성 강화(libpam-pwquality)
패키지 설치
sudo apt install -y libpam-pwquality
PAM 패스워드 정책 설정(/etc/pam.d/common-password)
- 기존 설정 확인
cat /etc/pam.d/common-password | egrep -v '^#|^$'
password requisite pam_pwquality.so retry=3
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt
password requisite pam_deny.so
password required pam_permit.so
- root 계정 제외 정책 적용
sudo sed -i \
's/^password\s*\[success=1 default=ignore\].*/password\t[success=1 default=ignore]\tpam_unix.so obscure use_authtok try_first_pass yescrypt nullok ignore_root/' \
/etc/pam.d/common-password
ignore_root 옵션은 root 계정을 패스워드 복잡성 정책에서 제외한다.
- 변경 후 확인
cat /etc/pam.d/common-password | egrep -v '^#|^$'
password requisite pam_pwquality.so retry=3
password [success=1 default=ignore] pam_unix.so obscure use_authtok try_first_pass yescrypt nullok ignore_root
password requisite pam_deny.so
password required pam_permit.so
4. 패스워드 품질 정책 설정(/etc/security/pwquality.conf)
cat <<EOF >> /etc/security/pwquality.conf
# password policy
minlen = 8
minclass = 3
lcredit = 1
dcredit = 1
ocredit = 1
EOF
- minlen 최소 길이
- minclass 문자 유형 최소 개수
- lcredit 소문자 포함
- dcredit 숫자 포함
- ocredit 특수문자 포함
5. 개별 계정 패스워드 정책 관리(chage)
useradd -s /bin/bash devops2
chage -l devops2
Last password change : May 10, 2023
Password expires : Aug 08, 2023
Password inactive : never
Account expires : never
Minimum number of days between password change : 1
Maximum number of days between password change : 90
Number of days of warning before password expires : 7
정책 수동 변경
sudo chage --maxdays 60 --mindays 2 --warndays 5 --inactive 0 devops2
chage -l devops2
Last password change : May 10, 2023
Password expires : Jul 09, 2023
Password inactive : Jul 09, 2023
Account expires : never
Minimum number of days between password change : 2
Maximum number of days between password change : 60
Number of days of warning before password expires : 5
chage -d 2023-05-03 devops
chage -l devops
6. 로그인 실패 계정 잠금 설정(pam_faillock)
/etc/pam.d/common-auth 수정
cat /etc/pam.d/common-auth | egrep -v '^#|^$'
auth [success=1 default=ignore] pam_unix.so nullok
auth requisite pam_deny.so
auth required pam_permit.so
실패 횟수 제한 적용
sudo sed -i \
's/^auth\s*\[success=1 default=ignore\].*/auth\t[success=1 default=ignore] pam_faillock.so authfail audit deny=5 unlock_time=600/' \
/etc/pam.d/common-auth
sudo sed -i '/^auth\s*required\s*pam_permit.so$/a auth\trequisite\t\t\tpam_faillock.so' /etc/pam.d/common-auth
설정 결과
cat /etc/pam.d/common-auth | egrep -v '^#|^$'
auth [success=1 default=ignore] pam_faillock.so authfail audit deny=5 unlock_time=600
auth requisite pam_deny.so
auth required pam_permit.so
auth requisite pam_faillock.so
/etc/login.defs : 기본 패스워드 만료 정책
pwquality : 패스워드 복잡성 강화
pam_faillock : 로그인 실패 시 계정 잠금
chage : 계정별 개별 정책 제어
'리눅스' 카테고리의 다른 글
| [draft] yum 명령어 (0) | 2026.01.28 |
|---|---|
| [draft] Tsunami UDP Protocol을 설치하는 방법 (0) | 2026.01.28 |
| [draft] 원도우에 버추얼박스를 설치하는 방법 (0) | 2026.01.28 |
| [draft] PHP의 공유 라이브러리와 정적 라이브러리의 차이점과 주요 사용 사례 (0) | 2026.01.28 |
| [draft] 우분투에 Go를 설치하는 방법 (0) | 2026.01.28 |