在搭建全新的 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 将默认控制台消息级别从 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 附带两个用于创建用户的命令,当你关心主目录时,它们之间的区别很重要:

  • adduser 是一个交互式 Perl 脚本,它会创建用户、在 /home/username 创建主目录、从 /etc/skel 复制文件,并提示输入密码。这是在 Ubuntu 和 Debian 上推荐的命令。

  • useradd 是底层用户管理命令。默认情况下,它不会创建主目录。要创建主目录,请传递 -m 标志:

    终端
    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 不在 sudoers 文件中。此事件将被报告。
用户不是 sudo 组的成员。以 root 身份(或其他 sudo 用户)登录,运行 usermod -aG sudo username,然后注销并重新登录,以便将组成员身份应用到新会话。

sudo:未找到命令
系统未安装 sudo 软件包,这在最小服务器镜像和容器中很常见。以 root 身份使用 apt update && apt install sudo 进行安装。

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

常见问题解答

如何在 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/ 下创建一个临时文件,为该特定用户或命令定义规则。这也是限制用户只能执行有限命令集的推荐方法。