如何在Ubuntu添加用户到sudoers

sudo是一个命令行程序,它允许受信任的用户以root用户或其他用户身份执行命令。在本教程那个中我们将向您展示两种向用户授予sudo权限的方法

5 min read
By myfreax
如何在Ubuntu添加用户到sudoers

sudo命令旨在允许用户以其它用户身份运行命令,默认情况下为root用户。使用sudo而不是以root用户身份登录会更安全,因为您可以为单个用户授予有限的管理权限,而无需让他们知道root用户密码。

本教程展示两种向用户授予sudo权限的方法。包括使用adduser命令创建用户,usermod命令添加用户到sudo组。使用visudo添加用户到/etc/sudoers文件,使用nano编辑器修改sudoer,无密码运行sudo运行命令,仅允许运行指定的命令。

添加用户到sudo组

向用户授予sudo权限的最快捷方法是将用户添加到sudo组。该组的成员可以通过sudo以root用户执行任何命令,并在使用sudo时提示使用密码进行身份验证。例如我们要将用户myfreax添加sudo组。首先使用adduser命令添加用户myfreax

sudo adduser myfreax

输出将如下所示:

[sudo] password for 你的当前用户: 
Adding user `myfreax' ...
Adding new group `myfreax' (1001) ...
Adding new user `myfreax' (1001) with group `myfreax' ...
Creating home directory `/home/myfreax' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for myfreax
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] y

adduser命令默认会为用户创建家目录。该命令还会从/etc/skel目录中复制文件到myfreax用户的家目录中。

在创建用户myfreax的过程还将提示你填写用户的密码,第一次提示密码是当前用户的密码,第二次是要创建用户myfreax的密码。myfreax用户的其它信息可以留为空,按回车enter即可跳过。最后输入Y确定创建用户。

为了不改变用户的主要组,我们将使用-aG选项调用usermod命令将用户添加到sudo组中:

sudo usermod -aG sudo username

在大多数情况下,使用此方法授予sudo权限就已足够。要确认是否已将用户useranme添加到sudo组,请键入以下命令,id命令将打印用户username的所有组,并使用grep命令过滤标准输出:

sudo id username | grep sudo

你将会看到以下输出:

uid=1001(test1223) gid=1001(test1223) groups=1001(test1223),27(sudo)

sudo字符将会被高亮。你也可以直接切换到新创建的用户使用su命令。首先从当前用户切换到用户username,你将执行以下命令:

sudo su - username

现在我们已经切换用户username,我们可以尝试在用户username使用sudo执行whoami命令:

sudo whoami

系统会要求您输入用户username的密码:

[sudo] password for username: 

如果用户具有sudo的权限,该命令将打印root。否则,您将收到一条错误消息,提示用户不在sudoers文件中user is not in the sudoers file

添加用户到/etc/sudoers

/etc/sudoers文件中定义了用户和组的sudo权限的策略。此文件使您可以授予对命令的自定义访问权限并设置自定义安全策略。

您可以通过编辑/etc/sudoers文件或在/etc/sudoers.d目录中创建新的配置文件来配置用户sudo访问权限。/etc/sudoers.d目录将使用includedir /etc/sudoers.d指令包含到在sudoers文件中。includedir指令默认是没有启用的,如需要启用,去掉注释即可。

你应始终使用visudo命令来编辑/etc/sudoers文件。保存文件时,此命令检查文件是否存在语法错误。如果有任何错误,则不会保存文件。如果使用常规文本编辑器编辑文件,则语法错误可能会导致失去sudo的访问权限。

visudo使用EDITOR环境变量指定的编辑器,默认情况下visudo使用nano编辑器。如果要使用vim编辑文件,请运行以下命令更改EDITOR环境变量

EDITOR=vim sudo visudo

无密码运行sudo

在本教程中,我们将使用nano编辑器,假设您要允许用户运行sudo命令而无需输入密码。请运行以下visudo命令打开文件/etc/sudoers

sudo visudo

以下是符合/etc/sudoers文件定义的规则,它将允许用户在运行sudo命令时,无需输入密码即可运行。这在编写脚本时特别有用。如你需要,可将以下行添加到/etc/sudoers文件的末尾:

username  ALL=(ALL) NOPASSWD:ALL
/etc/sudoers

保存文件,然后退出编辑器。不要忘记用将username改为你使用的用户名。

仅允许运行指定的命令

另一个典型示例是仅允许用户使用sudo运行指定的命令。例如,要仅用户使用sudo运行mkdir命令创建目录rmdir命令删除目录。可以在/etc/sudoers文件中定义以下规则:

username ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/rmdir
/etc/sudoers

除了编辑sudoers文件外,还可以在/etc/sudoers.d目录中使用授权规则创建一个新文件来实现相同目的。添加到该目录下文件内容的规则与添加到/etc/sudoers文件中的规则相同。

echo "username  ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/username

最后记得开启includedir /etc/sudoers.d指令包含/etc/sudoers.d目录下的文件到在/etc/sudoers文件中。这种方法使得对sudo权限管理更加可维护。文件名并不重要,但通常的做法是根据用户名命名文件。

结论

要向Debian中的用户授予sudo访问权限,只需将该用户添加到sudo组即可。如果您有任何疑问,请随时发表评论。