在 Ubuntu 上创建 sudo 用户:adduser、usermod 与 sudo 组实战(22.04/24.04/26.04 通用)

在搭建一台全新的 Ubuntu 服务器时,你首先要做的事情之一就是创建一个具备管理权限的普通用户账户。这样你可以使用 sudo 运行特权命令,而不必以 root 身份登录,既更安全,也能留下更清晰的审计记录。

本指南将展示如何在 Ubuntu 22.04、24.04 和 26.04 上创建新用户、为其创建主目录,并授予 sudo 访问权限。

创建 sudo 用户的步骤

按照以下步骤创建新用户账户并赋予其 sudo 访问权限。如果你想为现有用户配置 sudo,请跳到第 3 步。

1. 登录到你的服务器

以 root 用户身份登录到你的系统:

ssh root@server_ip_address

如果你已经拥有一个具备 sudo 访问权限的非 root 账户,请用该账户登录,并在下面的命令前加上 sudo 。

2. 创建新用户账户

使用 adduser 命令创建新用户账户。别忘了把 username 替换为你想要创建的用户名:

adduser username

系统会提示你设置并确认新用户的密码。请为新账户使用强密码。

命令打印的内容多少取决于 Ubuntu 版本。在 Ubuntu 22.04 上,adduser 会在执行时逐步报告每一步:

Adding user `username' ...
Adding new group `username' (1001) ...
Adding new user `username' (1001) with group `username' ...
Creating home directory `/home/username' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully

Ubuntu 24.04 报告同样的步骤,但其状态消息以 info: 开头,并包含 adduser 检查的 UID 和 GID 范围。

Ubuntu 26.04 搭载了较新的 adduser,它会把账户创建的状态消息保留在控制台之外。3.138 版本将默认的 console 消息级别从 info 改为 warn。密码与账户信息提示仍然会出现。若要在创建账户时显示状态消息,可在创建账户时使用 --stdoutmsglevel=info:

adduser --stdoutmsglevel
=
info username

adduser 命令会在 /home/username 创建主目录,并在询问密码之前从 /etc/skel 复制默认配置文件。设置好密码后,命令会提示你输入新用户的信息。如果你想把这些字段留空,按 ENTER 接受默认值即可。

Changing the user information for username
Enter the new value, or press ENTER for the default
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
Is the information correct? [Y/n]

主目录会自动创建,因此你无需传入任何额外参数。这也是在 Ubuntu 上推荐 adduser 的主要原因之一。

3. 将新用户添加到 sudo 组

在 Ubuntu 上,凡是属于 sudo 组的用户都会被授予 sudo 访问权限。使用 usermod 命令将用户添加到 sudo 组:

usermod -aG sudo username

-a 参数将用户追加到组中而不将其从其他组中移除,-G 指定要添加的补充组。

你也可以使用 adduser 将现有用户添加到 sudo 组:

adduser username sudo

这是 usermod -aG sudo username 的另一种写法。请仅在账户已存在时使用。如果用户已经建好,你只需授予权限,我们的 Ubuntu 添加用户到 sudoers 指南介绍了这种做法,包括限定到特定命令的规则。

adduser 与 useradd 的区别

Ubuntu 自带两个用于创建用户的命令,当你在意主目录时,二者的区别就很重要:

useradd -m -s /bin/bash username

passwd username

usermod -aG sudo username

在 Ubuntu 上交互式使用时,优先选择 adduser。在需要确定性、非交互式行为的自动化脚本中使用 useradd,并参考 useradd 速查表了解值得掌握的参数。

测试 sudo 访问

切换到新创建的用户:

su - username

使用 sudo 运行 whoami 命令:

sudo whoami

如果用户拥有 sudo 访问权限,那么 whoami 命令的输出将是 root:

root

如何使用 sudo

要使用 sudo,只需在命令前加上 sudo 和一个空格:

sudo ls -l /root

你在会话中首次使用 sudo 时,会提示输入用户密码:

[sudo] password for username:

如果你希望某些用户或命令在运行时免输入密码,请参考「如何免密码运行 sudo」指南。

故障排查

adduser 不显示账户创建状态消息——这在 Ubuntu 26.04 上是预期行为。密码与账户信息提示仍然会出现,但 adduser 默认只把警告和错误发送到控制台。用 id username 确认账户已创建。若要在以后创建账户时显示状态消息,请在初始 adduser 命令后加上 --stdoutmsglevel=info。

username is not in the sudoers file. This incident will be reported.(用户名不在 sudoers 文件中,此事件将被报告)——用户还不是 sudo 组的成员。以 root(或另一个 sudo 用户)登录并运行 usermod -aG sudo username,然后注销并重新登录,使组成员身份应用到新会话。

sudo: command not found(找不到 sudo 命令)——系统未安装 sudo 软件包,这在最小化服务器镜像和容器中很常见。以 root 运行 apt update && apt install sudo 安装它。

Group membership not taking effect(组成员身份未生效)——组更改在登录时生效。如果在将用户添加到 sudo 组后 sudo 仍然失败,请注销用户会话并重新登录,或使用 su - username 启动新 shell。

常见问题(FAQ)

如何在 Ubuntu 上创建带主目录的 sudo 用户?以 root 运行 adduser username。adduser 命令默认在 /home/username 创建主目录,并从 /etc/skel 复制骨架配置。然后用 usermod -aG sudo username 将用户添加到 sudo 组。

adduser 和 useradd 有什么区别?adduser 是一个交互式封装,它会一步创建主目录、设置密码并配置账户。useradd 是底层命令,除非传入 -m 参数,否则不会创建主目录。在 Ubuntu 上,交互式工作用 adduser,脚本中用 useradd。

如何移除用户的 sudo 访问权限?用 deluser username sudo(或 gpasswd -d username sudo)将用户从 sudo 组移除。账户本身仍然有效,仍可登录,只是失去了 sudo 权限。

不把用户加入 sudo 组也能授予 sudo 访问权限吗?可以。在 /etc/sudoers.d/ 下创建一个 drop-in 文件,为特定用户或命令定义规则。这也是将用户限制在一组有限命令的推荐做法。

结论

你现在拥有了一个具备 sudo 权限的普通用户账户。用它进行日常管理,并将 root 账户保留用于恢复或应急访问。关于更高级的 sudo 规则(例如允许特定命令免密码运行),请参阅 sudoers 配置指南。