重要前提请仅在你拥有合法管理权的服务器上使用此方法。二、核心原理在启动链条上“巧妙介入”想象Linux正常启动是一场接力赛GRUB2 - 内核 - systemd - 登录界面。我们的目标就是在内核完成工作后抢在systemd拉起登录服务之前拦截并获取一个拥有root权限的Shell。这一切的开关就在于编辑GRUB2传递给内核的启动参数。三、两种方法详解选择你的路径主要有两种思路区别在于切入的时机和获得的Shell环境。下表帮你快速看清全貌特性对比方法一rd.break方法二init/bin/sh核心参数在行尾添加rd.break将ro改为rw2. 行尾添加init/bin/sh进入的环境系统初始化早期的救援Shell (switch_root:/#)一个以sh为PID 1的根Shell (sh-4.2#)根分区状态挂载在/sysroot下默认只读直接挂载为根且已设为读写操作复杂度需多执行mount和chroot步骤步骤更简单直接安全性与可控性⭐⭐⭐⭐⭐ 更高原系统未完全初始化⭐⭐⭐⭐ 直接操作真实根文件系统适用发行版主要适用于使用systemd和dracut构建initramfs的现代发行版如• RHEL/CentOS7/8及其衍生版 Rocky Linux, AlmaLinux• Fedora• openEuler几乎所有主流Linux发行版均支持是一种更通用、经典的方法适用于• RHEL/CentOS6/7/8等• Ubuntu, Debian 及其衍生版• openSUSE, SLES• Arch Linux 等一句话总结“进入维修间操作”更安全。“直接在跑车上改装”更快捷需要对系统有一定了解。四、具体操作步骤如下第一步.重启服务器当屏幕出现GRUB2引导菜单通常伴有倒计时时迅速按下键盘上的e键进入一个文本编辑界面这里是内核的启动参数。第二步. 两种方法的具体操作步骤方法一分步为营的rd.break法 (推荐)这种方法在挂载真实根文件系统前中断进入一个干净的救援环境。1修改启动参数在编辑界面找到以linux16开头的那一行在末尾加一个空格然后输入rd.break接着按下Ctrl x来启动。2按顺序执行命令系统会进入一个临时的救援Shell (switch_root:/#)。请严格按顺序执行以下命令代码语言bashAI代码解释# 1. 将挂载的根分区重新挂载为可读写 mount -o remount,rw /sysroot # 2. 将根目录切换到原始系统的根分区 chroot /sysroot # 3. 现在可以修改root密码了 passwd # (根据提示输入两次新密码) # 4. 处理SELinux安全标签未开启可跳过 touch /.autorelabel # 5. 退出chroot环境 exit # 6. 重启服务器 exit # 执行第二个 exit 后系统将自动重启。方法二直截了当的init/bin/sh法这种方法让系统启动的第一个进程直接是Shell非常直接。1修改启动参数同样在linux16行进行两处修改找到ro表示只读将其改为rw读写。在行尾添加init/bin/sh完成后按Ctrl x启动。2执行命令启动后你会直接获得一个sh-4.2#提示符。代码语言bashAI代码解释# 1. 直接修改root密码 passwd # (根据提示输入两次新密码) # 2. 处理SELinux标签未开启可忽略 touch /.autorelabel # 3. 重启系统 exec /sbin/init # 如有异常可以使用 reboot -f 命令强制重启五、成功关键与避坑指南无论选择哪条路牢记以下两点它们直接决定操作成败️ 务必处理SELinuxCentOS 7默认启用SELinux安全模块确认已关闭SELinux可跳过一般会关闭。修改密码后必须执行touch /.autorelabel 命令。这个操作会在根目录创建一个标记文件系统下次启动时会据此重新为所有文件打上正确的安全标签。如果跳过很可能导致新密码无法登录。 注意参数格式在GRUB编辑界面添加参数时确保每个参数之间用空格分隔否则系统可能无法正确解析导致启动失败。六、总结从应急操作到深度理解通过这次实战我们学会的不仅仅是“密码重置”这个技巧更触及了Linux启动流程的一个核心控制点——如何通过内核参数影响系统的初始化行为。