在linux系统中,出于安全设计考量,所有用户的密码都不会以明文形式存储,root用户也不例外,因此正常情况下无法直接查看root用户的明文密码。linux系统采用了单向加密算法处理用户密码,仅存储加密后的哈希值,即使获取到存储文件也无法反向推导出原始密码。
linux系统密码存储相关文件
linux系统中与用户密码存储相关的核心文件有两个,分别是/etc/passwd和/etc/shadow,二者的作用不同:
| 文件名称 | 存储内容 | 权限设置 |
|---|---|---|
| /etc/passwd | 存储用户的基本信息,包括用户名、用户ID、组ID、家目录、登录shell等,早期该文件会存储密码哈希值,现在仅用x占位 | 所有用户可读 |
| /etc/shadow | 存储用户的密码哈希值、密码修改时间、密码有效期等敏感信息,仅root用户有权限读取 | 仅root用户可读 |
为什么无法查看root明文密码
linux系统对用户密码的处理流程如下:
- 用户设置或修改密码时,系统会使用
SHA-512、MD5等单向哈希算法对密码进行加密,生成固定长度的哈希字符串 - 哈希算法是单向的,只能从明文生成哈希值,无法从哈希值反向推导出原始明文,因此即使拿到
/etc/shadow中的root密码哈希值,也无法得到原始密码 /etc/shadow文件默认仅root用户有读取权限,普通用户甚至无法查看该文件的内容,进一步提升了密码的安全性
查看shadow文件中root密码哈希的示例
如果是root用户,可以查看/etc/shadow文件中root用户的密码哈希信息,命令如下:
# 仅root用户可执行,查看shadow文件内容 cat /etc/shadow | grep root
输出的内容格式如下,其中第二个字段就是root密码的哈希值:
root:$6$abcd1234efgh5678ijkl9012mnop3456qrst7890uvwx1234yzab5678cd:19000:0:99999:7:::
哈希值的结构通常为$算法标识$salt值$哈希结果,其中$6$代表使用SHA-512算法,salt是加密时加入的随机字符串,用于提升哈希破解难度。
忘记root密码的正确处理方式
如果忘记root密码,不需要尝试破解哈希值,正确的做法是重置密码:
- 重启系统,在启动引导界面按e键进入编辑模式
- 找到linux开头的启动行,在行尾添加
init=/bin/bash,然后按Ctrl+x启动进入单用户模式 - 挂载根文件系统为可写模式:
mount -o remount,rw / - 执行密码重置命令:
passwd root,按照提示输入新密码即可 - 重启系统,使用新密码登录root用户
相关注意事项
不要尝试使用第三方工具破解/etc/shadow中的密码哈希,一方面破解难度极高,另一方面未经授权破解系统密码属于违规行为,可能会带来法律风险。另外,日常使用中建议为root用户设置复杂度较高的密码,避免使用生日、简单数字组合等容易被猜到的密码,同时可以配置sudo权限给普通用户,减少直接使用root用户操作的情况,进一步提升系统安全性。