首页/系统/Linux 运维命令速查//etc/passwd 与 /etc/shadow 字段结构

/etc/passwd 与 /etc/shadow 字段结构

理解这两个文件的字段是排查登录问题的基本功:passwd 七段(名:密码占位:UID:GID:注释:家:shell),shadow 九段(含密码哈希与老化)。

Linux 运维命令速查系统更新于 2026-10-13

两个账号文件的分工

理解 /etc/passwd 与 /etc/shadow 的字段结构是排查登录问题的基本功。passwd 有七段:用户名、密码占位符、UID、GID、注释、家目录、登录 shell。真正的密码哈希在 shadow 里,共九段:密码哈希、最后修改日期、最短使用天数、最长使用天数、过期前警告天数、宽限期、失效日期与保留字段。这种分工来自安全考虑:passwd 需要被大量程序读取,所以把哈希挪进只有 root 能读的 shadow,避免离线暴力破解。

基本信息

适用平台Linux(由 shadow-utils 维护,格式见 man 5 passwd 与 man 5 shadow)
文件权限passwd 通常 644 所有用户可读;shadow 通常 600 且属主为 root
passwd 字段用户名:密码占位:UID:GID:注释:家目录:登录 shell
shadow 字段用户名:密码哈希:最后修改日:最短:最长:警告:宽限:失效日:保留
密码位特殊值空表示无密码、! 或 !! 表示锁定、* 表示不可用的哈希占位

典型使用场景

  • 用户无法登录:确认 shell、家目录、账号锁定与失效日期
  • 授权核对:检查 UID 与 GID 是否与预期一致
  • 口令策略:查看密码老化与过期规则是否生效
  • 安全审计:找出 UID 为 0 的额外账号与无密码账号
  • 账号清理:删除用户前后核对两个文件是否同步变更

常用示例

常用示例
grep deploy /etc/passwd
sudo grep deploy /etc/shadow
awk -F: '{print $1,$3,$6,$7}' /etc/passwd | head
awk -F: '$3==0{print $1}' /etc/passwd      # 找出全部 UID 0 账号
sudo passwd -S deploy                       # 账号与口令状态摘要
sudo chage -l deploy                        # 查看口令老化策略

shadow 字段序读法

字段含义说明
用户名账号名与 passwd 中的账号对应
密码哈希加密口令或锁定标记空、!、!!、* 各自含义不同
最后修改日自 1970-01-01 起的天数用于计算口令年龄
最短与最长口令最短使用期与最长有效期配合策略校验,最长到期后强制改密
警告与宽限过期前警告天数与宽限天数影响登录提示与缓冲期
失效日期账号整体失效日,同样按天计到点后账号不可登录
不要手工编辑 shadow:用 usermod、chage、passwd 等工具维护。直接改很容易造成字段错位或哈希损坏,使账号彻底无法登录。
passwd 第二段的 x 只是占位符,真正的哈希在 shadow。把哈希写回 passwd 是历史遗留做法,在当前实现下属于高风险配置。

易错点

  • 审计发现非 root 用途的 UID 0 账号,属于重大安全隐患
  • 手工编辑 shadow 导致字段错位或哈希损坏,账号无法登录
  • 只看 passwd 判断账号是否可用,忽略 shadow 里的锁定标记与失效日期
  • 调整 UID 后没有处理原有文件归属,造成大量文件属主异常

数据来源与参考

  • man 5 passwd
  • man 5 shadow

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