/etc/shadow文件通过9个冒号分隔字段记录密码策略:第2字段为加密密码(如$6$表示SHA-512),第3字段为上次改密距1970-01-01天数,第4、5、6、7、8字段分别表示最小修改间隔、最大有效期、警告天数、宽限期和账户失效日(均以天数计),需换算为日期理解实际策略。

直接查看 /etc/shadow 文件能获取最底层的密码策略信息,但字段是编码值,需结合规则解读。它不显示明文密码,也不直接写“到期日”,而是用天数计算——理解字段含义和换算方法,比单纯看命令输出更可靠。
先确认权限和基本格式
该文件仅 root 可读:sudo cat /etc/shadow | grep username
典型输出(以用户 testusr 为例):testusr:$6$Klk7/:18934:7:90:7:::
共 9 个冒号分隔字段,重点关注第 2、3、4、5、6、7、8 项:
-
第2字段:加密密码。若为
!或!!表示账户被锁定;若为空,表示无密码;$6$开头代表 SHA-512 加密 -
第3字段(
18934):上次改密日期,单位是“距 1970-01-01 的天数”。可用date -d "@$(echo 18934 \* 86400 | bc)" +%F换算为具体日期(2024-10-18) -
第4字段(
7):最小修改间隔(天),即改密后至少等 7 天才能再改 -
第5字段(
90):最大有效期(天),从上次改密日起算,90 天后密码过期 -
第6字段(
7):提前警告天数,即到期前 7 天开始提示用户 - 第7字段:密码过期后还能登录的宽限期(天),为空表示未设限
- 第8字段:账户绝对失效日期(按距 1970-01-01 的天数计),为空表示永不过期
手动推算密码到期日
知道第3字段(last_change)和第5字段(max_age),就能算出确切到期日:
- 当前系统时间对应天数:
echo $(( $(date +%s) / 86400 ))→ 2026年9月15日约为 21081 - 用户上次改密日(第3字段)为 18934 → 对应日期是
date -d "1970-01-01 +18934 days"→ 2024-10-18 - 加上 max_age(90 天)→ 到期日 =
date -d "2024-10-18 +90 days"→ 2025-01-16
注意:如果第5字段是 99999,通常视为“永不过期”(约273年);如果是 0,表示密码已过期,用户下次登录必须强制重置。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
安全操作提醒
不要用文本编辑器直接修改 /etc/shadow,极易导致语法错误或权限异常。如需调整策略,优先使用工具命令:
- 查详情:
sudo chage -l username - 设最大有效期为 120 天:
sudo chage -M 120 username - 禁用过期限制:
sudo chage -M -1 username - 设账户在 2027-12-31 失效:
sudo chage -E "2027-12-31" username
所有修改都会实时更新到 /etc/shadow 对应字段,无需手动编辑。
掌握字段含义+简单日期换算,就能从 /etc/shadow 中准确读出每个用户的密码生命周期,这是运维排查登录失败、批量审计账户安全的基础能力。

















