跳到主要内容
无限进步
返回

重置 root 用户密码

重置 root 用户密码

忘记 root 密码是 Linux 用户常遇到的麻烦。好在只要能物理接触到机器,几乎总有办法把它改回来。下面按从简到繁的顺序介绍四种方法。

一、使用 sudo

如果系统里还有一个带 sudo 权限的普通用户,事情就好办了。登录进去,执行:

sudo passwd root

只有当没有这样的用户、或者所有能用的账号都登不进去时,才需要往下看。

二、使用 debug shell

systemd 自带一个调试用的 shell,可以借它来改密码。

第一步,在启动加载器(通常是 GRUB)里,给内核参数追加 systemd.debug_shell

第二步,正常启动。开机后,debug-shell.service 会在 tty9 挂一个 root shell,按 Ctrl-Alt-F9 切过去。

第三步,运行 passwd,输入新密码。

第四步,改完记得关掉这个服务,否则以后任何人只要物理接触到机器,都能拿到 root。

systemctl stop debug-shell.service

三、用 Bash 作为 Init

思路是跳过 systemd,让内核直接把 Bash 当 1 号进程跑起来。这样系统还来不及要求登录,你就已经是 root。

第一步,在启动项的内核参数里追加 init=/bin/bash

第二步,启动后会直接掉进 Bash 提示符。此时根文件系统是只读的,要重新挂载成可读写:

mount -n -o remount,rw /

第三步,用 passwd 改密码。

第四步,强制重启。别用 reboot,因为 systemd 没跑起来,正常流程走不通:

reboot -f
Warning

这个方法有个坑。系统只加载了 Bash,很多硬件驱动没初始化,某些键盘(笔记本内置键盘、无线键盘尤其常见)在提示符后可能敲不了字。遇到这种情况,只能换别的方法。

四、使用 LiveCD

前三招都不行时,就用一张 LiveCD 或 U 盘启动盘。任何发行版都行,架构对得上就好。

用 LiveCD 也有几种玩法:直接编辑 /etc/shadow 清空密码字段,或者 chroot 进去跑 passwd。前者手快容易改坏,所以这里只讲后者。

第一步,用 LiveCD 启动,把原系统的根分区挂到 /mnt

第二步,执行下面的命令。--root 参数让 passwd 直接作用于挂载点下的系统,不用真的 chroot,也不问旧密码。

passwd --root /mnt 用户名

第三步,卸载,重启,用新密码登录。

umount /mnt
reboot

分享这篇文章: