linux中限制普通用户改密频率的核心是通过pam和pass_min_days设置最小时间间隔,如设为7天;需配合chage更新已有用户,并在pam中配置pam_unix.so min_days=7及pam_pwhistory.so强化校验,防止绕过。

Linux 运维中限制普通用户修改自己密码的频率,核心是通过 PAM(Pluggable Authentication Modules)控制 两次成功改密之间的最小间隔,而不是限制“次数”本身。系统不提供“每周只能改一次”这类直接计数器,但可通过 PASS_MIN_DAYS 强制时间间隔,配合 PAM 策略防止绕过。
设置密码最短修改间隔(基础且有效)
这是最常用、最稳定的方式,由 shadow 工具链原生支持:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 编辑
/etc/login.defs,找到或添加PASS_MIN_DAYS行:PASS_MIN_DAYS 7→ 表示用户至少要隔 7 天才能再次修改密码 - 该设置对所有新创建用户生效;对已有用户需单独更新:
chage -m 7 username - 注意:若用户当前密码已过期(
PASS_MAX_DAYS到期),PASS_MIN_DAYS会被忽略,允许立即改密 —— 这是设计行为,确保账户不被锁死
用 PAM 防止绕过最小间隔(关键加固)
仅设 PASS_MIN_DAYS 不够,因为用户可能通过图形界面、LDAP 或某些自定义工具跳过 shadow 检查。需在 PAM 密码堆栈中加入校验:
- 在
/etc/pam.d/common-password(Debian/Ubuntu)或/etc/pam.d/system-auth(RHEL/CentOS)中,找到password类型行 - 确保有类似以下配置(位置应在
pam_unix.so或pam_pwquality.so之前):password [success=ok default=bad] pam_faildelay.so delay=3000000(可选,增加输错后延迟)password [success=ok default=bad] pam_pwhistory.so enforce_for_root remember=5(强化历史校验,间接抑制高频改密) - 真正起效的是
pam_unix.so自带的min_days参数,例如:password [success=1 default=ignore] pam_unix.so obscure sha512 min_days=7
验证与运维注意事项
配置后必须实测,避免策略失效或误伤:
- 用普通用户执行
passwd,首次改密成功后,立刻再试一次,应提示:Changing password for user xxx.<br>Current password: <br>passwd: Password unchanged
或明确报错“too soon” - 检查当前用户策略:
chage -l username→ 查看 “Minimum number of days between password change” 是否为预期值 - root 用户默认不受
PASS_MIN_DAYS限制,如需统一管控,必须在 PAM 中显式加enforce_for_root并确认模块支持(如pam_pwhistory.so) - 不要禁用
/usr/bin/passwd(如 chmod 511),这会破坏所有密码管理流程,且无法阻止 SSH 密钥登录用户通过其他方式调用 PAM










