/etc/passwd不存密码,/etc/shadow才真正加密存储密码;前者仅含用户名、uid、gid、家目录、shell等明文基础信息,权限644全员可读,密码字段为“x”占位符;后者专存密码哈希、过期策略及锁定状态,权限600仅root可读,是linux用户认证的核心安全机制。

/etc/passwd 不存密码,/etc/shadow 才真正加密存储密码 —— 这是 Linux 权限管理中最基础也最关键的分工。很多人误以为 passwd 文件里那个“x”是密码本身,其实它只是个占位符,真正的密码哈希、过期策略、锁定状态全在 shadow 里,且仅 root 可读。
passwd 文件:只管“身份”,不管“密钥”
它本质是一张公开的用户档案表,权限默认为 644(所有用户可读),内容全是明文字段:
- 用户名:登录用的标识,必须唯一
- 密码字段固定为 x:表示密码已移交 shadow;若为 ! 或 *,说明账号被禁用(但 SSH 密钥登录仍可能生效)
- UID/GID:系统靠数字识别用户和主组,root UID=0,普通用户通常 ≥1000
-
家目录与 Shell:决定用户登录后在哪、用什么解释器;设为
/sbin/nologin就禁止交互式登录
shadow 文件:密码的“加密保险柜”
它才是密码安全的核心载体,权限严格设为 600(仅 root 可读写),每行 9 个冒号分隔字段:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
-
加密密码字段:不是明文,是经 SHA-512 或 bcrypt 等算法生成的哈希值,开头常带
$6$(SHA-512)、$5$(SHA-256)或$2y$(bcrypt)标识 - last_change:从 1970-01-01 起算的密码最后修改天数,用于计算有效期
- min_days / max_days:强制两次改密间隔(如 7 天内不得重复修改)、密码最长有效天数(如 90 天)
- warn_days / inactive_days:提前多少天提醒改密;过期后还能登录几天,之后账户自动锁定
加密机制如何协同工作?
用户登录时,系统按顺序完成三步验证:
- 查
/etc/passwd确认用户名存在、获取 UID 和 shell 类型 - 用该用户名去匹配
/etc/shadow中对应行,取出加密密码哈希 - 将用户输入的密码按相同算法(如 SHA-512)+ 盐值(salt)重新哈希,比对结果是否一致
整个过程由 PAM(Pluggable Authentication Modules)模块调度,不依赖应用层逻辑,保证认证统一且可控。
为什么不能绕过 shadow 直接改 passwd?
即使你手动把 passwd 第二字段改成真实哈希,系统也不会认 —— 因为现代 Linux 发行版默认启用影子密码机制,login、su、ssh 等所有认证入口都只信任 shadow 中的哈希。强行写入 passwd 的哈希会被忽略,甚至可能导致无法登录。










