Linux 忘记 root 密码怎么办?Ubuntu/CentOS/Debian 全场景重置教程(含 GRUB 修改 + Recovery Mode+Live CD 应急方案)2025最新完整图文教程

在运维场景中,“忘记 root 密码” 是最常见的紧急状况之一。多数教程只教 “操作步骤”,却很少讲 “底层原理”。本文从启动流程、参数逻辑出发,详解 Ubuntu 密码重置全过程,并对比 CentOS 等发行版的差异,帮你真正掌握核心运维技能。


一:Ubuntu 系统密码重置:GRUB修改启动参数和Recovery Mode两种方法

方法1,推荐(最常用,适用于所有 Ubuntu 版本,步骤简洁):

前置知识:GRUB 的核心角色

GRUB(Grand Unified Bootloader)是 Linux 的启动引导器,负责加载内核、传递启动参数。密码重置的核心逻辑是:通过修改 GRUB 参数,绕过登录流程,直接获取系统控制权

步骤 1:进入 GRUB 编辑模式

重启 Ubuntu 系统,系统启动过程中按下“shift”,在GRUB 启动菜单界面(显示内核版本列表的界面),选中要启动的内核版本。

选中 Advanced options for Ubuntu,按回车,进入第二张图的 “内核选择子菜单”。

