通过pam模块pam_pwquality.so强制密码复杂度并配合/etc/login.defs管理生命周期,启用pam_pwhistory.so禁止历史密码复用,禁用空密码,实现全链路密码安全管控。

直接通过 PAM 模块和系统配置文件强制执行,不依赖用户自觉。核心是启用 pam_pwquality.so 控制密码生成规则,并配合 /etc/login.defs 管理生命周期。
启用 pam_pwquality 模块并设定复杂度
该模块负责在用户改密时实时校验强度,必须正确加载并配置参数:
- 先确认模块存在:运行
ls /lib/security/pam_pwquality.so(Debian/Ubuntu)或ls /lib64/security/pam_pwquality.so(RHEL/CentOS),若无则安装对应包(如libpam-pwquality或libpwquality) - 编辑 PAM 密码配置文件:
— Debian/Ubuntu:修改/etc/pam.d/common-password
— RHEL/CentOS:修改/etc/pam.d/system-auth - 在
password requisite行插入或调整为:password requisite pam_pwquality.so retry=3 minlen=12 difok=5 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1 maxrepeat=2 reject_username=1 - 各参数含义:
—minlen=12:至少 12 位
—ucredit=-1等:分别强制含大写、小写、数字、特殊字符各至少 1 个
—difok=5:新旧密码至少 5 字符不同
—maxrepeat=2:禁止连续 3 个相同字符
—reject_username=1:禁止密码包含用户名或其倒序
统一新用户的密码有效期与最小长度
这些设置影响所有新建账户,写入全局定义文件即可:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 编辑
/etc/login.defs,确保以下行生效(取消注释并修改数值):PASS_MAX_DAYS 90(90 天后过期)PASS_MIN_DAYS 7(两次改密至少间隔 7 天)PASS_MIN_LEN 12(最低长度,与 pam_pwquality 保持一致)PASS_WARN_AGE 14(提前 14 天提醒) - 注意:
PASS_MIN_LEN在部分发行版中已被pam_pwquality覆盖,仅作兜底;主控仍以 PAM 配置为准
对已有用户强制执行策略
全局配置只对新用户生效,已有用户需单独设置才能立即受控:
- 用
chage -M 90 -m 7 -W 14 username设置单个用户密码周期 - 用
chage -d 0 username强制该用户下次登录必须改密(适用于刚重置密码或新入职人员) - 验证是否生效:
chage -l username查看详细状态
额外加固:禁用弱密码与历史复用
防止用户绕过复杂度要求,补充两项关键防护:
- 启用密码历史限制:在
/etc/pam.d/common-password(或system-auth)中添加一行:password required pam_pwhistory.so remember=5 use_authtok
表示禁止重复使用最近 5 个旧密码 - 禁用空密码:检查
/etc/shadow中用户行第二字段是否为!!或*;若有空字段(如username::18900:0:99999:7:::),说明允许空密码,应立即用passwd -l username锁定并重设 - 可选增强:搭配
pam_faillock.so设置失败 5 次锁定账户 30 分钟,防暴力破解










