Linux密码策略通过PAM模块实现,核心是配置pam_pwquality.so(如minlen=12、difok=5、reject_username等)和pam_pwhistory.so(remember=24),并设置login.defs中PASS_MAX_DAYS等参数及chage命令微调。

Linux系统密码复杂度策略主要通过PAM(Pluggable Authentication Modules)模块实现,核心是配置/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS)文件,结合pam_pwquality.so(新版)或pam_cracklib.so(旧版)控制密码强度。
启用并配置pam_pwquality.so强化密码规则
该模块替代了老旧的pam_cracklib,支持更细粒度的策略控制。需确保已安装libpwquality包(如yum install libpwquality或apt install libpwquality-tools)。
在对应PAM配置文件中添加或修改如下行(以Ubuntu为例):
password [success=1 default=ignore] pam_pwquality.so retry=3 minlen=12 difok=5 \
dcredit=-1 ucredit=-1 lcredit=-1 ocredit=-1 \
maxrepeat=3 reject_username enforce_for_root
-
minlen=12:最小长度12位(注意:实际最小长度还受
minclass和字符类型分布影响) - dcredit=-1等参数:分别要求至少1位数字、大写字母、小写字母、特殊字符
- difok=5:新密码与旧密码至少5个字符不同
-
maxrepeat=3:禁止连续4个及以上相同字符(如
aaabbb允许,aaaa拒绝) - reject_username:禁止密码包含用户名(含反转)
- enforce_for_root:对root用户同样生效(默认不强制)
限制密码重用与历史记录
防止用户循环使用旧密码,需配合pam_pwhistory.so(RHEL系)或pam_unix.so(Debian系)启用历史记录功能。
在common-password中添加:
password required pam_pwhistory.so remember=24 use_authtok
-
remember=24:保存最近24次密码哈希(存于
/etc/security/opasswd),新密码不得与其中任一重复 - use_authtok:避免在密码修改流程中重复调用其他模块,确保策略一致
- 首次启用时需手动创建
/etc/security/opasswd(空文件即可),权限设为600
设置密码生命周期与过期提醒
通过/etc/login.defs统一配置全局策略,并可为单个用户微调:
- PASS_MAX_DAYS 90:密码最长有效期90天
- PASS_MIN_DAYS 7:修改密码后至少7天才能再次修改(防绕过)
- PASS_WARN_AGE 7:到期前7天开始登录时提醒用户
- 对已有用户执行:
chage -M 90 -m 7 -W 7 username - 禁用密码过期(如服务账户):
chage -E -1 username
加固PAM认证流程防绕过
避免因配置顺序或条件判断导致策略被跳过:
- 确保
pam_pwquality.so行位于pam_unix.so之前,且使用[success=1 default=ignore]跳过后续弱策略模块 - 注释或删除可能降低安全性的旧规则,例如含
md5、nis或try_first_pass但未配强校验的行 - 测试配置是否生效:
sudo passwd testuser,尝试设置123456、testuser123等弱密码,应被明确拒绝并提示原因 - 检查日志:
journalctl -t pam_pwquality或/var/log/auth.log查看拒绝详情

















