在 Debian 上创建 sudo 用户:adduser、usermod 与 visudo 实战(11/12/13 通用)

sudo 命令(Super-user do 的缩写)是一个旨在允许用户以另一个用户(默认是 root 用户)的安全权限执行命令的程序。

在本指南中,我们将展示如何在 Debian 系统上创建新用户并赋予其 sudo 访问权限。这些步骤适用于 Debian 11、12 和 13。

你可以使用这个用户账户执行管理命令,而无需以 root 用户身份登录到你的 Debian 服务器。

快速参考

CommandDescription
adduser username交互式创建新用户
adduser --verbose username创建新用户并打印每一步(Debian 13)
usermod -aG sudo username将现有用户添加到 sudo 组
su - username切换到新用户
sudo whoami验证 sudo 访问是否生效
visudo安全编辑 sudoers 文件
groups username检查用户所属组

创建 sudo 用户

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

1. 登录到你的服务器

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

ssh root@server_ip_address

2. 创建新用户账户

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

adduser username

该命令会提示你设置并确认新用户的密码。确保新账户的密码尽可能强(字母、数字和特殊字符的组合)。

命令打印多少内容取决于 Debian 版本。在 Debian 11 和 12 上,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

Debian 13 搭载了较新的 adduser,它会把这些状态行保留在控制台之外。3.138 版本将默认控制台消息级别从 info 改为 warn,因此账户以完全相同的方式创建,但你看到的只有密码提示。当你想要回运行时的逐步叙述时,传入 --verbose:

adduser --verbose username

设置好用户密码后,命令会为用户创建主目录,在主目录中复制若干配置文件,并提示你设置新用户的信息。如果你想把这些信全部留空,只需按 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]

3. 将用户添加到 sudo 组

在 Debian 系统上,默认情况下 sudo 组的成员被授予 sudo 访问权限。要将用户添加到 sudo 组,使用 usermod 命令:

usermod -aG sudo username

该更改在用户下次登录时生效。

直接编辑 sudoers 文件

将用户添加到 sudo 组的另一种方法是直接在 /etc/sudoers 文件中授予权限。始终使用 visudo 编辑此文件,因为它会在保存前验证语法,防止损坏的 sudoers 文件把你锁在系统之外。

visudo

在文件末尾添加以下行,把 username 替换为实际用户名:

username ALL=(ALL:ALL) ALL

保存并退出。该用户现在可以在不是 sudo 组成员的情况下,使用 sudo 运行任何命令。

测试 sudo 访问

切换到新创建的用户:

su - username

使用 sudo 命令运行 whoami 命令:

sudo whoami

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

root

如何使用 sudo

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

sudo ls -l /root

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

[sudo] password for username:

故障排查

adduser finishes without printing anything(adduser 运行结束不打印任何内容)——这在 Debian 13 上是预期行为,adduser 只把警告和错误发送到控制台。静默运行意味着账户已正常创建。用 id username 确认,如果你想看到逐步输出,使用 adduser --verbose username。

User is not in sudoers file(用户不在 sudoers 文件中)——用户尚未被添加到 sudo 组,或者更改尚未生效。用 groups username 验证组成员身份。如果缺少 sudo 组,请以 root 运行 usermod -aG sudo username,然后让用户注销并重新登录。

sudo is not installed(sudo 未安装)——在最小化的 Debian 安装上 sudo 可能不存在。以 root 运行 apt install sudo 安装它,然后将用户添加到 sudo 组。

sudo access not working after usermod(usermod 后 sudo 访问不生效)——用户必须启动一个新的登录会话,组更改才能生效。完全注销并重新登录,或使用 su - username 打开一个新会话。

常见问题(FAQ)

将用户添加到 sudo 组和编辑 sudoers 有什么区别?添加到 sudo 组(usermod -aG sudo)是标准的 Debian 方法,对组内所有成员应用相同的权限。使用 visudo 编辑 /etc/sudoers 则给你更精细的控制:你可以将用户限制在特定命令,或允许某些任务的无密码 sudo。

如何从用户移除 sudo 访问权限?要从 sudo 组移除用户,请以 root 运行 gpasswd -d username sudo。要移除 sudoers 文件中的条目,请用 visudo 打开文件并删除相应行。

这在 Debian 11、12 和 13 上都适用吗?是的。adduser、usermod 和 visudo 命令在所有当前 Debian 版本上行为一致,sudo 组在它们之上都是默认机制。唯一可见的区别是 Debian 13 搭载的 adduser 3.152 不再把状态行打印到控制台。在那里运行 adduser --verbose username 即可看到它们。

如何检查哪些用户拥有 sudo 访问权限?运行 getent group sudo 列出 sudo 组的所有成员。对于 sudoers 文件条目,请用 visudo 或 cat /etc/sudoers 查看该文件。

结论

你已学会如何使用 sudo 组或 sudoers 文件在 Debian 上创建具有 sudo 权限的用户。对于日常使用,usermod -aG sudo 方法最简单。当你需要逐命令或无密码 sudo 规则时,使用 visudo。