☰
Ubuntu root密码遗忘怎么办?从sudo原理到recovery模式重置全攻略
2026/9/26 20:40:03 网站建设 项目流程

帮人处理过太多Ubuntu的root密码问题,从“刚装完系统十几分钟就把密码忘了”的新手,到“服务器在机房躺了三天进不去”的老运维,各种情况都遇过。很多教程把这件事讲得特别简单——敲个passwd,回车两遍完事。可真到自己操作时,会发现这事牵扯出一堆前置知识:sudo和root到底是什么关系、为什么输入su会提示认证失败、忘记密码后怎么绕进系统、虚拟机里卡在“Ctrl+D”界面又该怎么办。

这篇文章我按实际使用中最常见的几个场景来拆。读完你会明白Ubuntu的root机制,能独立完成初始密码设置、密码修改、忘记密码后的重置,以及服务器和虚拟机环境下的密码管理。重点不是背命令,而是知道每个操作背后的逻辑——为什么这个命令能生效、失败时问题可能出在哪一环。

1. 先搞懂Ubuntu的root机制再动手

1.1 root密码为什么“存在又不存在”

很多人会有个困惑:装Ubuntu的时候明明设置过密码,怎么用这个密码登录root却提示错误?原因是Ubuntu默认压根没有给root设置密码。你在安装界面填的那个密码,是给第一个创建的用户用的,这个用户默认在sudo组里,拥有管理员权限,但这不是root的密码。

Ubuntu这样设计是出于安全和容错两方面的考虑。root是Linux里的超级账户,权限大到可以删除任何文件、修改任何系统配置。如果默认启用root登录,一旦密码泄露或被暴力破解,整台机器就完全暴露了。而且日常用root操作缺少审计,出了问题不知道是谁干的。用sudo方式,系统会记录命令、操作人、时间,出事后能追踪。

从技术上说,root账户的密码记录在/etc/shadow文件里。在Ubuntu上,查看这个文件的root密码字段会发现是一个*或!,这代表密码锁定状态,root无法直接登录。所谓“设置root密码”,本质就是给root账户在shadow里写入一个有效密码,取消锁定状态。

1.2 sudo和root的关系,这一步没搞懂后面全乱

在动手前必须先理清几个命令的差异,否则大概率会在某个步骤卡住:

  • sudo ls:以root权限执行单条命令,输入的是当前用户自己的密码。
  • sudo -i:切换到root的shell环境,相当于以root身份开启一个新会话,前提是当前用户在sudo组。
  • su - root:切换到root用户,输入的是root的密码。如果root没有密码或处于锁定状态,会提示认证失败。
  • su(不带用户名):默认切到root,同样需要root密码。

我见过很多用户在服务器上想切root,敲了su,系统要密码,他们输入了安装系统时设置的用户密码,结果一直提示错误,然后就以为系统坏了。其实问题很简单:root还没有密码。

所以接下来所有操作的逻辑就清晰了:如果是全新系统,先通过sudo给root设置密码,之后才谈得上用root账户直接登录;如果是已有系统想改root密码,用sudo也可以直接改;如果用户密码和root密码都忘了,就需要绕到系统里去做重置。下面按场景逐一展开。

2. 场景一:刚装完系统,第一次设置root密码

2.1 先确认当前用户有sudo权限

装Ubuntu桌面版或服务器版时,系统会要求创建一个用户。这个用户默认在sudo组里,正常情况下可以直接执行sudo。但有些精简安装、定制系统或从旧版本升级上来的环境,当前用户可能不在sudo组里。

先确认一下:

groups 当前用户名

如果输出里包含sudo,没问题;如果没有,用另一个有sudo权限的用户执行:

sudo usermod -aG sudo 当前用户名

执行后退出当前会话重新登录,让组权限生效。注意,修改组信息后必须重新登录,只有新会话才会加载新的组权限。这个步骤如果跳过,后面所有sudo操作都会报“不在sudoers文件中”的错误。

2.2 sudo passwd root,设置密码的具体操作

