在Linux系统中,用户密码并不是随便放在某个普通文件夹里,而是由系统通过特定的配置文件进行管理。最核心的密码相关文件位于etc目录中,具体涉及两个关键文件,它们共同协作完成身份验证。

密码文件的实际存放位置
Linux将用户账户的基础信息和密码信息分开保存,主要使用以下两个文件:
- /etc/passwd:存放用户的账号名称、UID、GID、主目录及登录Shell等,密码字段早期曾用于保存密码,现在通常只显示一个占位符x。
- /etc/shadow:真正存放加密后用户密码的文件,仅对root用户可读,普通用户无权查看。
为什么密码不在passwd里
在早期Unix和Linux中,加密密码确实直接写在passwd文件里,但由于该文件所有用户都能读取,存在暴力破解风险。后来系统引入shadow机制,把密码迁移到权限严格的shadow文件中,提升了安全性。
查看相关文件内容
我们可以使用命令行工具观察这两个文件的结构差异。注意查看shadow需要root权限。
# 查看passwd中第一行的结构 head -n 1 /etc/passwd # 使用sudo查看shadow中相应用户条目(以root为例) sudo head -n 1 /etc/shadow
文件字段含义简表
| 文件 | 字段示例 | 说明 |
|---|---|---|
| /etc/passwd | root:x:0:0:root:/root:/bin/bash | x表示密码在shadow中 |
| /etc/shadow | root:$6$xxx:19000:0:99999:7::: | 第二字段为加密密码 |
使用编程方式读取用户信息
在Python中,我们可以通过标准库或直接读取文件来分析密码存放逻辑,但要读取shadow仍需提权。
# 读取passwd文件,展示用户与密码占位符
with open('/etc/passwd', 'r') as f:
for line in f:
parts = line.strip().split(':')
# parts[0]是用户名,parts[1]是密码占位符
if parts[0] == 'root':
print('用户名:', parts[0])
print('密码占位符:', parts[1])
# 注意:读取/etc/shadow需要root权限
try:
with open('/etc/shadow', 'r') as sf:
for line in sf:
if line.startswith('root:'):
print('shadow中root条目:', line.strip())
except PermissionError:
print('无权限读取shadow文件,请使用sudo运行')
小结
回答开头的问题:Linux中用户密码的加密内容存放在/etc/shadow文件里,而/etc/passwd只保留账号基本信息和密码占位符。日常管理中应保护好shadow文件权限,避免泄露导致安全隐患。
Linux密码文件/etc/shadow修改时间:2026-07-31 08:48:19