ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu root密码遗忘怎么办?从sudo原理到recovery模式重置全攻略

Ubuntu root密码遗忘怎么办?从sudo原理到recovery模式重置全攻略 帮人处理过太多Ubuntu的root密码问题从“刚装完系统十几分钟就把密码忘了”的新手到“服务器在机房躺了三天进不去”的老运维各种情况都遇过。很多教程把这件事讲得特别简单——敲个passwd回车两遍完事。可真到自己操作时会发现这事牵扯出一堆前置知识sudo和root到底是什么关系、为什么输入su会提示认证失败、忘记密码后怎么绕进系统、虚拟机里卡在“CtrlD”界面又该怎么办。这篇文章我按实际使用中最常见的几个场景来拆。读完你会明白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 chpasswd3.2 修改密码和充值安全策略的参数细节Ubuntu默认对密码复杂度要求不高只要求输入非空且最短长度通常为1位不同版本略有差异。但这不代表你可以用123456这种密码。如果系统开启了PAM的pwquality模块/etc/pam.d/common-password里会有pam_pwquality.so的调用可以配置minlen12、minclass3至少包含三类字符等策略这会让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选项或者进去后白屏、卡死。这个情况和启动配置有关特别是系统装在UEFIGPT的磁盘上时recovery模式不一定可靠。此时可以用下面两种备选方案。4.2 recovery进不去或者卡在CtrlD界面的排查方法有个很常见的报错场景系统启动时提示无法挂载根文件系统或者文件系统出现错误进入一个busybox的initramfs界面提示按CtrlD继续或输入root密码进行维护。很多人在这个界面尝试CtrlD结果发现按了没反应或者反复进入同一个界面。先解释一下initramfs是系统启动早期阶段使用的临时根文件系统。出现这个界面通常意味着根分区挂载失败比如文件系统损坏、/etc/fstab配置错误、磁盘控制器驱动没加载、LVM卷未激活。这时候CtrlD只是让系统重试挂载如果根因没解决重试多少次都没用。在这个界面下可以先用ls看设备枚举用blkid查看分区UUID确认系统盘是否被正确识别。如果是文件系统问题可以手动执行fsck /dev/sda1按提示修复完成后exit退出或重启。如果手动fsck能修好CtrlD重试就不会再卡了。如果反复进出维护模式多半是/etc/fstab里写的UUID和实际分区对不上重装过系统、加过硬盘、换过主板都可能导致需要在initramfs里用blkid对比实际UUID然后挂载根分区修改fstab。如果你能进入GRUB编辑界面开机时按Shift或EscUEFI机器按住Esc还有一招在GRUB菜单按e编辑启动项找到以linux开头的那一行在末尾加上init/bin/bash然后按CtrlX启动。这会跳过所有登录流程直接进入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退出chrootumount所有挂载点重启拔掉U盘。chroot的原理是把当前进程的根目录切换到指定目录让进程误以为自己运行在完整系统里从而能够执行原来系统上安装的程序和命令。这种方式比重启进recovery模式更通用也适合修复系统文件、重装GRUB等场景。4.4 LVM分区和加密盘的特别提醒这部分内容可能超过新手范畴但忘密码的人里真有不少遇到还是提一下。如果系统安装时使用了LVM逻辑卷管理服务器安装Ubuntu的“向导”默认可能开启LVMLive系统里直接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连不上了。优先排查顺序sshd服务是否在运行systemctl status ssh如果没装先sudo apt install openssh-server。防火墙是否放行了22端口sudo ufw status如果启用了ufw执行sudo ufw allow 22/tcp。PermitRootLogin配置是否允许root登录grep PermitRootLogin /etc/ssh/sshd_config。如果明确要root密码登录必须改成yes。PasswordAuthentication是否为yes有些环境默认是no只允许密钥登录修改后要sudo systemctl restart sshd。如果你在机房现场还能登录排查时先tail -f /var/log/auth.logSSH认证失败的详细原因都会记录在这里——是密码错、被拒绝还是公钥不匹配一目了然。我遇到过把root密码改好、SSH配置也对但连接超时的情况查了半天是服务器上某个服务把网络栈搞挂了。所以SSH连不上不要只盯着密码配置网络层面也要同步排查用ip a看网卡状态ping网关测试连通性。5.3 虚拟机里改密码快照比什么命令都重要在虚拟机VMware、VirtualBox、KVM、ESXi里管理Ubuntu密码其实有个天然优势可以拍快照。操作前先给虚拟机拍一个快照然后随便折腾改坏了、进不去了、系统崩溃了直接恢复到快照那一点比什么救援模式都省事。ESXi环境里有个高频问题虚拟机Ubuntu忘记root密码想进恢复模式重启后一直按Esc或Shift却看到屏幕提示CtrlD按了没反应。除了前面说的文件系统问题外还有可能是虚拟机控制台没有接收键盘输入——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提示CtrlD反复进入维护界面文件系统损坏或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密钥登录、记在密码管理器里的备份密码——这些才是真正的保险。多给自己留一条后路改起配置来才会心里有底。
返回列表