chage -d 0 强制密码修改的完整流程
目录
1. 初始状态设置
2. 用户登录时的检查流程
第一步:密码过期检查
第二步:最小间隔检查
第三步:执行密码修改
3. 修改后的状态
技术原理解析
为什么 -d 0 如此有效?
1. 初始状态设置
# 执行命令
chage -d 0 alice# 此时 /etc/shadow 中 alice 的记录变为:
# alice:password:0::::::
# ↑
# 最后修改日期设为 0 (1970-01-01)
2. 用户登录时的检查流程
当用户 alice
尝试登录时,系统会执行以下检查:
第一步:密码过期检查
条件:当前日期 - 最后修改日期 > 最大有效期(M)
计算:2024-03-XX - 1970-01-01 = 19000+ 天
比较:19000+ 天 > 任何合理的 M 值(如 90 天)
结果:密码已过期,必须修改
关键点:即使系统默认的 M
值是 99999(永不过期),19000+ 天也远超这个值,所以密码必定过期。
第二步:最小间隔检查
条件:当前日期 - 最后修改日期 ≥ 最小间隔(m)
计算:2024-03-XX - 1970-01-01 = 19000+ 天
比较:19000+ 天 ≥ 任何合理的 m 值(如 7 天)
结果:满足最小间隔要求,允许修改密码
第三步:执行密码修改
由于第一步判断密码已过期,第二步判断允许修改,系统会:
-
提示用户:"您的密码已过期,必须立即更改"
-
要求用户输入当前密码进行验证
-
要求用户输入新密码两次
-
密码修改成功后,更新最后修改日期为当前日期
3. 修改后的状态
# 密码修改后 /etc/shadow 中 alice 的记录变为:
# alice:new_password:19480::::::
# ↑
# 最后修改日期更新为当前日期
现在密码生命周期重新开始计算。
技术原理解析
为什么 -d 0
如此有效?
-
时间跨度巨大:从 1970 年到现在的 19000+ 天远超任何合理的密码策略参数
-
双重满足:既满足密码过期条件,又满足最小间隔条件
-
无法绕过:用户必须修改密码才能继续使用系统