选中你要修改的具体内核启动项(比如 Ubuntu, with Linux 6.17.0-4-generic,或 Ubuntu, with Linux 6.17.0-4-generic (recovery mode),然后按 “e”键 ,即可进入该内核的启动参数编辑界面(后续就能修改linux行的参数,用于重置密码等操作),不要按回车,如果按了回车请从头再来。

步骤 2:修改 GRUB 启动参数(核心操作)

在编辑界面中,找到以 linux 开头的内核启动配置行(通常包含 /vmlinuz-xxx 字样)。

1. 原始参数示例(需调整的部分):

linux    /vmlinuz-6.17.0-4-generic root=/dev/mapper/ubuntu--vg-v--0 ro 
recovery nomodeset dis_ucode_ldr ...

2. 修改后参数(关键调整):

​​​​​​​

删除 recovery(移除恢复模式的功能限制)
删除 nomodeset(若显卡兼容性良好,可删除;否则保留以避免启动卡住)
在 dis_ucode_ldr 后添加 quiet splash rw init=/bin/bash

最终修改后示例:

​​​​​​​

linux /vmlinuz-6.17.0-4-generic root=/dev/mapper/ubuntu--vg-v--0 dis_ucode_ldr quiet splash rw init=/bin/bash

步骤 3:启动修改后的系统

参数修改完成后,按 Ctrl+X 或 F10,启动带有新参数的内核。

系统会直接进入 bash 命令行(无需登录验证)。

步骤 4:重置 root 密码并重启

在 bash 命令行中,执行以下操作:

 1. 修改root密码(输入时无字符显示,正常输入即可)passwd root

2. 强制重启系统(使新密码生效)reboot-f

passwd qwe  修改qwe账号的密码,会提示输入新密码,然后再次确定新密码,完成后重启设备。

  • 为什么要这么改?

很多人会 “照抄步骤”,但理解参数逻辑才能应对复杂场景。以下是关键参数的作用(按必要性分类):

必须配置的参数

参数

作用

rw

根文件系统从默认的ro(只读)改为rw(可写)—— 否则无法修改密码文件 /etc/shadow

init=/bin/bash

替换系统第一个进程(init)为bash,直接获取命令行最高权限,跳过登录验证

什么是 “第一个进程”?

Linux 系统启动的流程是:内核加载完成 → 启动第一个进程(PID=1)→ 第一个进程启动其他所有服务/程序

这个 “第一个进程” 就像公司的 “总经理”,是所有后续工作的发起者:

  • 它的默认名称通常是 init(早期系统)或 systemd(现代系统,如 Ubuntu 16.04+、CentOS 7+)。

  • 它会负责启动登录管理器(让你输入密码的界面)、网络服务、桌面环境等所有系统功能。

“替换第一个进程为 bash” 是什么意思?

当你在 GRUB 参数中加入 init=/bin/bash 时,相当于告诉系统:“内核加载完成后,别启动默认的‘总经理’(init/systemd)了,直接启动 bash(命令行终端)作为第一个进程。”

此时:

  • bash

     会获得 “总经理” 的身份(PID=1),拥有系统最高权限。

  • 因为跳过了默认的 “总经理”(init/systemd),原本由它启动的 “登录验证程序” 也不会运行 —— 这就是为什么你能直接进入命令行,无需输入密码。

  • 可选配置的参数

参数

作用

适用场景

quiet splashquiet

 隐藏启动日志,splash 显示启动动画 —— 仅影响界面简洁度

追求启动界面美观时

nomodeset

临时禁用显卡驱动 —— 避免启动时因显卡兼容问题(如黑屏、花屏)卡住

显卡驱动异常时

recovery

启动 “恢复模式” —— 会限制部分系统功能(密码重置无需此限制)

建议删除



方法二(图形化菜单引导,操作更直观):

Ubuntu Server 的恢复模式(Recovery Mode)更适合系统使用全盘加密(LUKS)加密 LVM,进入后需手动执行 mount -o remount,rw /,但菜单引导会提示相关操作,更易排查,rw init=/bin/bash,rw 参数确保根分区启动时就是可写的,无需额外执行 mount -o remount,rw /

这一步时候,不要按e,直接回车进入recover mode模式

选择root,按下回车,出现提示后再次按下回车,进入维护页面。

mount -o remount,rw /     #这里修改文件系统为读写模式
passwd  qwe  #修改系统中qwe用户的密码
    
    

    三、centos和其他 发行版

    不同发行版核心逻辑一致(修改引导参数绕开登录),但因安全机制、启动流程不同,细节有差异。

    (一)CentOS/RHEL 系列(以 CentOS 7 为例)

    方法一,推荐(更安全可控,自动重建 SELinux ):

    步骤差异:

    1. 进入 GRUB:重启这一步走时按 e 进入编辑模式。

    核心参数:在 linux16 行末尾添加 rd.break(替代 Ubuntu 的 init=/bin/bash)。

    修改后,按下ctrl+x重启

    1. 后续操作(进入 bash 后):

       重新挂载根目录为可写mount-o remount,rw /sysroot#

    2. 2切换到chroot环境(模拟根目录)chroot /sysroot#

    3.  修改root密码passwd root# 

    4.  关键:更新SELinux安全上下文(CentOS特有),避免因权限不匹配导致 “登录失败,系统启动异常"touch /.autorelabel# 5. 退出并重启exitreboot

    5. touch /.autorelabel  是否必须运行:

    6.  检查 SELinux 状态(CentOS 系统) sestatus # 输出含“SELinux status: enabled”→需执行touch /.autorelabel;输出“disabled”→无需执行

    恭喜你,此时已经完成重置密码。


    方法二:

    1. 按 e 进入编辑模式后,找到设置语言的地方,如LANG=en_US.UTF-8,在后面追加

      rw single init=/bin/bash
      • 然后按ctrl+x重启系统,进入bash页面后修改密码,和乌班图类似。


      上面两种方法都可以重置密码,centOS 作为企业级发行版,需兼顾大量旧版本系统的运维场景,因此保留了多套跨版本的密码重置方法

      • 两种方法的核心差异

      对比维度

      rd.break

       方法

      rw init=/bin/bash

       类方法(以 rw init=/sysroot/bin/sh 为例)

      启动阶段

      在「initramfs 阶段」中断(系统尚未切换到真实根文件系统,处于早期启动流程)

      直接替换「init 进程」,尝试启动后直接进入 shell(系统已尝试挂载根文件系统)

      根文件系统状态

      初始根为 /sysroot(只读),需手动执行 mount -o remount,rw /sysroot 改为可写,再 chroot /sysroot 进入真实根

      直接将根文件系统以 rw(可写)模式挂载,无需额外 remount,仅需简单 chroot(或甚至无需 chroot

      兼容性

      对 LVM、加密卷、复杂存储场景兼容性极好(早期阶段操作,存储驱动已加载但系统未完全启动,挂载逻辑更可靠)

      仅对「简单分区(非 LVM、非加密)」友好;若根是 LVM / 加密卷,可能因系统启动流程提前中断,导致存储挂载失败

      步骤复杂度

      步骤稍多(需 remountchroot

      步骤更简洁(直接修改密码,无需额外挂载操作)


      (二)Debian 系列(与 Ubuntu 的细微区别)

      • 基本流程与 Ubuntu 一致,但旧版本中:

        • 无需删除 recovery 参数(Debian 的恢复模式兼容性更好);

        • 部分版本需添加 single 参数(进入 “单用户模式”,替代 init=/bin/bash)。

      (三)Fedora 系统

      • 操作逻辑类似 CentOS,但因使用新版 GRUB2

        • 内核行以 linux 开头(而非 CentOS 的 linux16);

        • 无需 rd.break,直接用 init=/bin/bash 即可;

        • 同样需处理 SELinux 上下文(与 CentOS 逻辑相同)。

      (四)底层原理升华:密码重置的本质是什么?

      Linux 正常启动流程是:BIOS/UEFI → GRUB → 内核 → init进程 → 登录管理器

      密码重置的核心是 **“打断默认启动流程”**,实现两步关键突破:

      1. 进程层面

        :让内核不启动默认的 init 进程(负责启动所有服务),而是直接启动 bash(或进入单用户模式),从而跳过 “登录验证” 环节。

      2. 文件系统层面

        :将根文件系统从 “只读(ro)” 改为 “可写(rw)”,才能修改存储密码的核心文件 /etc/shadow

      五、注意事项与风险提示

      1. 硬件兼容问题

        :若删除 nomodeset 后出现 “黑屏 / 花屏”,重启后需重新添加该参数(部分 NVIDIA 显卡必须保留此参数)。

      2. UEFI Secure Boot 限制

        :开启 Secure Boot 的系统会阻止修改 GRUB 参数,需先进入 BIOS 关闭该功能。

      3. 数据安全警示

        :此操作证明 “物理接触服务器即可绕过密码”,生产环境需开启BIOS 密码 + GRUB 密码双重保护。

      4. LVM / 加密分区

        :若系统使用 LVM(逻辑卷管理)或加密分区,需确保分区已正确挂载(GRUB 通常会自动处理,老旧系统可能需手动挂载)。

      总结

      无论是 Ubuntu、CentOS 还是其他 Linux 发行版,密码重置的核心逻辑均为 “打断默认启动流程,绕过登录验证,并确保根文件系统可写” —— 通过修改 GRUB 参数,让系统直接启动 Shell 获取最高权限,或进入特殊维护模式。不同发行版的差异源于启动流程设计安全机制(如 SELinux) 及存储架构(如 LVM、加密卷) 的适配性。

      如果看到这里你还是无法解决问题,比如单用户模式被禁用,recovery mode被隐藏,可以通过 Live CD进行重置,live cd类似我们重装windows时候的PE系统,比如你听过的老毛桃、U启通,可以直接在内存中运行,不再详细描述,具体操作可查阅资料。

      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值