安全修改linux用户密码与有效期需配合passwd和chage:passwd更新密码,chage管理生命周期;普通用户用passwd改密受pam策略约束,管理员用sudo passwd username重置他人密码,chage -m、-w、-d、-i等参数设定有效期与强制更换策略,并通过pam模块启用复杂度与历史限制。

安全修改 Linux 服务器用户密码与有效期,关键在于区分“改密码”和“控周期”两个动作:用 passwd 更新凭证本身,用 chage 管理生命周期;两者配合才能既保障即时可用性,又满足安全合规要求。
普通用户改自己密码:用 passwd 验证旧密再设新密
普通用户只需运行 passwd,系统会提示输入当前密码(不回显),再输入两次新密码。该操作受 PAM 密码策略约束——若新密码太短、无数字或与用户名相似,会被直接拒绝,并提示 password unchanged。
注意:
- 不要省略旧密码验证环节,这是防未授权修改的第一道防线
- 新密码不会出现在命令历史中,但避免在脚本里用 echo "pass" | passwd --stdin,明文易泄露
- 若提示 Authentication token manipulation error,先检查 /etc/shadow 权限是否为 000 或磁盘是否只读
管理员重置他人密码:用 passwd username 绕过旧密验证
root 或 sudo 用户可直接为任意用户设新密码,无需知道原密码:
-
sudo passwd alice→ 输入两次新密码即生效 - 该操作会重置
/etc/shadow中的密码哈希值,并清空密码过期状态(如上次修改时间) - 已登录的会话不受影响,用户仍可继续使用当前终端,直到主动登出或超时断开
设置密码有效期与强制更换:chage 是唯一可靠手段
仅改密码不等于启用周期管理。必须用 chage 显式设定时间点:
-
sudo chage -M 90 alice:密码最多用 90 天,到期后登录时强制改密(不是锁账户) -
sudo chage -W 7 alice:提前 7 天每次登录都提示 “Your password will expire…” -
sudo chage -d 0 alice:把“上次修改日期”设为 0,下次登录立即拦截并引导改密(新账号启用、安全审计后重置必做) -
sudo chage -I 14 alice:密码过期后宽限 14 天,期间每次登录都必须改密;超时则账户被禁用
⚠️ 重要提醒:
- /etc/login.defs 只影响 新建用户,对已有用户完全无效
- chage -M 0 和 chage -d 0 效果一致,都触发首次登录强制改密
- SSH 密钥登录且禁用密码认证时,-d 0 不生效
让策略真正落地:配合 PAM 启用复杂度与历史限制
光设有效期不够,需防止用户设弱密或循环复用旧密。编辑 /etc/pam.d/common-password(Debian/Ubuntu)或 /etc/pam.d/system-auth(RHEL/CentOS),确保含以下两行:
-
password requisite pam_pwquality.so retry=3 minlen=10 difok=3:要求至少 10 位、含大小写字母+数字+符号中的三类,且与旧密码至少 3 位不同 -
password [success=1 default=ignore] pam_pwhistory.so use_authtok remember=5:记住最近 5 次密码,禁止重复使用
保存后立即生效,下次改密即受约束。无需重启服务,也不需要重启系统。