确认有sudo权限后,执行:

sudo passwd root

系统会提示输入新的UNIX密码,输入两遍。注意终端输入密码时不会显示任何字符,光标也不会动,这是正常的,不要以为键盘失灵。看到passwd: password updated successfully就说明设置成功了。

很多人会问,能不能直接su -后再passwd?如果当前root没有密码,su -本身就进不去;如果已经能进root,直接passwd也可以。但在Ubuntu上,第一种方式最标准,因为它在修改root密码时不需要先登录root。

验证一下密码是否生效:

su - root

输入刚设置的密码,能顺利切到root,命令提示符变成root@主机名:/home/用户名#,就说明密码没问题了。

2.3 到底要不要启用root直接登录,分场景看

设置完root密码后,系统默认仍然不允许root通过图形界面或SSH直接登录。这其实是两层设置:

  • 桌面版:Ubuntu默认禁用root的图形界面登录(GDM登录界面不显示root用户)。如果你确实需要在图形界面用root登录,需要编辑/etc/gdm3/custom.conf,取消AutomaticLoginEnable相关注释并添加root到允许列表。但说真的,我不推荐这么干,桌面环境用root登录,误操作成本太高。
  • SSH服务器:/etc/ssh/sshd_config里的PermitRootLogin默认是prohibit-password,意思是禁止root用密码登录,但允许密钥登录。如果需要root通过密码SSH登录,要改成yes并重启sshd服务。但更安全的方案是保持默认,用普通用户+sudo。

如果不是特殊场景(比如自动化脚本、容器里需要root、某些开发环境),我建议root密码设了知道就行,平时继续用sudo。把root密码当作一把备用钥匙,而不是日常主钥匙,这是Ubuntu默认设计想引导你养成的习惯。

3. 场景二:已有系统,修改当前root密码

3.1 有sudo权限时改root密码,一句话的事

系统已经用了很久,想换掉root密码,步骤和“设置”其实一样:

sudo passwd root

当前用户有sudo权限或本身就是root时,修改root密码不需要知道旧密码,直接设新的。这是Linux的一个安全特性:sudo权限持有者可以重置任意用户密码,不需要旧密码验证。

顺带说下滑动修改一个普通用户的密码:

sudo passwd 用户名

强制某个用户在下一次登录时必须改密码:

sudo chage -d 0 用户名

chage -d 0意思是把密码最后修改日期设成1970年1月1日,系统会认为密码已经过期,强制要求在下一次登录时设置新密码。批量改密码时用chpasswd配合文件重定向,效率高很多:

echo "用户名:新密码" | sudo chpasswd

3.2 修改密码和充值安全策略的参数细节

Ubuntu默认对密码复杂度要求不高,只要求输入非空且最短长度通常为1位(不同版本略有差异)。但这不代表你可以用123456这种密码。如果系统开启了PAM的pwquality模块,/etc/pam.d/common-password里会有pam_pwquality.so的调用,可以配置minlen=12、minclass=3(至少包含三类字符)等策略,这会让passwd设置时强制校验复杂度。

遇到“密码太短”或“密码未通过字典检查”这类报错时,去检查这个文件,而不是怀疑命令敲错了。经验之谈:服务器上的root密码建议16位以上,包含大小写字母、数字和符号;不要和用户密码相同;不要用生日、公司名等容易被猜到的内容。

3.3 sudo su、sudo -i和直接su的差异,别用混了

修改完密码后,很多人喜欢把sudo su和su -混着用,确实容易混乱。简单区分一下:

  • sudo su:先用sudo提权再切到root,不需要root密码。
  • sudo -i:直接开启root登录shell,也不需要root密码,会加载root的环境变量。
  • su -:需要root密码,登录后会切换到root的家目录和环境。

如果你设置了root密码,然后在自己的终端里输入su -却提示失败,先回想一下自己是不是敲成了sudo su的习惯。这两条路径的成功标准完全不同,前者验证root密码,后者验证当前用户自己的密码。密码设置完成后,建议把四种方式都试一遍,确认自己真的理解它们的区别,这样后面排查问题时思路会清晰很多。

