为什么 root 密码问题总是最让人头疼?
在 Linux 服务器运维里,忘记普通用户密码还不算太麻烦,最怕的是 root 密码出问题。因为一旦 root 密码忘了,很多关键操作都做不了:安装软件、修改系统配置、重启服务、修 SSH、恢复业务,都会卡住。
更现实的是,很多人碰到 root 密码问题时,脑子里只有一句话:“是不是只能重装系统了?” 其实大多数情况下并不用。只要系统盘没坏、引导没彻底炸掉,Linux 通常都能通过系统内部修改、sudo 提权重设,或者进入单用户/救援模式把密码找回来。
这篇文章不讲虚的,直接把最常见、最实用的三种方案讲清楚:
- 已经登录系统,直接修改 root 密码
- 有 sudo 权限,重置 root 密码
- 忘记 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 密码、能正常登录,只是出于安全考虑想换一个更强的新密码。
建议顺手做两件事:
- 把新密码更新到密码管理器,不要再靠脑子硬记
- 如果服务器长期公网暴露,考虑后续改成 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。
注意两个细节:
- 如果你执行
sudo passwd root提示无权限,说明当前用户不在 sudoers 里,这条路走不通 - 如果系统本身禁用了 root 密码登录,修改完 root 密码后也不代表你能直接 SSH 用 root 登录,还要看
/etc/ssh/sshd_config里的PermitRootLogin和PasswordAuthentication
也就是说,改了 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 这类系统为例,常见做法如下:
- 重启服务器
- 在 GRUB 菜单界面按
e进入编辑模式 - 找到以
linux16或linux开头的那一行 - 在行尾追加:
rd.break或者init=/bin/bash - 按
Ctrl + X启动

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

进入中断后的 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
- 重启系统
- 在启动时按
Esc或Shift调出 GRUB 菜单 - 选择
Advanced options for Ubuntu - 选择带有
(recovery mode)的内核版本 - 进入 root shell
进入后,先把根分区改成可写:
mount -o remount,rw /
然后修改 root 密码:
passwd root
如果系统默认锁定了 root,也可能更常见的是重置你自己的管理员账号密码,而不是专门给 root 开密码。
常见方法二:直接修改 GRUB 启动参数
在 GRUB 编辑界面,找到以 linux 开头的那一行,把原来的只读启动参数改成:
rw init=/bin/bash

然后按 Ctrl + X 启动。进入 bash 后,直接执行:
passwd root
reboot -f
这个办法简单粗暴,但一定要确认你已经把根分区挂成可写,否则改密码不会成功。
如果连系统都进不去,云服务器怎么处理?
很多人实际遇到的问题不是“命令不会”,而是“我根本进不了机器”。这在云服务器场景尤其常见。
如果 SSH 已经失效、root 密码也忘了,正确姿势通常是:
- 先进入云平台控制台
- 优先尝试官方的“重置实例密码”功能
- 如果实例无法在线重置,再改用 VNC / 救援模式 / Debug Shell
像阿里云、华为云、天翼云,其实都提供了控制台重置密码、VNC 登录或者单用户模式相关方案。对大多数生产环境来说,优先用平台自带能力比手搓 GRUB 更稳,因为风险更小、回滚更容易。
但也要注意一件事:控制台重置密码通常只适合 root 或默认管理员账号,并不是所有普通用户都能这样改。
修改密码后,为什么还是登录失败?
这也是最容易把人搞懵的地方:密码明明改成功了,结果还是进不去。
常见原因主要有这几种:
1. SSH 禁止 root 登录
PermitRootLogin no
如果这个参数是 no,那你 root 密码改得再漂亮也没法直接 SSH 登录。
2. SSH 禁止密码认证
PasswordAuthentication no
这说明系统只允许密钥登录,不允许密码登录。
3. SELinux / PAM / 安全策略拦截
有些系统启用了比较严格的认证策略,甚至会出现 passwd: Permission denied、Authentication 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 或禁止密码认证。重点检查 PermitRootLogin 和 PasswordAuthentication。
Q:云服务器能不能直接在控制台重置 root 密码?
A:大多数主流云平台都支持,但是否需要重启、是否依赖插件、是否只支持默认管理员账号,要看具体平台规则。
Q:单用户模式改密码会不会有风险?
A:会。尤其是生产机,操作前最好确认有快照、备份或控制台回滚手段。不要在完全没有兜底的情况下乱改引导参数。
总结
Linux 修改 root 密码,说难不难,说简单也没你想得那么简单。关键不在于背会几条命令,而在于先判断自己当前还拥有什么权限。
你可以把整篇文章压缩成一句话:
- 能进 root,就直接
passwd - 有 sudo,就用
sudo passwd root - 都没有,就走 GRUB / 单用户模式 / 云控制台找回
最后提醒一句:把 root 密码找回来只是恢复控制权,真正稳妥的做法,是在恢复之后尽快把服务器切到更安全的运维方式,比如 SSH 密钥登录、限制 root 直登、配合最小权限账户维护系统。










