当前位置: 首页 > news >正文

Linux 系统忘记 root 密码?紧急救援方案与原理详解

在 Linux 系统管理中,“忘记 root 密码” 是最常见的紧急场景之一。root 作为系统的超级用户,掌控着所有权限,一旦丢失其密码,常规登录流程将完全失效。此时若没有有效的救援方案,可能面临系统无法使用甚至重装的风险。本文将基于 Linux 系统的启动机制,详细讲解通过rd.break救援模式重置 root 密码的完整流程、核心原理及注意事项,帮助管理员快速恢复系统控制权。

核心方案:通过rd.break救援模式重置密码

rd.break是 Linux 内核提供的救援参数,可在系统初始化早期中断启动,进入临时 shell 环境。以下是完整操作步骤:

步骤 1:进入 GRUB 引导菜单,编辑启动参数

  1. 重启 Linux 系统,在开机自检完成后,会进入 GRUB 引导菜单。
  1. 选中需要启动的系统内核,按 **e键 ** 进入 GRUB 编辑模式,此时会看到内核启动的命令行配置。

步骤 2:添加rd.break参数,启动救援模式

  1. 在 GRUB 编辑界面中,找到以linux16或linux开头的行。
  1. 在该行的末尾添加参数:rd.break。
  1. 添加完成后,按 **Ctrl + X** 组合键,系统将按照修改后的参数启动,进入救援 shell 环境。此时界面会显示sh-5.1#提示符,表示已进入临时救援终端。

步骤 3:重新挂载/sysroot为可读写模式

进入救援模式后,系统的根文件系统(实际系统的根目录)被映射为/sysroot,但默认处于只读(read-only) 状态 —— 这是 Linux 的保护机制,防止救援环境中误修改系统文件。而修改密码需要写入/etc/shadow,因此必须先重新挂载为可读写模式:

sh-5.1# mount -o rw,remount /sysroot
  • 命令解析:mount -o remount表示 “重新挂载已挂载的文件系统”,rw参数指定 “可读写权限”,/sysroot是目标文件系统的挂载点。

步骤 4:切换到实际系统的根目录(chroot)

救援模式的默认根目录是临时的initramfs文件系统(而非实际系统的根目录),若直接执行passwd命令,修改的只是临时环境的配置,重启后会失效。因此需要通过chroot命令切换到实际系统的根目录:

sh-5.1# chroot /sysroot
  • 命令解析:chroot(change root)会将当前 shell 的根目录切换为/sysroot,后续所有命令都将在实际系统的根目录下执行,相当于 “进入了真实的系统环境”。此时提示符可能变为sh-4.4#(不同系统版本略有差异)。

步骤 5:重置 root 密码

在chroot环境中,执行以下命令直接设置新的 root 密码(无需输入旧密码):

sh-4.4# echo 新密码 | passwd --stdin root
  • 示例:若要将 root 密码设为Redhat@123,命令为:
sh-4.4# echo Redhat@123 | passwd --stdin root
  • 命令解析:echo 新密码会输出新密码字符串,通过管道|传递给passwd --stdin root;--stdin参数表示 “从标准输入读取密码”,从而跳过旧密码验证步骤,直接覆盖 root 的旧密码。

执行成功后,系统会提示 “passwd: all authentication tokens updated successfully”,表示密码已重置。

步骤 6:处理 SELinux 安全上下文(关键!)

系统启用 SELinux,直接修改/etc/shadow会导致该文件的 SELinux 安全上下文异常 ——SELinux 会认为修改后的文件 “不安全”,可能在下次启动时阻止 root 登录。因此需要创建一个触发文件,让系统启动时自动修复上下文:

sh-4.4# touch /.autorelabel
  • 命令解析:touch /.autorelabel会在实际系统的根目录(/)下创建.autorelabel文件;系统下次启动时,检测到该文件后会自动重新标记所有文件的 SELinux 安全上下文,确保权限符合安全策略。

步骤 7:退出救援环境,重启系统

  1. 先退出chroot环境,回到救援 shell:
  2. 再退出救援 shell,让系统继续完成启动流程:
  3. 系统重启时,会先执行 SELinux 上下文重新标记,标记完成后会正常进入登录界面。此时使用新设置的 root 密码即可登录系统。

http://www.dtcms.com/a/360163.html

相关文章:

  • 【STM32】外部中断(下)
  • kkfile一键部署-ubuntu版
  • Transformer中的核心概念III-Attention
  • 江协示例3.1LED闪烁,下载程序后要复位LED才点亮的设置。
  • 随时随地开发:通过 FRP 搭建从 Ubuntu 到 Windows 的远程 Android 调试环境
  • leetcode_48 旋转图像
  • DAY50打卡
  • Ansible配置文件与主机清单
  • Library cache lock常见案例分析(二)
  • 在Windows的wsl中如何以root登录Ubuntu
  • KMP 算法相关练习题
  • AI 重构内容创作:从文案生成到视频剪辑,创作者该如何与 AI 协同共生?
  • 用产品经理的思维,重构AI时代的增长Playbook
  • CatBoost vs XGBoost:两大Boosting框架的全面对比
  • 【AI智能体】Dify 实现自然语言转SQL操作数据库实战详解
  • 暄桐零基础书法入门课《写字旅行攻略》报名啦
  • 鸿蒙开发入门:ArkTS 运算符与分支循环全解析(含实战案例 + 避坑指南)
  • 常见的两栏布局实现方法
  • P2P技术应用:去中心化
  • Transformer架构三大核心:位置编码(PE)、前馈网络(FFN)和多头注意力(MHA)。
  • Reactor模式--单线程版本
  • HTML5国庆网站源码
  • Unity学习----【数据持久化】二进制存储(二)--文件流
  • 有关指针的认知盲区:指针大小,决定因素,指针变量
  • Nano Banana:下一代AI图像创作与编辑指南
  • [强网杯2019]随便注-----堆叠注入,预编译
  • 主网上线后生态极速扩张的 Berachain 生态,有哪些值得关注的项目?
  • Java全局异常处理器:优雅处理系统异常
  • 【Android】LayoutInflater 控件实例化的桥梁类
  • 【重学MySQL】九十五、Linux 下 MySQL 大小写规则设置详解