4. 场景三:忘了密码,单用户模式恢复重置

4.1 能进登录界面的情况下,怎么通过recovery模式重置

忘记密码是高频事故,尤其发生在“很久没用这台机器”之后。如果系统还能启动到GRUB启动菜单,重置root密码的方法比较成熟,分几步:

重启电脑,在GRUB菜单处选择Advanced options for Ubuntu,进入恢复菜单,选择带(recovery mode)字样的内核版本。在恢复菜单里选root,会进入一个root shell。

进去后先挂载文件系统为可读写:

mount -o remount,rw /

因为恢复模式下根文件系统默认是只读挂载的,直接执行passwd root会提示“无法打开密码文件”,很多人就卡在这里。执行完挂载命令后:

passwd root

输入两遍新密码,然后输入reboot重启,用新密码登录即可。

但这里有个容易翻车的点:有些Ubuntu版本恢复菜单里没有root选项,或者进去后白屏、卡死。这个情况和启动配置有关,特别是系统装在UEFI+GPT的磁盘上时,recovery模式不一定可靠。此时可以用下面两种备选方案。

4.2 recovery进不去,或者卡在Ctrl+D界面的排查方法

有个很常见的报错场景:系统启动时提示无法挂载根文件系统,或者文件系统出现错误,进入一个busybox的initramfs界面,提示按Ctrl+D继续或输入root密码进行维护。很多人在这个界面尝试Ctrl+D,结果发现按了没反应,或者反复进入同一个界面。

先解释一下:initramfs是系统启动早期阶段使用的临时根文件系统。出现这个界面通常意味着根分区挂载失败,比如文件系统损坏、/etc/fstab配置错误、磁盘控制器驱动没加载、LVM卷未激活。这时候Ctrl+D只是让系统重试挂载,如果根因没解决,重试多少次都没用。

在这个界面下可以先用ls看设备枚举,用blkid查看分区UUID,确认系统盘是否被正确识别。如果是文件系统问题,可以手动执行:

fsck /dev/sda1

按提示修复完成后,exit退出或重启。如果手动fsck能修好,Ctrl+D重试就不会再卡了。如果反复进出维护模式,多半是/etc/fstab里写的UUID和实际分区对不上(重装过系统、加过硬盘、换过主板都可能导致),需要在initramfs里用blkid对比实际UUID,然后挂载根分区修改fstab。

如果你能进入GRUB编辑界面(开机时按Shift或Esc,UEFI机器按住Esc),还有一招:在GRUB菜单按e编辑启动项,找到以linux开头的那一行,在末尾加上init=/bin/bash,然后按Ctrl+X启动。这会跳过所有登录流程,直接进入root shell。这个方案对“密码忘了但系统本身没问题”的情况很有效。

进入后同样先执行:

mount -o remount,rw /

然后passwd root修改密码,最后exec /sbin/init或reboot -f重启。注意,用init=/bin/bash方式进入时没有完整的系统初始化,某些依赖网络或图形界面的功能不可用,但改密码完全够了。

4.3 终极方案:Live USB挂载系统盘改密码

如果recovery模式和GRUB编辑都进不去(比如GRUB菜单本身就被破坏),最可靠的办法就是做一个Ubuntu Live USB,从U盘启动系统,然后挂载硬盘上的系统分区,用chroot进去改密码。

从Live系统启动后,先找到系统所在分区:

sudo fdisk -l

假设系统分区是/dev/sda1,挂载它:

sudo mount /dev/sda1 /mnt

如果是UEFI机器,还需要挂载EFI分区(通常为/dev/sda2)到/mnt/boot/efi。如果/home、/boot单独分了区,也要对应挂载。

挂载完需要把内核虚拟文件系统绑定过去:

sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys

然后chroot进入系统:

sudo chroot /mnt

此时你已经进入了硬盘上那个Ubuntu系统的根目录,执行:

passwd root

修改完成后逐级退出(exit退出chroot,umount所有挂载点),重启,拔掉U盘。

chroot的原理是把当前进程的根目录切换到指定目录,让进程误以为自己运行在完整系统里,从而能够执行原来系统上安装的程序和命令。这种方式比重启进recovery模式更通用,也适合修复系统文件、重装GRUB等场景。

4.4 LVM分区和加密盘的特别提醒

这部分内容可能超过新手范畴,但忘密码的人里真有不少遇到,还是提一下。

如果系统安装时使用了LVM逻辑卷管理(服务器安装Ubuntu的“向导”默认可能开启LVM),Live系统里直接mount /dev/sda1会提示找不到分区。需要先激活逻辑卷:

sudo vgscan sudo vgchange -ay

然后查看逻辑卷名称:

sudo lvscan

再挂载对应的逻辑卷(如/dev/ubuntu-vg/root)。如果这一层没处理,后面chroot进去看到的文件系统是不完整的,改完密码可能还是不生效。

另一类是无解的情况:根分区用了LUKS全盘加密。如果忘记的是加密盘的密码,那么系统启动时就根本无法解密磁盘,recovery模式、Live系统挂载全都失效。这时候没有绕过手段,只能找当初设置的加密恢复密钥(如果有的话)或者重新安装系统。所以加密盘用户一定要把加密密码和恢复密钥妥善保管,这件事我每次都要特别强调。

5. 场景四:服务器与虚拟机场景下的密码管理

5.1 服务器上忘了root密码,怎么远程救回来

服务器通常在机房或云上,无法直接按电源键进recovery模式。如果服务器正在运行,你还有SSH访问权(比如用普通用户登录),事情就简单了——直接sudo passwd root重置就可以。没有sudo权限但有一台能登录的普通用户SSH也没用,还是需要有途径执行提权。

如果连SSH都登不进去,但有云控制台(云服务器厂商提供的VNC/管理终端),可以模拟接上显示器键盘,在控制台里进入GRUB菜单做恢复。这是云服务器忘了root密码的常规救法:打开VNC,重启实例,在GRUB里按e加init=/bin/bash或进入recovery模式。

物理服务器在IDC机房就比较麻烦,通常需要远程管理卡(IPMI/iDRAC/iLO)提供的虚拟控制台,或者在机房现场接显示器键盘。操作流程和上面说的一样。记住一点:服务器改密码前如果业务还在跑,先和团队确认是否可以重启,或者选择业务低峰期操作,否则虽然密码救回来了,线上业务中断的锅也得你背。

5.2 SSH无法连接时,优先级最高的几个排查点

热搜词里“ubuntu ssh无法连接”出现频率很高,而且很多和root密码相关。情况通常是:改了root密码后重启,发现SSH连不上了。

优先排查顺序:

  1. sshd服务是否在运行:systemctl status ssh,如果没装先sudo apt install openssh-server。
  2. 防火墙是否放行了22端口:sudo ufw status,如果启用了ufw,执行sudo ufw allow 22/tcp。
  3. PermitRootLogin配置是否允许root登录:grep PermitRootLogin /etc/ssh/sshd_config。如果明确要root密码登录,必须改成yes。
  4. PasswordAuthentication是否为yes:有些环境默认是no,只允许密钥登录,修改后要sudo systemctl restart sshd。
  5. 如果你在机房现场还能登录,排查时先tail -f /var/log/auth.log,SSH认证失败的详细原因都会记录在这里——是密码错、被拒绝还是公钥不匹配,一目了然。

我遇到过把root密码改好、SSH配置也对,但连接超时的情况,查了半天是服务器上某个服务把网络栈搞挂了。所以SSH连不上不要只盯着密码配置,网络层面也要同步排查,用ip a看网卡状态,ping网关测试连通性。

5.3 虚拟机里改密码,快照比什么命令都重要

