Linux 修改 root 密码和找回密码,三种方法全搞定

为什么 root 密码问题总是最让人头疼?

在 Linux 服务器运维里,忘记普通用户密码还不算太麻烦,最怕的是 root 密码出问题。因为一旦 root 密码忘了,很多关键操作都做不了:安装软件、修改系统配置、重启服务、修 SSH、恢复业务,都会卡住。

更现实的是,很多人碰到 root 密码问题时,脑子里只有一句话:“是不是只能重装系统了?” 其实大多数情况下并不用。只要系统盘没坏、引导没彻底炸掉,Linux 通常都能通过系统内部修改、sudo 提权重设,或者进入单用户/救援模式把密码找回来。

这篇文章不讲虚的,直接把最常见、最实用的三种方案讲清楚:

  1. 已经登录系统,直接修改 root 密码
  2. 有 sudo 权限,重置 root 密码
  3. 忘记 root 密码,进入单用户模式找回

你不需要一次全学会,只要记住:先判断你还能不能进系统,再选对应方案。

先搞清楚:你到底属于哪一种情况?

在动手前,先别急着重启系统。root 密码问题大致分为三类:

情况一:你已经能用 root 登录。
这种最简单,直接执行 passwd 就能改。

情况二:你不能用 root 登录,但你有 sudo 权限的普通用户。
这种也不难,用 sudo passwd root 就能重置。

情况三:root 密码忘了,也没有 sudo 用户,SSH 还进不去。
这时就不能靠普通命令了,要走 GRUB / 单用户模式 / VNC 或救援模式来重置。

所以这篇文章的核心逻辑不是死记命令,而是先判断当前权限,再选对方案。这样你在真实运维场景里才不会慌。

方案一:已经能登录 root,直接修改密码

如果你当前已经是 root 身份,或者已经通过 su - 切到了 root,那么修改密码其实只有一条命令:

passwd

执行之后,系统会提示你输入新密码并确认一次。输入时终端不会显示字符,这是 Linux 的正常安全机制,不是键盘坏了。

New password:
Retype new password:
passwd: all authentication tokens updated successfully.

如果你想更明确一点,也可以写成下面这样:

passwd root

两种写法本质上差不多,区别只是一个默认改当前用户密码,一个明确指定改 root。

这一方案适合谁?
适合你还记得当前 root 密码、能正常登录,只是出于安全考虑想换一个更强的新密码。

建议顺手做两件事:

  1. 把新密码更新到密码管理器,不要再靠脑子硬记
  2. 如果服务器长期公网暴露,考虑后续改成 SSH 密钥登录,而不是长期依赖 root + 密码

方案二:有 sudo 权限,用普通用户重置 root 密码

很多服务器为了安全,并不允许直接用 root 登录,而是先用普通用户登录,再通过 sudo 提权。这种情况下,如果你只是忘了 root 密码,但还有一个能执行 sudo 的账号,其实一样能把 root 密码改掉。

命令如下:

sudo passwd root

执行后,系统通常会先要求你输入当前普通用户自己的密码,用于确认你有管理员权限。然后再输入新的 root 密码两次。

[user@server ~]$ sudo passwd root
[sudo] password for user:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

这个方法特别适合云服务器场景。因为很多云主机默认就是让你用普通用户 + sudo 维护系统,而不是裸奔 root。

注意两个细节:

  1. 如果你执行 sudo passwd root 提示无权限,说明当前用户不在 sudoers 里,这条路走不通
  2. 如果系统本身禁用了 root 密码登录,修改完 root 密码后也不代表你能直接 SSH 用 root 登录,还要看 /etc/ssh/sshd_config 里的 PermitRootLoginPasswordAuthentication

也就是说,改了 root 密码 ≠ 一定能用 root 远程登录,这是两个概念,别混了。

方案三:root 密码忘了,进入单用户模式找回

如果 root 密码彻底忘了,又没有 sudo 用户可用,那就只能走“系统启动阶段改密码”这条路。这个方法不同发行版的细节略有区别,但核心思想是一致的:在 GRUB 引导阶段改启动参数,让系统进入一个可以直接操作 root 文件系统的环境,再执行 passwd 重设密码。

这一方案最常用于:

  • CentOS 7 / Rocky / AlmaLinux / RHEL 系列
  • Ubuntu / Debian 系列
  • 云服务器通过 VNC、控制台、救援模式进入系统

先说最重要的一句:如果你是远程服务器,必须确认自己能用 VNC、控制台或云厂商提供的远程终端,否则你连 GRUB 都碰不到。

CentOS / RHEL 系列:通过 GRUB 重置 root 密码

以 CentOS 7 / RHEL 7/8/9 这类系统为例,常见做法如下:

  1. 重启服务器
  2. 在 GRUB 菜单界面按 e 进入编辑模式
  3. 找到以 linux16linux 开头的那一行
  4. 在行尾追加:rd.break 或者 init=/bin/bash
  5. Ctrl + X 启动
GRUB 编辑启动项
在 GRUB 菜单中选中系统启动项后,按 e 进入编辑模式

如果使用的是较新的 RHEL / CentOS / Rocky 方案,比较标准的做法是:

rd.break
在 GRUB 启动参数后追加 init 单用户参数
在内核启动参数末尾追加修复参数,准备进入单用户/救援环境

进入中断后的 shell 之后,按顺序执行:

mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
exit
exit

