본문 바로가기

리눅스

[draft] 우분투 계정 보안 조치

우분투 계정 보안 조치

우분투 환경에서 계정 보안을 강화하기 위해 수행하는 패스워드 복잡성 정책 설정과 계정 잠금(로그인 실패 임계값) 설정 방법입니다.

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 : 계정별 개별 정책 제어