Linux 密码策略:配置、注意事项与实战详解
一、为什么需要密码策略?
Linux 密码策略用于强制用户设置安全的密码,防止弱密码(如 123456、password)被暴力破解,提升系统安全性。
 核心目标:平衡安全性与用户体验,避免密码过于复杂导致用户记录或重复使用弱密码。
二、密码策略的配置文件
Linux 密码策略主要通过以下两个文件配置:
1. /etc/login.defs(全局策略)
 
- 作用:定义密码有效期、最小长度、历史记录等。
 - 常用参数:
PASS_MAX_DAYS 90 # 密码最大有效期(天) PASS_MIN_DAYS 7 # 密码最小修改间隔(天) PASS_MIN_LEN 8 # 密码最小长度(受 pam_pwquality 影响) PASS_WARN_AGE 14 # 过期前警告天数 
2. /etc/pam.d/password-auth(PAM 模块策略)
 
- 作用:通过 
pam_pwquality模块定义密码复杂度(大小写、数字、特殊字符等)。 - 典型配置:
password requisite pam_pwquality.so \try_first_pass \local_users_only \retry=3 \authtok_type= \minlen=12 \ # 最小长度minclass=4 \ # 至少 4 类字符(大写、小写、数字、特殊字符)ucredit=-1 \ # 至少 1 个大写字母(-1 表示必须存在)lcredit=-1 \ # 至少 1 个小写字母dcredit=-1 \ # 至少 1 个数字ocredit=-1 \ # 至少 1 个特殊字符reject_username # 禁止密码包含用户名 
三、密码策略配置步骤
步骤 1:修改 /etc/login.defs
 
sudo vi /etc/login.defs
 
示例配置:
PASS_MAX_DAYS   60   # 2 个月过期
PASS_MIN_DAYS   2    # 至少间隔 2 天才能修改
PASS_MIN_LEN    10   # 最小长度(实际由 pam_pwquality 决定)
PASS_WARN_AGE   7    # 过期前 7 天警告
 
步骤 2:配置 /etc/pam.d/password-auth
 
sudo vi /etc/pam.d/password-auth
 
添加/修改以下行(以 RedHat/CentOS 为例):
password    requisite     pam_pwquality.so \minlen=12 \          # 最小长度 12minclass=3 \         # 至少 3 类字符ucredit=-1 \         # 必须包含大写lcredit=-1 \         # 必须包含小写dcredit=-1 \         # 必须包含数字ocredit=-1 \         # 必须包含特殊字符(!@#$%^&*()等)maxrepeat=3 \        # 禁止连续 3 个相同字符difok=4 \            # 新密码与旧密码至少 4 位不同reject_username      # 密码不能包含用户名
 
步骤 3:验证密码策略
使用 pwquality 命令测试密码强度:
echo "Password123!" | pwquality --test
 
输出示例:
Password123! (user: root)
密码:太短(至少 12 个字符)
 
四、注意事项
1. 密码复杂度的平衡
- 过严:用户可能记录密码或使用 
Password123!Password123!等重复模式。 - 过松:弱密码易被破解。
建议:minlen=12+minclass=3+ 禁止用户名。 
2. 密码历史记录
通过 pam_pwhistory 模块禁止重复使用旧密码:
# /etc/pam.d/password-auth
password    required    pam_pwhistory.so remember=5  # 记住 5 个旧密码
 
3. 锁定策略
配置失败尝试锁定(pam_tally2 模块):
# /etc/pam.d/sshd(SSH 登录)
auth        required    pam_tally2.so deny=5 unlock_time=300 even_deny_root
 
- 说明:5 次失败后锁定 5 分钟,包括 root 用户。
 
4. 不同 Linux 发行版的差异
| 发行版 | 密码策略文件 | PAM 模块位置 | 
|---|---|---|
| CentOS/RHEL | /etc/pam.d/password-auth | /usr/lib64/security/ | 
| Debian/Ubuntu | /etc/pam.d/common-password | /usr/lib/x86_64-linux-gnu/security/ | 
五、实战案例
案例 1:强制复杂密码
需求:密码长度 ≥12,包含大小写、数字、特殊字符,60 天过期。
 配置:
# /etc/login.defs
PASS_MAX_DAYS   60
PASS_MIN_LEN    12  # 仅作参考,实际由 pam_pwquality 控制# /etc/pam.d/password-auth
pam_pwquality.so minlen=12 minclass=4 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
 
案例 2:禁止弱密码
需求:密码不能包含 user、123 等常见弱词。
 配置:
pam_pwquality.so badwords=user,123,admin enforce_for_root
 
六、验证密码策略是否生效
- 修改用户密码:
sudo passwd testuser - 尝试弱密码(如 
test123),系统应拒绝并提示原因。 
七、总结
- 核心文件:
/etc/login.defs(有效期) +pam_pwquality(复杂度)。 - 最佳实践:结合密码复杂度、有效期、历史记录和锁定策略。
 - 测试:定期使用 
pwquality或工具(如john the ripper)测试密码强度。 
