草稿待审;源站 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 编辑界面,流程与物理机相同;各平台文档有详细指引。
参考资料
- [1] passwd(1) – Linux manual page (man7.org)(passwd(1) man7)
- [2] bootparam(7) – Linux manual page (the kernel's init= parameter)(bootparam(7) man7)
- [3] mount(8) – Linux manual page (ro/rw, -o remount)(mount(8) man7)
文中主要命令已在 WSL Ubuntu(24.04)实测并核对其在 Debian 系与通用发行版的文档口径。