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
)测试密码强度。