这里每条命令都不是摆设:

  • mount -o remount,rw /sysroot:把原本只读挂载的系统盘改成可写
  • chroot /sysroot:切进真正的系统根目录
  • passwd root:重置 root 密码
  • touch /.autorelabel:让 SELinux 在下次启动时重新打标签,避免登录异常

很多人改完密码后发现还是进不去,问题往往就出在漏了 SELinux 重标记这一步。

Ubuntu / Debian 系列:通过 recovery 或 init=/bin/bash 重置

Ubuntu / Debian 系的思路类似,但操作入口通常稍有不同。

常见方法一:进入 recovery mode

  1. 重启系统
  2. 在启动时按 EscShift 调出 GRUB 菜单
  3. 选择 Advanced options for Ubuntu
  4. 选择带有 (recovery mode) 的内核版本
  5. 进入 root shell

进入后,先把根分区改成可写:

mount -o remount,rw /

然后修改 root 密码:

passwd root

如果系统默认锁定了 root,也可能更常见的是重置你自己的管理员账号密码,而不是专门给 root 开密码。

常见方法二:直接修改 GRUB 启动参数

在 GRUB 编辑界面,找到以 linux 开头的那一行,把原来的只读启动参数改成:

rw init=/bin/bash
在启动参数后追加 single 或 1 进入单用户模式
在启动参数后追加单用户模式参数后,再启动系统重置密码

然后按 Ctrl + X 启动。进入 bash 后,直接执行:

passwd root
reboot -f

这个办法简单粗暴,但一定要确认你已经把根分区挂成可写,否则改密码不会成功。

如果连系统都进不去,云服务器怎么处理?

很多人实际遇到的问题不是“命令不会”,而是“我根本进不了机器”。这在云服务器场景尤其常见。

如果 SSH 已经失效、root 密码也忘了,正确姿势通常是:

  1. 先进入云平台控制台
  2. 优先尝试官方的“重置实例密码”功能
  3. 如果实例无法在线重置,再改用 VNC / 救援模式 / Debug Shell

像阿里云、华为云、天翼云,其实都提供了控制台重置密码、VNC 登录或者单用户模式相关方案。对大多数生产环境来说,优先用平台自带能力比手搓 GRUB 更稳,因为风险更小、回滚更容易。

但也要注意一件事:控制台重置密码通常只适合 root 或默认管理员账号,并不是所有普通用户都能这样改。

修改密码后,为什么还是登录失败?

这也是最容易把人搞懵的地方:密码明明改成功了,结果还是进不去。

常见原因主要有这几种:

1. SSH 禁止 root 登录

PermitRootLogin no

如果这个参数是 no,那你 root 密码改得再漂亮也没法直接 SSH 登录。

2. SSH 禁止密码认证

PasswordAuthentication no

这说明系统只允许密钥登录,不允许密码登录。

3. SELinux / PAM / 安全策略拦截
有些系统启用了比较严格的认证策略,甚至会出现 passwd: Permission deniedAuthentication failed 之类的问题。这时不能只盯着密码本身,还要检查 PAM 配置、SELinux 状态、/etc/shadow 权限是否正常。

4. 忘了重启或重载服务
如果你修改的是 SSH 认证方式,而不是单纯改系统密码,那改完配置后需要重启 sshd 服务:

systemctl restart sshd

5. 云平台密码重置后未生效
部分云平台的“离线重置密码”需要重启实例后才会生效,这一点非常容易被忽略。

root 密码设置成什么样才算安全?

改回来只是第一步,改得安全才有意义。

一个合格的 root 密码,至少要满足这几个原则:

  • 长度尽量 12 位以上
  • 包含大写、小写、数字、特殊字符
  • 不要用公司名、域名、手机号、生日这种能猜中的信息
  • 不要和数据库、面板、邮箱共用同一个密码

如果服务器面向公网,光靠强密码其实还不够。更稳的组合应该是:

  • 修改 root 密码
  • 关闭密码登录,改用 SSH 密钥
  • 限制 root 直接登录
  • 配合 Fail2Ban 或安全组白名单

说白了,root 密码是底线,不是全部安全策略。

常见问题

Q:我执行 passwd root 时提示 Permission denied,怎么办?

A:优先检查三个方向:/etc/passwd/etc/shadow 权限是否异常、SELinux 是否拦截、PAM 配置文件是否损坏或格式错误。

Q:改了 root 密码,为什么 SSH 还是登录失败?

A:大概率不是密码没改成功,而是 SSH 配置禁止 root 或禁止密码认证。重点检查 PermitRootLoginPasswordAuthentication

Q:云服务器能不能直接在控制台重置 root 密码?

A:大多数主流云平台都支持,但是否需要重启、是否依赖插件、是否只支持默认管理员账号,要看具体平台规则。

Q:单用户模式改密码会不会有风险?

A:会。尤其是生产机,操作前最好确认有快照、备份或控制台回滚手段。不要在完全没有兜底的情况下乱改引导参数。

总结

Linux 修改 root 密码,说难不难,说简单也没你想得那么简单。关键不在于背会几条命令,而在于先判断自己当前还拥有什么权限。

你可以把整篇文章压缩成一句话:

  1. 能进 root,就直接 passwd
  2. 有 sudo,就用 sudo passwd root
  3. 都没有,就走 GRUB / 单用户模式 / 云控制台找回

最后提醒一句:把 root 密码找回来只是恢复控制权,真正稳妥的做法,是在恢复之后尽快把服务器切到更安全的运维方式,比如 SSH 密钥登录、限制 root 直登、配合最小权限账户维护系统。

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享