答案是Ubuntu默认锁定root账户,需执行sudo passwd root激活。因root密码被设为!或!!,su -输入任何密码均失败;运行该命令后输入当前用户密码及新root密码,即可用su -登录。

su - 会失败,因为 Ubuntu 默认禁用 root 登录 —— 不是密码输错了,而是 root 账户压根没激活。
为什么 su - 提示“认证失败”
你输入 su - 后,系统要求输入 root 密码,但 Ubuntu 安装后 root 账户处于锁定状态:passwd 字段被设为 ! 或 !!,表示无有效密码。这不是配置错误,是安全设计。此时无论输什么密码都会报 su: 认证失败。
启用 root 前必须运行 sudo passwd root
只有这一步做完,su - 才能真正起作用:
- 打开终端,执行
sudo passwd root - 先输入当前用户密码(不是 root 的),完成 sudo 权限校验
- 接着输入两遍新 root 密码(输入时屏幕不显示字符,正常)
- 成功后提示
passwd: 已成功更新密码
完成后,su - 就能用刚设的密码登录了。注意:不要用弱密码,尤其别和当前用户密码相同。
sudo -i 和 sudo su - 的区别在哪
这两个命令都跳过了启用 root 的步骤,直接以 root 身份启动 shell,但行为不同:
-
sudo -i:模拟完整 root 登录,加载/root/.bashrc、/root/.profile等环境变量,$PATH是 root 的路径 -
sudo su -:效果和sudo -i几乎一致,但多了一层su调用,本质仍是基于当前用户 sudo 权限 -
sudo su(不带-):不加载 root 环境,$HOME仍是当前用户目录,$PATH也保留原样,容易导致命令找不到(比如apt在某些 PATH 下不可见)
日常调试或批量操作,优先用 sudo -i;如果脚本里要复现 root 环境,sudo -i 更可靠。
退出 root 的正确方式
不管用哪种方式进的 root,退出都一样简单:
- 输入
exit回车 - 或者按
Ctrl+D
别用 logout —— 它在非 login shell 下可能报错;也别依赖关终端,那样只是断开连接,后台进程可能还在跑。
真正容易被忽略的是环境残留:用 sudo su 进去再执行 apt update 失败,大概率是因为没加载 root 的 $PATH,而不是权限问题。切换前看一眼提示符和 echo $PATH,比反复试密码更省时间。


















