리λ
μ€ μλ²μμ λΉλ°λ²νΈλ₯Ό 무ν λ°λ³΅ μλνλ λΈλ£¨νΈν¬μ€(Brute-force) 곡격μ κ°μ₯ κΈ°μ΄μ μ΄λ©΄μλ λΉλ²ν μνμ
λλ€.
PAM(Pluggable Authentication Modules) μ pam_tally2 λͺ¨λμ μ¬μ©νλ©΄ λ‘κ·ΈμΈ μ€ν¨ νμλ₯Ό μΆμ νκ³ , μκ³κ° μ΄κ³Ό μ κ³μ μ μλμΌλ‘ μ κΈ μ μμ΅λλ€.
β οΈ
pam_tally2λ Deprecated μνμ λλ€. RHEL 8 / CentOS 8 μ΄μ λλ μ΅μ Ubuntu νκ²½μμλpam_faillockμ μ¬μ©νλ κ²μ΄ κΆμ₯λ©λλ€. μ΄ ν¬μ€νΈλ λ κ°μ§ λͺ¨λ λ€λ£Ήλλ€.
π§© PAMμ΄λ? #
PAMμ 리λ
μ€μ μΈμ¦ νλ μμν¬λ‘, μ ν리μΌμ΄μ
μ΄ μΈμ¦ λ°©μμ μ§μ ꡬννμ§ μμλ λλλ‘ λͺ¨λ λ°©μμΌλ‘ μΈμ¦ κΈ°λ₯μ μ 곡ν©λλ€.
/etc/pam.d/ λλ ν 리 μλμ μλΉμ€λ³ μ€μ νμΌμ΄ μμΉν©λλ€.
1/etc/pam.d/
2βββ sshd # SSH μλΉμ€ μΈμ¦ μ€μ
3βββ login # λ‘컬 μ½μ λ‘κ·ΈμΈ μΈμ¦ μ€μ
4βββ password-auth # ν¨μ€μλ κΈ°λ° μΈμ¦ κ³΅ν΅ μ€μ (RHEL/CentOS)
5βββ system-auth # μμ€ν
μΈμ¦ κ³΅ν΅ μ€μ (RHEL/CentOS)PAM μ€μ μ 4κ°μ§ νμ
(auth, account, password, session)μΌλ‘ ꡬμ±λλ©°,
pam_tally2λ μ£Όλ‘ authμ account νμ
μ μ μ©λ©λλ€.
π pam_tally2 μ€μ νκΈ° (RHEL 7 / CentOS 7) #
/etc/pam.d/password-auth μ€μ #
SSH λ‘κ·ΈμΈ μ€ν¨ μ νμ μ μ©νλ €λ©΄ μλμ κ°μ΄ μ€μ ν©λλ€.
1# /etc/pam.d/password-auth
2
3auth required pam_tally2.so deny=5 unlock_time=1800 no_magic_root reset
4auth required pam_env.so
5auth sufficient pam_unix.so nullok try_first_pass
6auth requisite pam_succeed_if.so uid >= 1000 quiet_success
7auth required pam_deny.so
8
9account required pam_tally2.so no_magic_root
10account required pam_unix.so
11account sufficient pam_localuser.so/etc/pam.d/system-auth μ€μ #
λ‘컬 μ½μ λ‘κ·ΈμΈμλ λμΌνκ² μ μ©νλ €λ©΄ system-auth νμΌμλ μΆκ°ν©λλ€.
1# /etc/pam.d/system-auth
2
3auth required pam_tally2.so deny=5 unlock_time=1800 no_magic_root reset
4auth required pam_env.so
5auth sufficient pam_unix.so nullok try_first_passTip:
password-authλ SSH λ± μ격 μ μ,system-authλ λ‘컬 μ½μ μ μμ μ μ©λ©λλ€. λ νμΌ λͺ¨λ μμ ν΄μΌ μμ ν μ μ©μ΄ λ©λλ€.
βοΈ μ£Όμ μ΅μ μ€λͺ #
| μ΅μ | μ€λͺ |
|---|---|
deny=N | Nν μ€ν¨ μ κ³μ μ κΈ (μ: deny=5λ 5ν μ€ν¨ μ μ κΈ) |
unlock_time=N | Nμ΄ ν μλ μ κΈ ν΄μ (μ: unlock_time=1800μ 30λΆ). μλ΅ μ μꡬ μ κΈ |
no_magic_root | root κ³μ μ μ κΈ λμμμ μ μΈ |
reset | λ‘κ·ΈμΈ μ±κ³΅ μ μ€ν¨ νμλ₯Ό 0μΌλ‘ μ΄κΈ°ν |
onerr=fail | PAM λͺ¨λ μ€λ₯ λ°μ μ μΈμ¦ μ€ν¨λ‘ μ²λ¦¬ |
even_deny_root | root κ³μ λ μ κΈ λμμ ν¬ν¨ (보μ κ°ν μ μ¬μ©) |
π οΈ pam_tally2 λͺ λ Ήμ΄ μ¬μ©λ² #
μ€ν¨ νμ μ‘°ν #
1pam_tally2 -u [κ³μ λͺ
]1# μμ
2pam_tally2 -u testuser
3# Login Failures Latest failure From
4# testuser 5 04/26/26 10:30:00 192.168.1.100κ³μ μ κΈ ν΄μ (μ€ν¨ νμ μ΄κΈ°ν) #
1pam_tally2 -u [κ³μ λͺ
] -r1# μμ
2pam_tally2 -u testuser -r
3# Login Failures Latest failure From
4# testuser 0-r (--reset) μ΅μ
μ μ¬μ©νλ©΄ μ€ν¨ νμκ° 0μΌλ‘ μ΄κΈ°νλμ΄ μ¦μ μ κΈμ΄ ν΄μ λ©λλ€.
μ 체 κ³μ μ€ν¨ νν© μ‘°ν #
1pam_tally2μ΅μ μμ΄ μ€ννλ©΄ λ‘κ·ΈμΈ μ€ν¨ μ΄λ ₯μ΄ μλ λͺ¨λ κ³μ λͺ©λ‘μ μΆλ ₯ν©λλ€.
π μ€μ μ μ© νμΈ #
κ³μ μ΄ μ€μ λ‘ μ κ²Όλμ§ ν μ€νΈνλ €λ©΄ μλ μμλ‘ νμΈν©λλ€.
1# 1. ν
μ€νΈ κ³μ μ κΈ μ λ° (5ν νλ¦° ν¨μ€μλ μ
λ ₯ ν)
2ssh testuser@localhost # 5ν μ€ν¨
3
4# 2. μ κΈ μν νμΈ
5pam_tally2 -u testuser
6# Failures: 5 (μ΄μμ΄λ©΄ μ κΈ μν)
7
8# 3. κ΄λ¦¬μκ° μλμΌλ‘ μ κΈ ν΄μ
9pam_tally2 -u testuser -rβ οΈ root κ³μ μΌλ‘
pam_tally2 -rλͺ λ Ήμ μ€νν΄μΌ ν©λλ€. μΌλ° κ³μ μΌλ‘ μ€ν μ κΆν μ€λ₯κ° λ°μν©λλ€.
π μ΅μ λμ: pam_faillock (RHEL 8 / CentOS 8 μ΄μ) #
pam_tally2λ RHEL 8λΆν° 곡μ Deprecated μ²λ¦¬λμκ³ , pam_faillock μ΄ λ체 λͺ¨λμ
λλ€.
μ¬μ©λ²μ μ μ¬νμ§λ§ μ€μ λ°©μμ΄ λ€λ¦
λλ€.
/etc/pam.d/sshd μ€μ #
1auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600
2auth [success=1 default=bad] pam_unix.so nullok
3auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=600
4auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=600
5account required pam_faillock.sopam_faillock λͺ λ Ήμ΄ #
1# μ€ν¨ νμ μ‘°ν
2faillock --user [κ³μ λͺ
]
3
4# κ³μ μ κΈ ν΄μ
5faillock --user [κ³μ λͺ
] --resetpam_tally2 vs pam_faillock λΉκ΅ #
| νλͺ© | pam_tally2 | pam_faillock |
|---|---|---|
| μ§μ OS | RHEL 6~7, ꡬλ²μ | RHEL 8+, μ΅μ Ubuntu |
| μν | Deprecated | νμ¬ κΆμ₯ |
| λͺ λ Ήμ΄ | pam_tally2 -u | faillock --user |
| μ κΈ ν΄μ | pam_tally2 -u USER -r | faillock --user USER --reset |
| μ€μ 볡μ‘λ | λ¨μ | λ€μ λ³΅μ‘ |
β μμ½ #
pam_tally2λ/etc/pam.d/password-authλ°system-authμauth requiredμaccount requiredλ μ€μ© μΆκ°ν©λλ€.deny=5 unlock_time=1800 no_magic_root resetμ΄ κ°μ₯ μΌλ°μ μΈ μ€μ μ λλ€.- κ³μ μ κΈ ν΄μ λ
pam_tally2 -u [κ³μ λͺ ] -rλ‘ μνν©λλ€. - RHEL 8 / CentOS 8 μ΄μ νκ²½μμλ
pam_faillockκ³Όfaillockλͺ λ Ήμ΄λ₯Ό μ¬μ©νμΈμ.