Notice
Recent Posts
Recent Comments
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
06-22 12:43
Today
Total
관리 메뉴

해킹공주의 일상

리눅스 비밀번호 복잡도 설정 정리(RHEL / Debian 계열) 본문

인프라진단/인프라 지식

리눅스 비밀번호 복잡도 설정 정리(RHEL / Debian 계열)

h4ckpr1n 2026. 2. 26. 20:21

1. 비밀번호 복잡도 설정

파일들과 역할

쉽게 말하면, 규칙서랑 스위치 역할을 하는 파일로 나뉜다.

 

1) 규칙서 파일(conf)

여기는 "최소 몇 자리로 할지, 특수문자는 몇 개 넣을지" 세부적인 규칙만 적어두는 곳.

 

[RHEL/Debian]

pwquality.conf

- 패스워드 복잡도 설정 내역

 

pwhistory.conf

- 이전 비밀번호 저장소

 

!! 아래에서 언급하겠지만, 이 파일, 이 모듈들을 스위치 파일에 입력할때는 꼭 pam_unix.so 줄 위에 적어야 적용이 된다 !!

 

 

/etc/login.def 파일은요?

 

저 파일은 아래 설정들을 할 수 있다.

 

- PASS_MAX_DAYS 최대기간

- PASS_MIN_DAYS 최소기간

- PASS_MIN_LEN 최소길이

 

여기서 일단 최소 길이 말고는 복잡도 설정할 수 있는게 없다. 복잡도 설정을 하려면 pam 모듈을 사용해주어야한다.

그리고 PAM 모듈을 사용하면 최소 길이는 PAM 모듈이 우선이라서 먹혀버린다. 

따라서, 최대기간 최소설정할때만 확인해주면 되겠다.

 

 

2) 스위치 파일

이 파일들은 "이제부터 비밀번호 복잡도 검사 모듈(pam_pwquality.so)을 써라!" 하고 시스템에 스위치를 켜주는 핵심 파일.

 

[RHEL]

/etc/pam.d/system-auth

- 로컬 로그인 (console, su, sudo 등)

 

/etc/pam.d/password-auth

- 원격 로그인 (SSH)

 

[Debian]

/etc/pam.d/common-password

- 로컬, 원격 로그인 한번에 설정 가능!

 

 

동작 방식

케이스를 나누면 아래와 같다.

 

CASE1 : 규칙서(pwquality.conf)에만 내용이 잔뜩 있는 경우(취약)

> 작동하지 않음

> 스위치 역할을 하는 파일에 모듈을 쓰겠다는 내용이 없으면, 시스템은 이 규칙서를 아예 쳐다보지도 않음

CASE2 : 스위치 파일(common-password 등)에 직접 다 적어둔 경우(양호)
> 작동!

> password requisite pam_pwquality.so minlen=8 이런 식으로 스위치 파일에 조건까지 한 줄로 다 이어 붙여서 적어놨다면, 규칙서가 비어있어도 복잡도 설정은 돌아간당

 

CASE3 : 스위치를 켜고 규칙서에 조건을 적은 경우 (양호: 가장 정석)
> 작동!

> 스위치 파일에는 모듈을 쓴다고만 명시하고, 디테일한 길이나 특수문자 조건은 pwquality.conf에 적어두는 방식.

 

그래서 점검할때는 스위치 파일을 보통 보는데, 스위치 파일 설정하는데에도 몇가지 방법이 있다.

먼저 아래 so 파일들을 보자

 

password 관련 .so 파일

1. pam_cracklib.so (과거 방식)
- common-password 파일의 모듈 호출 줄 옆에 옵션을 꼬리표처럼 주렁주렁 달아야 합니다.

- 예시) password requisite pam_cracklib.so retry=3 minlen=8 dcredit=-1...

 

2. pam_pwquality.so (현재 표준)
- 스위치 역할(common-password)과 규칙서 역할(pwquality.conf)을 완벽하게 분리했습니다.

- 예시) password requisite pam_pwquality.so retry=3 / 자세한 설정은 pwquality.conf 파일에 있음

- 다만, pam_pwqulity.so 를 썼음에도 불구하고 cracklib.so 처럼 뒤에 주렁주렁 다는 경우도 있다. 안돌아가진 않으나 비추.

 

3. pam_unix.so

- 이 옵션은 리눅스 기본 모듈이 제공하는 '아주 기초적인' 방어막. 이걸로 복잡도 설정을 할수는 없다.

 

스위치 파일에는 위와 같은 so 파일들을 설정하는 방식으로 확인하는데, 위에서 말한 케이스에 맞춰서 예시설정을 보자.

 

점검 예시

