半夜收到前同事的消息:一台跑批任务的服务器,root密码怎么都想不起来了,业务暂时没事,但要做配置变更时必须得有管理员权限。他问我能不能“破解”一下。其实在运维圈子里,大家口中的“root密码破解”,十有八九不是电影里那种盯着终端敲几行代码就把系统攻破的场景,而是另一件事——把你自己有权限、有物理访问能力或控制台入口的设备,在忘记密码之后合法、快速地把root密码重置回来。这是一项每个搞Linux的人都该熟练掌握的恢复技能,不是灰色技巧。
本文就围绕“重置/修改root密码”这件事来写,覆盖CentOS、RHEL、Ubuntu、Debian、云服务器、虚拟机等常见场景,讲清楚每条恢复路径背后的原理,再配上实际操作步骤和踩坑记录。需要先说明一点:所有操作的前提是这台设备归你所有,或者你拥有明确的管理授权。把别人系统的密码重置掉,那属于违法行为,别碰。
1. 先判断你的处境,再决定用哪条恢复路径
很多人一听到“root密码忘了”就立刻准备重启机器、进GRUB、敲内核参数,其实路走窄了。真正高效的运维做法是先给当前处境分类,因为不同场景对应的恢复成本天差地别。
1.1 还有sudo权限的账号可用:一条命令就解决
如果系统里还留着某个普通账号,而且这个账号有sudo权限,那完全不需要重启服务器,直接登进去执行:
bash复制sudo passwd root
输入新密码,再确认一遍即可
这一条命令就是修改root密码的标准姿势。sudo会拿当前用户的管理权限去更新/etc/shadow里的root哈希值,改完立即生效,连ssh会话都不用断开,下次root登录就用新密码。如果你的普通账号属于sudo组,或者/etc/sudoers里配置了免密sudo,那连当前用户的密码都不用输。
我见过很多人在这一步卡住,是因为他们的普通账号已经没有sudo权限了,或者压根就不记得普通账号的密码。这时候才需要考虑物理控制台级别的恢复手段。
1.2 完全进不去系统,但能接触控制台或物理机
这是最经典的重置场景:服务器能开机,能进入GRUB引导菜单,但没有任何一个账号密码能用。此时你的恢复通道是“引导阶段注入参数”,让系统在初始化时不加载正常的登录认证流程,直接给你一个root shell。
前提是你必须能接触到机器的物理控制台,或者虚拟机管理界面(如vSphere Web Client里打开终端窗口),再或者云服务器的VNC控制台。如果你只能靠ssh远程连接,机器拒绝一切登录,那就只能请机房配合或走云厂商控制台通道。
1.3 云服务器和VPS:优先用云控制台的重置密码功能
很多人不知道,阿里云、腾讯云、华为云这些主流平台的控制台里,基本都有“重置实例密码”或“重置root密码”的入口。操作逻辑一般是:在实例列表里选择这台机器,点击重置密码,输入新密码,然后强制重启或按系统提示重启,密码就生效了。
好处是云厂商已经替你把引导参数、安全组、agent联动这些细节都处理好了,不需要你自己去改GRUB。缺点是有时候控制台重置要求实例必须处于“运行中”或“已停止”状态,而且重置后旧密码直接失效。这个我后面专门讲。
1.4 动手之前先确认引导方式和GRUB版本
这一步是很多新手的坑:重启后狂按键盘但没进到GRUB菜单,或者进去了找不到对应行。原因多半是没有区分传统BIOS和UEFI。
传统BIOS + GRUB时代,开机时可能会直接显示GRUB菜单;UEFI + GRUB2时代,很多Linux发行版默认不显示菜单,需要按住Shift(Ubuntu系)或Esc(部分Windows双系统机器)才能调出来。物理机上开机自检通过后快速按方向键或Shift键,虚拟机的BIOS启动画面也会有一段短暂的提示。如果你是云服务器,一般需要在VNC画面中手动切换“重启并进入GRUB菜单”时快速按Esc或Shift,这一步多试几次就有感觉了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 内核启动参数重置密码的原理,搞清楚为什么有效
直接给步骤没什么意思,因为你哪怕照着做成功了,换个版本系统可能又抓瞎。先花几分钟把原理吃透,后面所有操作都一通百通。
2.1 Linux的用户密码到底存在哪里
Linux系统里,用户的密码哈希并不存在/etc/passwd里,而是存在/etc/shadow。这个文件默认只有root能读能写,每行对应一个用户,格式大致如下:
code复制root:$6$RANDOMSALT$FgL4...:19000:0:99999:7:::
第二个字段就是密码哈希,前面那个$6$表示使用SHA-512算法,$1$是MD5,$5$是SHA-256,$y$是某些新系统上的yescrypt演算法。你执行passwd root时,它会生成一个新的哈希,替换掉这一串字符。所以不管是重置还是修改,最终动作都是让内核态工具更新这个字段。理解这点后你就能明白:只要我们能获得一个能写/etc/shadow的root shel
