在 Linux 系统中,/etc/shadow 文件存储了用户的加密密码和其他安全相关信息,因此默认只有 root 用户 才有权限读取。当你尝试用普通用户身份查看时,会收到 Permission denied 错误。
如何查看 /etc/shadow 文件?
方法 1:使用 sudo 临时提权
sudo cat /etc/shadow
系统会提示输入当前用户的密码(需有 sudo 权限)。
方法 2:切换到 root 用户
sudo -i # 切换到 root 用户
cat /etc/shadow # 直接查看
exit # 退出 root 用户
/etc/shadow 文件格式解析
每行代表一个用户,格式如下(以 : 分隔的 9 个字段):
username:encrypted_password:last_change:min_age:max_age:warn:inactive:expire:reserved
示例:
root:$6$T7/...:19203:0:99999:7:::
user:$6$xyz...:19210:0:30:5:10:19452:
字段说明:
| 字段 | 含义 |
|---|---|
| 1 | 用户名(如 root, user) |
| 2 | 加密密码(格式:$算法$盐值$哈希值)* 或 ! 表示账户被锁定 |
| 3 | 上次修改密码的天数(从 1970-1-1 开始计算) |
| 4 | 密码最短使用期限(0 表示可随时修改) |
| 5 | 密码最长有效期(99999 表示永不过期) |
| 6 | 密码过期前的警告天数 |
| 7 | 密码过期后的宽限天数 |
| 8 | 账户绝对过期日期(YYYY-MM-DD) |
| 9 | 保留字段 |
常见操作示例
-
检查特定用户的密码状态:
sudo grep username /etc/shadow -
判断账户是否被锁定:
sudo passwd -S username # 输出中包含 "locked" 或 "password set" -
修改密码策略(需 root 权限):
sudo chage -l username # 查看策略 sudo chage -M 90 username # 设置密码 90 天后过期
安全注意事项
-
不要直接编辑
/etc/shadow!
修改用户密码或策略应使用以下命令:sudo passwd username # 修改密码 sudo usermod -e YYYY-MM-DD username # 设置账户过期日期 -
备份文件:
修改前建议备份:sudo cp /etc/shadow /etc/shadow.bak -
权限控制:
/etc/shadow的权限应为640(-rw-r-----),所有者是root,组为shadow:sudo ls -l /etc/shadow
为什么普通用户不能读取?
- 该文件包含密码哈希值,泄露可能导致暴力破解风险。
- 系统通过严格权限(
-rw-r-----)和shadow用户组实现保护。
如果需要审计用户密码策略,建议使用 sudo chage -l username 等安全命令替代直接查看文件。



