CASE1 : 규칙서(pwquality.conf)에만 내용이 잔뜩 있는 경우

> 작동하지 않음

> 스위치 역할을 하는 파일에 모듈을 쓰겠다는 내용이 없으면, 시스템은 이 규칙서를 아예 쳐다보지도 않음

 

👉🏻 설정예시 1 (취약)

: 규칙서에만 설정하고 스위치 파일(pam_pwquality.so)에 규칙서 적용안한경우

# file : pwquality.so
minlen=8
dcredit=-1 
ucredit=-1
...

# file : /etc/pam.d/common-password
# password requisite       pam_pwquality.so

 

 

CASE2 : 스위치 파일(common-password 등)에 직접 다 적어둔 경우(양호)

👉🏻 설정예시 1 (양호)

: 스위치 파일에 적어둔 경우 - pam_cracklib.so 사용

# file : pwquality.so
#minlen=8
#dcredit=-1 
#ucredit=-1
...

# file : /etc/pam.d/common-password
password requisite       pam_cracklib.so retry=3 minlen=8 dcredit=-1 ucredit=-1 ...
password    [success=1 default=ignore]      pam_unix.so obscure use_authtok yescrypt # <-- 원래 있던 줄

 

 

👉🏻 설정예시 2 (양호)

: 스위치 파일에 적어둔 경우 - pam_pwquality.so 사용

# file : pwquality.so
#minlen=8
#dcredit=-1 
#ucredit=-1
...

# file : /etc/pam.d/common-password
password requisite       pam_pwquality.so retry=3 minlen=8 dcredit=-1 ucredit=-1 ...
password    [success=1 default=ignore]      pam_unix.so obscure use_authtok yescrypt # <-- 원래 있던 줄

 

 

👉🏻 설정예시 3 (취약)

: 스위치 파일에 적어둔 경우 - pam_unix.so 사용

: pam_unix.so 는 복잡도 설정안된다... 

# file : pwquality.so
#minlen=8
#dcredit=-1 
#ucredit=-1
...

# file : /etc/pam.d/common-password
password requisite       pam_unix.so retry=3 minlen=8 dcredit=-1 ucredit=-1 ...

 

 

 

CASE3 : 스위치를 켜고 규칙서에 조건을 적은 경우 (양호: 가장 정석)

👉🏻 설정예시 1 (양호)

: pwquality.so + common-password 조합

# file : pwquality.so
minlen=8
dcredit=-1 
ucredit=-1
...

# file : /etc/pam.d/common-password
password requisite       pam_pwquality.so
password    [success=1 default=ignore]      pam_unix.so obscure use_authtok yescrypt # <-- 원래 있던 줄

 

👉🏻 설정예시 2 (취약)

: pam_unix.so, pam_cracklib.so 에 설정해도 의미가 없다...

# file : pwquality.so
minlen=8
dcredit=-1 
ucredit=-1
...

# file : /etc/pam.d/common-password
password requisite       pam_unix.so
password requisite       pam_cracklib.so
password    [success=1 default=ignore]      pam_unix.so obscure use_authtok yescrypt # <-- 원래 있던 줄

 

 

스위치 파일이랑 설명서 파일 둘 다 설정하면 뭐가 더 우선순위?

 

스위치파일에 바로 설정한 값이 우선입니다.

 

2. 최근 비밀번호 기억

1) 설정 파일

  - 스위치 파일 : [RHEL] system-auth, password-auth,[Debian] common-password

  - 규칙서 파일 :  pwhistory.conf

 

2) 설정 방법

비밀번호 복잡도 설정과 똑같다. 스위치(system-auth) 에서 그냥 켜거나, 규칙서 파일(pwhistory.conf)에 설정하고 스위치에서 켜거나. 

 

** 여기서도, 설정을 pam_unix.so 가 들어간 줄 위에 하도록. **

 

[RHEL]

# /etc/pam.d/system-auth 및 /etc/pam.d/password-auth 둘 다 수정

# (중략)
password    requisite     pam_pwhistory.so remember=4 enforce_for_root use_authtok
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok # <-- 원래 있던 줄
# (중략)

 

[Debian]

# /etc/pam.d/common-password 파일 수정

# (중략)
password    requisite                       pam_pwhistory.so remember=4 enforce_for_root use_authtok
password    [success=1 default=ignore]      pam_unix.so obscure use_authtok yescrypt # <-- 원래 있던 줄
# (중략)

 

 

3. 비밀번호 사용 기간 설정

설정파일 : /etc/login.defs

비밀번호 최대/최소 사용기간 설정만 하는 파일이다.(RHEL, Debain 동일)

PASS_MAX_DAYS   90
PASS_MIN_DAYS   1

 

 

Comments