能改,分两种情况:有权限时直接用passwd或sudo passwd root修改;无权限时需中断GRUB,按发行版选择rw init=/bin/bash(Ubuntu等)或rd.break(RHEL系),正确挂载根文件系统并执行passwd root,SELinux启用时须补touch /.autorelabel。

能改,但分两种情况:你还能登录系统(有 root 或 sudo 权限),或者 root 密码彻底忘了、进不去系统。前者用 passwd 一行命令搞定;后者必须中断 GRUB 启动流程,手动挂载并重设,漏一步就白忙。
有权限时直接用 passwd 修改
这是最安全、最推荐的方式,不碰启动参数、不改挂载状态,所有发行版通用。
- 如果你已经是 root(比如刚
su -进来),直接运行passwd,按提示输两次新密码即可 - 如果你是普通用户但属于 sudo 组,运行
sudo passwd root,它先验证你的用户密码,再让你设 root 新密码 - 新密码要满足 PAM 策略(比如最小长度、大小写、数字等),否则报错
passwd: password unchanged - 改完立即生效,但已打开的 shell 会话仍保持原身份,新登录或
su才用新密码
密码遗忘时必须进 GRUB 编辑启动参数
所有发行版都绕不开这步:中断 GRUB,加参数跳过登录验证。关键不是“选哪个参数”,而是“加对位置 + 后续挂载正确”。
- 启动时按 Shift(Ubuntu/Debian/Arch)或 Esc(RHEL/CentOS/Rocky/Alma)调出 GRUB 菜单,选中目标内核后按
e - 找到以
linux或linuxefi开头的行,光标移到行尾 - 删掉末尾的
ro quiet splash $vt_handoff(或类似只读参数),替换成:
— Ubuntu/Debian/Arch 等:rw init=/bin/bash
— RHEL/CentOS 7+/Rocky/Alma:rd.break -
Ctrl+X启动后:
— 用init=/bin/bash进入的环境,根目录就是/,但默认只读,必须先执行mount -o remount,rw /
— 用rd.break进入的环境,根在/sysroot下且只读,需先mount -o remount,rw /sysroot,再chroot /sysroot
SELinux 环境下漏掉 touch /.autorelabel 会卡死
CentOS/RHEL/Fedora 默认启用 SELinux,重置密码后若不打标记,下次启动会卡在 relabel 阶段——黑屏、光标闪烁、无任何输出,等 5–10 分钟也没反应。这不是失败,是 SELinux 在强制校验上下文。
- 只有用了
rd.break的 RHEL 系发行版才必须做这步;init=/bin/bash方式在 Ubuntu 等系统上无需此操作 - 执行
touch /.autorelabel后再exit或reboot -f,系统重启时自动完成 relabel - 别信“清空
/etc/shadow中 root 字段”这种老方案,2026 年已不可靠,且可能破坏账户状态
真正容易被忽略的是挂载状态和 SELinux 标记这两步:很多人输完 passwd root 就直接 reboot,结果发现密码没生效,或者重启后卡住不动——问题不在密码本身,而在文件系统没写入权限,或 SELinux 拒绝加载上下文。











