大家好,我是刘叨叨,一个致力于让碎片化技术系统性的运维人。
你是否遇到过这种“心跳时刻”:急需登录一台久未碰过的CentOS 7服务器,却突然发现——root密码想不起来了! 面对冰冷的登录提示符,是否感到一阵无奈?本文我将带你安全地破解它,掌握两种从单用户模式重置root密码的可靠方法,让你随时重获系统的最高权限。
一、这为什么是必备技能?
- 1. 应对紧急状况:当所有普通登录途径失效时,这是最后的防线。
- 2. 进行深度维护:需要绕过常规登录以执行底层系统修复。
- 3. 深入理解系统:亲手操作一遍,你会对Linux启动和权限机制有更直观的认识。
重要前提:请仅在你拥有合法管理权的服务器上使用此方法。
二、核心原理:在启动链条上“巧妙介入”
想象Linux正常启动是一场接力赛:GRUB2 -> 内核 -> systemd -> 登录界面。我们的目标,就是在内核完成工作后,抢在systemd拉起登录服务之前,拦截并获取一个拥有root权限的Shell。
这一切的开关,就在于编辑GRUB2传递给内核的启动参数。
三、两种方法详解:选择你的路径
主要有两种思路,区别在于切入的时机和获得的Shell环境。下表帮你快速看清全貌:
| | |
|---|
| 核心参数 | | 1. 将ro改为rw2. 行尾添加init=/bin/sh |
| 进入的环境 | 系统初始化早期的救援Shell (switch_root:/#) | 一个以sh为PID 1的根Shell (sh-4.2#) |
| 根分区状态 | | |
| 操作复杂度 | | |
| 安全性与可控性 | | |
| 适用发行版 | 主要适用于使用systemd和dracut构建initramfs的现代发行版,如:• RHEL/CentOS 7/8 及其衍生版( Rocky Linux, AlmaLinux)• Fedora• openEuler | 几乎所有主流Linux发行版均支持,是一种更通用、经典的方法,适用于:• RHEL/CentOS 6/7/8 等• Ubuntu, Debian 及其衍生版• openSUSE, SLES• Arch Linux 等 |
| 一句话总结 | | “直接在跑车上改装”,更快捷,需要对系统有一定了解。 |
四、具体操作步骤如下:
第一步. 重启服务器,当屏幕出现 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 行进行两处修改:
- 1. 找到
ro(表示只读),将其改为 rw(读写)。
完成后,按 Ctrl + x 启动。
2:执行命令
启动后,你会直接获得一个 sh-4.2# 提示符。
# 1. 直接修改root密码passwd# (根据提示输入两次新密码)# 2. 处理SELinux标签,未开启可忽略touch /.autorelabel# 3. 重启系统exec /sbin/init# 如有异常可以使用 `reboot -f` 命令强制重启
五、成功关键与避坑指南
无论选择哪条路,牢记以下两点,它们直接决定操作成败:
- 1. 🛡️ 务必处理SELinux:CentOS 7默认启用SELinux安全模块(确认已关闭SELinux可跳过,一般会关闭)。修改密码后,必须执行
touch /.autorelabel 命令。这个操作会在根目录创建一个标记文件,系统下次启动时会据此重新为所有文件打上正确的安全标签。如果跳过,很可能导致新密码无法登录。 - 2. 🔧 注意参数格式:在GRUB编辑界面添加参数时,确保每个参数之间用空格分隔,否则系统可能无法正确解析导致启动失败。
六、总结:从应急操作到深度理解
通过这次实战,我们学会的不仅仅是“密码重置”这个技巧,更触及了Linux启动流程的一个核心控制点——如何通过内核参数影响系统的初始化行为。
关注【刘叨叨趣味运维】,用有趣的方式,啃下最硬核的技术。咱们下期见!