
大家好,我是刘叨叨,一个致力于让碎片化技术系统性的运维人。
你是否遇到过这种“心跳时刻”:急需登录一台久未碰过的CentOS 7服务器,却突然发现——root密码想不起来了! 面对冰冷的登录提示符,是否感到一阵无奈?本文我将带你安全地破解它,掌握两种从单用户模式重置root密码的可靠方法,让你随时重获系统的最高权限。
重要前提:请仅在你拥有合法管理权的服务器上使用此方法。
想象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/CentOS | 几乎所有主流Linux发行版均支持,是一种更通用、经典的方法,适用于:• RHEL/CentOS |
一句话总结 | “进入维修间操作”,更安全。 | “直接在跑车上改装”,更快捷,需要对系统有一定了解。 |
第一步. 重启服务器,当屏幕出现 GRUB2引导菜单(通常伴有倒计时)时,迅速按下键盘上的 e 键,进入一个文本编辑界面,这里是内核的启动参数。

第二步. 两种方法的具体操作步骤:
rd.break 法 (推荐)这种方法在挂载真实根文件系统前中断,进入一个干净的救援环境。
1:修改启动参数
在编辑界面,找到以 linux16 开头的那一行,在末尾加一个空格,然后输入:
rd.break

接着,按下 Ctrl + x 来启动。
2:按顺序执行命令
系统会进入一个临时的救援Shell (switch_root:/#)。请严格按顺序执行以下命令:
# 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# 提示符。
# 1. 直接修改root密码
passwd
# (根据提示输入两次新密码)
# 2. 处理SELinux标签,未开启可忽略
touch /.autorelabel
# 3. 重启系统
exec /sbin/init
# 如有异常可以使用 `reboot -f` 命令强制重启无论选择哪条路,牢记以下两点,它们直接决定操作成败:
touch /.autorelabel 命令。这个操作会在根目录创建一个标记文件,系统下次启动时会据此重新为所有文件打上正确的安全标签。如果跳过,很可能导致新密码无法登录。通过这次实战,我们学会的不仅仅是“密码重置”这个技巧,更触及了Linux启动流程的一个核心控制点——如何通过内核参数影响系统的初始化行为。
关注【刘叨叨趣味运维】公众号,用有趣的方式,啃下最硬核的技术。咱们下期见!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。