在搭建全新的 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 successfullyUbuntu 24.04 会报告相同的步骤,但其状态消息以 info: 开头,并包含 adduser 检查的 UID 和 GID 范围。
Ubuntu 26.04 附带了一个更新的 adduser,它不会在控制台显示账户创建状态消息。版本 3.138 将默认控制台消息级别从 info 更改为 warn。密码和账户信息提示仍然会显示。要显示状态消息,请在创建账户时使用 --stdoutmsglevel=info:
adduser --stdoutmsglevel=info usernameadduser 命令会在 /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/ 下创建一个临时文件,为该特定用户或命令定义规则。这也是限制用户只能执行有限命令集的推荐方法。