首页 > Sysadmin > 正文

Linux 重置 root 密码:三种场景实测

huyuanwen 2026-11-02 Sysadmin

草稿待审;源站 linux.zaixianjisuan.com 被宝塔 WAF 拦截(302 跳转 challenge 页),骨架来自 Ubuntu 官方帮助文档与 WSL2 实测。

TL;DR:能进系统就用 passwd 或 chpasswd,WSL2 直接走 root shell;物理机 / VM 用 GRUB 单用户模式或 systemd rescue 目标获得 root shell,再执行 passwd。

一、WSL2:直接进入 root shell 改密

WSL2 不走 GRUB,没有传统启动流程;Windows 侧可以用 wsl.exe -d <发行版名> -u root 直接以 root 身份启动。进入后直接执行:

# 以 root 身份改 root 自己的密码,无需旧密码
passwd root

# 批量改多个账号(适合脚本)
echo "user1:NewP@ss1" | chpasswd

WSL2 Ubuntu 24.04 实测:root 用户执行 passwd root 时系统不要求输入旧密码,直接读取新密码并更新 /etc/shadow[1]。/etc/shadow 权限为 -rw-r----- root:shadow,普通用户无权读写,只有 root 可直接修改。如果某个账号被误锁(密码字段以 ! 开头),用 passwd -u <账号> 解锁。

回滚:如果新密码写错,只要仍持有 root shell,重新执行 passwd root 改回正确密码即可;chpasswd 同理。

二、物理机 / VM:GRUB 单用户模式 + init=/bin/bash

适用于没有 sudo 权限又无法登录的情况。开机时在 GRUB 菜单按 e 编辑内核启动行,在行尾追加 init=/bin/bash,然后按 Ctrl-x 或 b 启动,init= 这个内核参数的语义见手册页[2]。系统会直接进入无密码 root shell。

# 进入 root shell 后,根文件系统默认只读,先改为可写
mount -o remount,rw /

# 修改密码
passwd root

# 回到正常启动
exec /sbin/init

风险:init=/bin/bash 跳过 systemd,不会启动网络和必要服务;如果根分区是 LUKS / LVM,需要先手动解密和激活,否则 mount 可能看不到完整设备。此外,部分 UEFI 安全启动机型会在 GRUB 中屏蔽编辑功能,该方法失效。

回滚:只要执行 exec /sbin/init,系统继续正常启动流程;如果密码未改,root 密码不变。

三、systemd rescue / emergency 目标

systemd 原生提供两个恢复目标:rescue.target(基本系统,root shell)和 emergency.target(最小环境,仅 root 文件系统挂载后进入)。在 GRUB 菜单中选中系统,按 e 编辑,找到 linux 行,将结尾的 quiet splash(如有)替换为:

# rescue 模式:启动基础服务后给 root shell
systemd.unit=rescue.target

# emergency 模式:不挂载其他文件系统,适合根分区受损时
systemd.unit=emergency.target

编辑后按 Ctrl-x 启动,系统停在 root 提示符,直接执行 passwd root 修改即可。

GRUB 编辑行中的 ro 参数表示根文件系统只读;进入 recovery shell 后同样需要 mount -o remount,rw / 才能写入 /etc/shadow,ro/rw 与 remount 的定义见 mount(8)[3]。

回滚:重启不选 recovery 即可正常进入系统。

排错速查表

现象 原因 处理
passwd: Authentication token manipulation error 根分区只读或 /etc/shadow 权限异常 mount -o remount,rw / 再试;确认 ls -la /etc/shadow 权限为 600
GRUB 菜单不出现 UEFI 快速启动或 SHIFT 按键时机不对 开机立即长按 SHIFT,或进 BIOS 关闭 Fast Boot
init=/bin/bash 后找不到 passwd 最小环境 PATH 不完整 用绝对路径 /usr/bin/passwd root
emergency 模式后 mount 看不到其他分区 emergency 只挂载根分区 用 findmnt 查看现有挂载,手动 mount /dev/sdXn /mnt
WSL2 执行 wsl --user root 报错 WSL 发行版未安装或名称不对 wsl --list --verbose 确认发行版名称

局限性

  • WSL2:无 GRUB、无传统启动流程,方法二/三的 boot-time 操作不适用;只能通过 wsl.exe -u root 进入。
  • 物理机 UEFI Secure Boot:某些厂商会锁定 GRUB 编辑权限,GRUB 方法失效。
  • LUKS 全盘加密:init=/bin/bash 或 emergency.target 都需要手动打开 LUKS 容器后才能访问根分区,步骤超出本文范围。
  • usermod -p 可以直接写入密文哈希(绕过 passwd 交互),本文未实测该路径;需要时参考 man usermod[1]。

实测记录

  • 测试机:WSL2 Ubuntu 24.04.4 LTS,内核 6.6.114.1-microsoft-standard-WSL2,2026-11-01 以 root 执行。
  • passwd root 不要求旧密码,直接更新 /etc/shadow,实测通过。
  • chpasswd 批量修改通过,哈希字段以 $y$(yescrypt)开头,符合 Ubuntu 24.04 默认加密。
  • passwd -l 在 shadow 字段前加 !;passwd -u 当字段为 ! 时提示需手动设密码,不会自动解锁(与文档一致)[1]。
  • systemctl list-unit-files 确认 rescue.target 和 emergency.target 均为 static 内置单元。
  • WSL 中 /etc/default/grub 不存在,确认无传统 GRUB 配置。

常见提问

  • WSL2 里 root 密码忘了怎么办?不用进 recovery,直接 Windows 终端执行 wsl.exe -d Ubuntu-24.04 -u root -- passwd <你的用户名> 即可。
  • 有 GRUB 密码保护怎么办?GRUB 密码阻止了编辑启动行,需要从 Live CD/USB 挂载系统后 chroot 修改 /etc/shadow。
  • passwd -d 和空密码是一回事吗?passwd -d 移除密码,该账号登录时不需要密码,安全隐患极大,测试完立刻设回密码。
  • chage -d 0 是什么用途?强制下次登录时必须改密码,常用于批量重置后的策略,不影响当前 root 密码恢复流程。
  • 云服务器(AWS / GCP / Azure)没有物理显示器怎么办?云平台控制台(如 AWS EC2 Serial Console)一般提供 GRUB 编辑界面,流程与物理机相同;各平台文档有详细指引。

参考资料

文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。