在虚拟机(VMware、VirtualBox、KVM、ESXi)里管理Ubuntu密码,其实有个天然优势:可以拍快照。操作前先给虚拟机拍一个快照,然后随便折腾,改坏了、进不去了、系统崩溃了,直接恢复到快照那一点,比什么救援模式都省事。

ESXi环境里有个高频问题:虚拟机Ubuntu忘记root密码,想进恢复模式,重启后一直按Esc或Shift,却看到屏幕提示Ctrl+D,按了没反应。除了前面说的文件系统问题外,还有可能是虚拟机控制台没有接收键盘输入——ESXi的Web控制台和VMware Workstation的窗口焦点不同,点进窗口后才生效。用Workstation时先点击一下虚拟机窗口内壁确保焦点在虚拟机上,再按组合键。

另外虚拟机里改密码,如果原来有快照,完全可以走一条捷径:还原快照到系统还正常的时间点,然后再用sudo方式重置密码。这不仅速度快,还能避免恢复模式下误挂载、误改其他配置的风险。当然前提是快照没把重要数据搞丢。

6. 常见问题与踩坑实录,一张表说清

把我在实际运维和帮人排查中遇到的高频问题整理成速查表,按“症状→原因→解法”的方式列出来,方便实际问题时直接对照。

症状根因解法
su -一直提示认证失败root没有设置密码或密码输错用sudo passwd root设置后再试
sudo passwd root提示用户不在sudoers中当前用户不在sudo组有root权限的话用usermod -aG sudo 用户名,没有就进恢复模式处理
恢复模式里passwd root报无法打开密码文件根分区只读挂载先执行mount -o remount,rw /
initramfs提示Ctrl+D反复进入维护界面文件系统损坏或fstab配置错误用fsck修复,用blkid比对UUID
修改root密码后SSH连不上sshd_config限制root登录检查PermitRootLogin和PasswordAuthentication,重启sshd
密码简单但passwd接受Ubuntu默认没有强制复杂度策略手动配置/etc/pam.d/common-password的pwquality参数
键盘输入密码感觉“乱码”终端里输入密码不显示任何字符正常现象,盲输后回车即可
root用户在shadow里显示!或*账户密码被锁定sudo passwd root解锁
Live系统挂载提示找不到LVM分区LVM卷未激活vgchange -ay激活后再挂载

有几个坑特别值得单独说。

第一,改密码前先确认自己的“保命路径”。不管是服务器还是虚拟机,动root密码之前想清楚:如果改完连不上、进不去,你能通过什么方式恢复?云主机有VNC吗?虚拟机有快照吗?物理机有机房控制台吗?如果没有保命路径,别急着改,先搭一条再动。

第二,/etc/passwd文件里root用户那行的shell字段如果被改成/sbin/nologin或/usr/sbin/nologin,那么即使密码正确也无法登录root,会提示“无法执行shell”。如果你曾经用usermod -s /usr/sbin/nologin root限制过root登录,重置密码后记得改回:

sudo usermod -s /bin/bash root

第三,很多人改完密码喜欢立刻重启验证,但更稳妥的做法是先在当前会话里su -测试新密码,确认生效后再重启。这样即使密码没设置成功,也不用中断正在跑的服务。

第四,修改root密码后,尽量别和用户的登录密码设成一样。我见过一群人为了省事把root密码和用户密码设成相同,一旦用户密码泄露,root权限等于也暴露了。可以让root密码明显不同,且定期更换。

第五,曾经遇到过有人把root密码改成超长超复杂的字符串,结果自己两周后也记不住了,最后还得靠恢复模式重置。密码工具(如密码管理器)或记录在加密笔记本里,都是更可靠的选择。千万别把密码写在便签上贴在显示器上,机房巡检的人一眼就能看到。

我最想提醒的还是那句:root密码这件事,重要的不是“设一个多么强壮的密码”,而是“任何时候都保留一条能进系统的通道”。打了快照的虚拟机、OpenSSH密钥登录、记在密码管理器里的备份密码——这些才是真正的保险。多给自己留一条后路,改起配置来才会心里有底。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询