ARTICLE DETAIL

资讯详情

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

Ubuntu root密码设置与重置全攻略:sudo、恢复模式到chroot实操

Ubuntu root密码设置与重置全攻略:sudo、恢复模式到chroot实操 装 Ubuntu 这么多年我经常遇到两类人一类是刚把系统装好马上问“root 密码是多少”另一类是用了半年某天需要 root 权限发现自己压根没设过 root 密码又不敢乱动。其实这两个问题背后是同一件事Ubuntu 默认根本没给你 root 密码也不让你用 root 直接登录日常权限靠 sudo 临时借。这篇内容把“Ubuntu root 密码”从头到尾捋一遍包括怎么设置初始密码、怎么修改已有密码、忘记之后怎么重置以及我在实操中踩过的那些坑。我一直觉得只要理解了 Ubuntu 的 root 账户默认是“锁定”的后面所有操作就顺理成章了。下面从机制开始讲再一步步给命令、给步骤最后放几组避坑清单看完你应该能应付绝大多数场景。1. Ubuntu root 密码机制解析1.1 为什么 Ubuntu 默认“没有” root 密码很多从 CentOS、Windows 过来的朋友第一次用 Ubuntu 都会找 root 密码然后发现su -怎么都提示Authentication failure。这不是你输错了而是 Ubuntu 的安装程序压根没给 root 设置过密码。Ubuntu 默认安装完之后root 账户在系统里处于锁定状态/etc/shadow文件里 root 那一行密码位不是正常的哈希串而是一个!符号。这个!表示该账户没有可用的密码系统层面不允许直接登录。你可以执行下面这条命令看一眼sudo grep ^root: /etc/shadow正常输出类似root:!:19216:0:99999:7:::看到密码位那个!就明白了不是密码为空也不是密码未知而是“锁定”状态。这个设计是刻意的目的是减少直接用 root 操作的风险引导大家用低权限账户配合 sudo 完成管理任务。所以你在 Ubuntu 官方文档里几乎找不到“想用 root 就 root”的说法官方推荐方式是用 sudo。1.2 sudo 与 root 到底什么关系Ubuntu 安装时会让你创建一个常规用户这个用户默认被加进sudo组。组里的用户执行sudo命令时需要输入的是自己账户的密码而不是 root 密码。这一点太关键了很多新手以为 sudo 要输 root 密码结果卡半天。sudo 的工作机制是一个进程以普通用户身份发起请求sudo 读取/etc/sudoers规则确认该用户有权限后以 root 权限临时运行后续命令。这种临时提权细粒度更高可以精确控制谁能用、能跑哪些命令而且所有操作会写进日志。从应用场景上说日常需要管理员权限用sudo 命令不需要 root 密码。这就是绝大多数用户终身不碰 root 密码还能正常干活的原因。需要持续以 root 身份操作可以用sudo -i或sudo su此时进入 root shell 靠的是你当前账户的 sudo 权限也不需要 root 密码。严格意义上的账户切换su -需要目标账户root的密码。这就是默认 Ubuntu 下进不去 root 的真正原因。1.3 你实际需要的可能是哪一种场景我接触到的“root 密码”问题归纳起来无非三种。先搞清楚你要哪种再动手避免改乱系统状态场景需求操作方向新装系统想设置一个 root 初始密码让 root 从锁定变可用sudo passwd root之前设过 root 密码现在要换一个日常密码更新root 下passwd或sudo passwd root忘记 root 密码进不了系统绕过密码重置恢复模式 / 内核参数 / Live USB下面我把这三种场景拆开讲每一步都给具体命令你可以直接照抄。2. 为 Ubuntu 新装系统设置 root 初始密码2.1 sudo passwd root 完整操作新系统装完你只有一个普通账户root 处于锁定状态。这时候想给 root 设置初始密码不需要重启不需要单用户模式只需要一条命令sudo passwd root执行后系统会提示New password: Retype new password: passwd: password updated successfully这里输入的是你想设置的 root 初始密码要求尽量符合密码强度长度足够、包含大小写字母和数字。设置成功后root 账户的锁定状态自动解除/etc/shadow里 root 那一行会从!变成一个真正的加密哈希串。有人会疑惑为什么设置 root 密码不需要先输入旧密码因为passwd是以 root 身份执行的root 修改自己的密码时不需要旧密码校验而 sudo 已经替你完成了事前认证。这个逻辑后面解锁、重置都用得上。2.2 设置完成后如何正确切换root 密码设置好以后切换方式会发生变化。记住下面几个命令的区别su - # 输入 root 密码切换到 root 并加载 root 的环境 sudo -i # 以当前用户身份提权进入 root shell输入的是当前用户密码 sudo -s # 提权进入 root shell但保留当前用户的部分环境变量我第一次给客户做 Ubuntu 环境时经常看到有人用sudo su -混着用其实sudo su -是先有 sudo 权限再由 su 切换到 root本质上不需要 root 密码。如果你已经设置了 root 密码直接用su -反而更符合“切换到 root”的字面含义。验证 root 密码是否设置成功可以用su - -c id如果能正确输出uid0(root)的信息说明密码已经生效。2.3 设置 root 密码之后系统行为有哪些变化这一步很多人没提前意识到。root 密码一旦设置成功至少会带来下面几个变化本地终端和 tty 可以直接用 root 登录不再提示账户已锁定。su -可以用 root 密码切换到 root。部分图形界面登录管理器可能允许 root 登录但在 GNOME 默认配置下通常仍会拒绝。SSH 默认配置仍然不允许 root 远程登录除非你手动修改PermitRootLogin。所以“设了 root 密码就能 SSH 登录 root”是个错误预期。后面排查章节我会专门讲 PermiRootLogin 的问题。另外一个容易被忽略的点如果你在云服务商买的 Ubuntu 镜像部分镜像会默认允许 root 登录而且初始密码可能由服务商短信或控制台发给你。这种情况不要急着自己设新密码先用给定密码登录一次再执行passwd修改避免把初始密码忘掉后又进不去。3. 修改已有 root 密码的几种方式3.1 已登录 root 时直接改如果你当前就在 root shell 里修改密码最简单passwd什么都不加就是改当前用户的密码。系统会先要求你输入当前 root 密码然后再输入新密码。这种场景最常见于定期更换密码、账号交接和合规检查。如果你在 root shell 里想改其他用户密码比如临时帮同事重置可以指定用户名passwd alice格式上注意root 给普通用户改密码时不需要知道普通用户原密码这也是管理员账号的基本能力。3.2 不进入 root shell用 sudo 修改非 root 用户改 root 密码最省事的就是下面这条sudo passwd root这条命令和你设置初始密码的语法完全一样相当于把 root 的新密码覆盖进去。很多人以为 root 密码会“验证旧密码”并没有因为执行者是通过 sudo 获得 root 权限的passwd 命令本身不会对旧密码做校验。这里有一个实际使用中的细节如果 root 当前处于锁定状态而你想“修改”密码其实结果等同于“解锁并设置密码”。换句话说Ubuntu 下sudo passwd root同时完成了两件事一是让 root 密码生效二是解除 shadow 中的锁定标记。所以就算你从未设置过 root 密码也可以直接用这条命令完成初始化。修改密码后可以再用grep检查 shadow 字段密码位已经变成$6$或$y$开头的复杂字符串不再是!。3.3 批量环境和自动化脚本怎么改一台两台机器手动改没问题几十台服务器再逐个passwd就太慢了。这时候可以用chpasswd配合管道一次性处理多个账户。比如批量设置 root 密码echo root:NewPass2025 | sudo chpasswd如果有多组账户可以准备一个文本文件比如users.txtroot:NewRootPass2025 alice:AlicePass2025 bob:BobPass2025然后执行sudo chpasswd users.txtchpasswd默认从标准输入读取“用户名:密码”格式的内容非常适合脚本化运维。我在自动化初始化服务器时经常把它写进 Ansible 或 shell 脚本里一条命令把 root 密码和多个管理账户密码全部重置。不过自动化改密码有个隐患明文密码会留在 shell 历史和日志里。建议在脚本里从环境变量或密钥管理服务读取密码不要直接写成明文常量。用完再清理一下 bash 历史history -c4. 忘记 root 密码后如何重置4.1 恢复模式最推荐也最简单root 密码忘了怎么办不用重装系统Ubuntu 自带的恢复模式就能解决。前提是你对这台机器有物理或控制台访问权限能在开机时进入 GRUB 菜单。操作步骤重启系统在 GRUB 菜单出现时选中默认的 Ubuntu 内核条目按下方向键选择第二项 “Advanced options for Ubuntu”。在子菜单里选择带有(recovery mode)的条目按回车。进入恢复菜单后选择root选项进入 root shell。此时不会询问 root 密码因为恢复模式默认以 root 身份进入系统。挂载文件系统为可写mount -o remount,rw /执行修改密码命令passwd root输入两次新密码成功后重启reboot -f重点就是第 4 步。很多人在恢复模式里执行passwd会报错Permission denied或cant lock /etc/passwd根本原因就是根文件系统还是只读挂载状态。恢复模式为了安全默认以只读方式挂载根分区必须先remount才能写 shadow 文件。4.2 维护模式 CtrlD 卡住的问题现在很多热搜索词都指向一个现象Ubuntu 在启动过程中卡在Give root password for maintenance (or press Control-D to continue)而用户不知道 root 密码按 CtrlD 又没有反应或者直接重启循环。这个提示其实是进入了维护模式通常是系统检测到文件系统异常或者你手动指定了single内核参数。它有两种出路输入 root 密码进入维护 shell。按 CtrlD 或输入exit让 systemd 继续执行常规启动流程。如果你没设过 root 密码又不想卡在这里最简单的办法是直接按 CtrlD 让系统继续启动。如果按了没反应检查一下是否在 GRUB 里误加了single或1参数因为这两个参数会强制进入单用户模式。把参数删掉恢复到正常启动。如果在维护模式里想重置密码同样先执行mount -o remount,rw /再执行passwd root。这个方法适用于已经能进入维护 shell 的场景进不去就参考下面的内核参数法。4.3 临时内核参数法不经过正常登录直接改如果恢复模式菜单因为某些原因进不去比如 GRUB 显示异常可以改内核启动参数让系统直接以 bash 启动。这个方法在 Ubuntu 22.04、24.04 上都实测可用。操作步骤重启在 GRUB 菜单选中要启动的 Ubuntu 条目按e进入编辑模式。找到以linux开头的那一行在末尾追加一个参数init/bin/bash按CtrlX或F10启动。系统会直接进入一个 root 的 bash 环境不会要求密码。由于此时根分区大概率是只读的先执行mount -o remount,rw /如果存在单独的/boot分区一般不需要挂载也能完成密码修改所以这一步不强制。执行passwd root修改密码。修改完成后执行exec /sbin/init让系统继续走正常的 init 流程或者直接reboot -f强制重启。这个方法本质上是绕过 systemd 直接拉起 bash所以任何依赖 systemd 的机制都不会运行。如果你修改了密码后又希望正常进入系统记得确保根分区以可写方式挂载并且 shadow 文件没有被锁。4.4 Live USB chroot 重置如果连内核参数都进不去或者你面对的是云主机控制台无法直接操作 GRUB那就得借助 Live USB 把系统的根分区挂载出来通过 chroot 修改密码。我没有详细展开怎么制作 Ubuntu Live USB毕竟官方文档已经写得很清楚。假设你已经用 Live USB 进入了一个临时 Ubuntu 系统接下来的步骤是用lsblk找到原系统根分区比如/dev/sda2lsblk根分区大小一般比启动分区大分区类型通常是 ext4 或 xfs。挂载根分区到/mntsudo mount /dev/sda2 /mnt如果有单独的/boot分区或 EFI 分区一并挂载sudo mount /dev/sda1 /mnt/boot/efi绑定系统运行所需的虚拟目录sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys进入原系统的环境sudo chroot /mnt /bin/bash在 chroot 里执行passwd root退出 chrootexit卸载所有挂载点sudo umount /mnt/dev sudo umount /mnt/proc sudo umount /mnt/sys sudo umount /mnt然后重启拔掉 Live USB正常进入系统。这里有个备份的建议修改密码前最好把原系统里的 shadow 文件复制一份sudo cp /mnt/etc/shadow /mnt/etc/shadow.bak一旦密码改错或者想恢复原状还能用备份文件还原。别嫌这一步多余我见过有人把/etc/shadow权限改坏、文件写坏最后不得不重建用户体系非常麻烦。5. 实操中常见的坑与排查5.1 恢复模式下无法锁定、无法写入最常见的报错是passwd: Authentication token manipulation error passwd: password unchanged大概率就是/etc/shadow或/etc/passwd所在分区还是只读。执行完mount -o remount,rw /后可以用下面命令确认mount | grep / 如果显示ro说明还只读重新执行 remount。要确保没有多余的挂载实体比如/被覆盖过多层。5.2 root 密码正确但 SSH 无法登录很多人设好 root 密码后高高兴兴去 SSH结果连试几次都被拒绝。这不是密码错是 SSH 服务默认配置限制了 root 登录。Ubuntu 的sshd_config默认是这样设置的PermitRootLogin prohibit-password这个选项的意思是root 可以通过密钥登录但不能用密码登录。就算你把密码设置得再复杂也是枉然。如果你想允许 root 密码登录需要修改/etc/ssh/sshd_configsudo nano /etc/ssh/sshd_config把这一行改成PermitRootLogin yes然后重启 SSH 服务sudo systemctl restart ssh这里我要说一句除非你明确知道风险否则不建议把线上服务器开成 root 密码登录。允许 root 远程密码登录会让暴力破解的目标变得非常明确任何公网 IP 都可能被扫描。更推荐的方式是用普通账户登录再通过 sudo 提权如果有 root 需求用 root 加密钥登录更稳。5.3 修改密码时提示密码太短或太弱Ubuntu 默认启用了pam_pwquality模块对密码复杂度有基础校验。常见的提示BAD PASSWORD: The password is shorter than 8 characters BAD PASSWORD: The password fails the dictionary check这是警告不是绝对错误。如果密码确实只有一个简单问题系统在交互式passwd里可能会让你再确认一次但如果是自动化脚本里执行chpasswd遇到策略拒绝会直接失败。想确认具体策略看文件cat /etc/pam.d/common-password通常能看到类似retry3 minlen8 difok1的配置。个人机器上想降低复杂度要求可以修改这些参考值但生产环境不建议动。更合理的方式是设置一个强度足够高的密码比如 14 位以上、包含大小写字母、数字和符号既满足默认策略也减少被爆破的可能。5.4 环境变量配置错误导致 sudo 咋样都不好使我经常遇到的一种情况是用户自己往/etc/environment或~/.bashrc里加了错误配置比如把 PATH 覆盖成空结果重启之后 sudo 都没法执行因为 sudo 不在当前 PATH 里。这时候别慌命令找不到不代表权限没了。用绝对路径执行/usr/bin/sudo /usr/bin/passwd root如果 sudo 本身不在常见路径下可以尝试/bin/su - -c passwd root前提是你知道 root 密码或者你还能从恢复模式进去。所以不要轻易把系统级别的 PATH 改成纯自定义值至少保留/usr/sbin、/usr/bin、/sbin、/bin这几个系统目录。5.5 设置 root 密码后想再把它锁起来有的场景只是临时需要 root 密码处理完想恢复和安全默认。比如交给外包运维前你开了 root 登录干完活又怕账户裸露在外。可以用锁定命令sudo passwd -l root执行后 shadow 里 root 密码位会再次变成!root 账户进入锁定状态无法登录也无法su -。但这不会影响你现有 sudo 用户想再启用 root 时执行sudo passwd root重新设置密码即可。完整的解锁流程对应关系操作命令效果设置/重置 root 密码sudo passwd root解锁 root 并设置新密码锁定 root 账户sudo passwd -l rootshadow 密码位变成!禁止登录查看 root 账户状态sudo passwd -S root显示 locked 或已设置密码状态我写自动化脚本的时候会在任务结束前自动执行passwd -l root避免临时密码泄漏在 team 成员的终端里。这个习惯对安全评分挺友好。6. 密码安全与管理心得6.1 root 密码到底该不该长期保留写这篇内容之前我又看了眼 Ubuntu 的默认安全设计它锁定 root 账户是有道理的。日常管理真的用不太到 root 密码sudo 完全够用。但很多服务器场景、学习实验环境、以及接手别人的机器时设置 root 密码又是绕不开的操作。我的建议是分场景决策本地虚拟机、测试环境可以直接设一个简单好记的 root 密码方便折腾。公网服务器保持 root 锁定日常用 sudo远程登录用普通用户加密钥。企业内网环境如果有合规审计要求root 密码必须有但不要直接在板卡上明文保存密码要定期轮换。如果你长期不需要 root 登录甚至可以保持 shadow 里的!状态。这样操作系统层面就切断了 root 直接登录的可能少暴露一个攻击面。6.2 几个提高运维安全度的操作习惯除了密码本身还有几点经验值得分享。第一备份/etc/shadow。每次手动改完密码或批量改密码前我都会先复制一份到/root/backup/或者/etc/shadow.bak。修改 shadow 文件出错时可以快速恢复。第二设置过 root 密码后SSH 里开启 root 登录要谨慎。如果确实要开加上PermitRootLogin yes的同时我会配合 fail2ban 和密钥认证一起使用把密码认证关掉。这样就算密码泄露攻击者也很难拿到 SSH 会话。第三对用户密码进行策略管理。Ubuntu 自带密码有效期机制可以用chage调整sudo chage -M 90 root sudo chage -W 7 root第一条让 root 密码每 90 天更换一次第二条在到期前 7 天提醒。对合规要求严格的环境这个命令比手写日历好用得多。6.3 我的几个实测经验最后说点个人感受。恢复模式确实好用但也别迷信它。有次我在一台硬盘加密的机器上忘了 root 密码恢复模式根本进不去因为加密盘没有密码根本解密不了最后只能从 Live USB 挂载后输入解密密钥再 chroot 去改。所以遇到加密磁盘时要提前想清楚整套恢复链路。还有一次我在恢复模式里只挂载了根目录没有挂载/procchroot 进去后passwd一直报错。后来发现是缺少虚拟文件系统绑定挂载proc、sys、dev后就正常了。这个细节平时不容易想到但一旦遇到浪费的时间会成倍增长。实用小技巧再补一个如果你不确定当前是不是 root执行id -u输出0就是 root不是的话就老老实实加sudo。很多重置命令在权限不够时不会明确告诉你“权限不足”反而给出奇怪的报错。Ubuntu 的 root 密码管理说穿了就是理解锁定状态、知道几条 passwd 命令、学会恢复模式三件事。真不是啥高深东西但确实值得认真对待。希望大家看完后能在五分钟内解决自己的 root 密码问题别再因为一个!符号折腾半天系统和文件权限。
返回列表