新装的 Ubuntu 上想改一个系统配置文件,用 sudo 敲了半天,索性想切到 root 一次性做完。结果执行 su 提示认证失败。这不是密码记错了,而是 Ubuntu 默认把 root 账户锁住了。

为什么 su 进不去

Ubuntu 从设计上禁用 root 直接登录,安装时创建的普通用户通过 sudo 获得管理员权限。root 账户密码那一栏在 /etc/shadow 里是感叹号,表示不允许密码登录。所以 su 永远失败,这是正常的。

方式一:sudo -i 切换

最推荐的做法,不需要设置任何密码:

sudo -i

执行后输入当前用户的密码,就会进入一个 root 身份的交互式 shell,提示符从 $ 变成 #。退出用 exit 或 Ctrl+D。sudo -s 类似,区别是 -i 会加载 root 的登录环境变量。

方式二:sudo -u root 执行单条命令

只想跑一条命令,不必切换环境:

sudo -u root systemctl restart nginx

这种做法最不容易留下隐患,因为退出后仍回到普通用户。

方式三:给 root 设密码

确实需要 su 的场景,可以先设置密码:

sudo passwd root

输入两次新密码后就激活了。之后 su - 输入这个密码就能进。但要注意,激活 root 后 SSH 依然默认禁止 root 远程登录,这是 sshd_config 里 PermitRootLogin 控制。

想关闭也很简单,执行 sudo passwd -l root 重新锁住账户即可。

为什么大家说别用 root

不是迷信。root 权限下 rm 一个路径写错的通配符,系统文件就没了,也没有回收站。很多程序以 root 身份跑起来后会生成 root 属主的文件,之后普通用户改不了,反而添乱。

建议的日常姿势是:用 sudo 执行需要权限的单条命令,只有连续做一批系统配置时才用 sudo -i,做完立刻 exit。

sudo 报「不在 sudoers 文件中」

这说明当前用户没被授管理员权限。如果还有另一个管理员账户,可以用它执行:

sudo usermod -aG sudo 用户名

加完要重新登录才生效。如果是云服务器,一般可以在控制台的救援模式里改。这一步做完,前面说的三种方式都能正常使用。