如何在CentOS添加用户到sudoers文件

sudo是一个命令行实用程序,旨在允许受信任的用户以其他用户(默认情况下为root用户)的身份运行命令。它用于向用户授予sudo访问权限

7 min read
By myfreax
如何在CentOS添加用户到sudoers文件

sudo命令旨在允许用户以其它用户身份运行命令,默认情况下为root用户。使用sudo而不是以root用户身份登录会更安全。

当你看到本教程的时候,相必你当前登录到CentOS的用户并不具备sudo权限。并提示你user is not in the sudoers file提示用户不在sudoers文件中。

请退出你当前登录到CentOS的用户,然后使用root用户登录。如果你忘记root密码可以进入单用户模式进行重置root用户密码。

如果你仅仅是让用户拥有sudo权限,请参考最后本教程最后一节添加用户到sudo组。你不必编辑sudoer文件以及研究sudoer文件的策略与规则。

sudoers文件

使用/etc/sudoers文件您可以为单个用户授予有限的管理权限,而无需让他们知道root用户密码。

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

您可以通过编辑/etc/sudoers文件或在/etc/sudoers.d目录中创建新的配置文件来配置用户sudo访问权限。

/etc/sudoers.d目录将使用includedir /etc/sudoers.d指令包含到在sudoers文件中。includedir指令默认是没有启用的,如需要启用,去掉注释即可。

你应始终使用visudo命令来编辑/etc/sudoers文件。保存文件时,此命令检查文件是否存在语法错误。

如果有任何错误,则不会保存文件。如果使用其它文本编辑器编辑/etc/sudoers文件,则没有语法错误检查保存时可能会导致失去sudo的访问权限。

如果你保存了存在语法错误的/etc/sudoers文件,你只有在使用root用户登录才能更改文件。如果你还忘记root用户密码请使用单用户模式登录。

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

EDITOR=nano sudo visudo

无密码运行sudo

如果您需要允许用户运行sudo命令而不需要输入密码。注意这是危险的操作,但是编写一些脚本的时候会有用。不建议对具有密码的用户设置此策略。

此规则myfreax  ALL=(ALL) NOPASSWD:ALL是符合/etc/sudoers文件定义的规则,它将允许用户在运行sudo命令时,无需输入密码即可运行。

我们将使用vim编辑器修改/etc/sudoers文件,请运行以下visudo命令打开文件/etc/sudoers

sudo visudo #启动编辑器

myfreax  ALL=(ALL) NOPASSWD:ALL #添加这行到/etc/sudoers文件

保存文件并退出vim编辑器。不要忘记用将myfreax改为你使用的用户名。

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

/etc/sudoers.d目录创建新文件时,建议使用用户名作为新的用户名。这种方法使得对sudo权限管理更加可维护。虽然文件名并不重要,但通常的做法是根据用户名命名文件。

以下命令将使用echo命令和tee命令以及管道将行myfreax  ALL=(ALL) NOPASSWD:ALL追加到/etc/sudoers.d/myfreax中。

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

最后记得开启includedir /etc/sudoers.d指令。includedir指令通常在/etc/sudoers文件的末尾,它将包含/etc/sudoers.d目录中的文件到sudoers文件中。

运行visduo命令,找到行includedir /etc/sudoers.d取消注释。如果不存在,可以添加行includedir /etc/sudoers.d到/etc/sudoers文件。

仅允许运行指定的命令

另一个典型的示例是仅允许用户使用sudo运行指定的命令。例如,要仅用户使用sudo运行mkdir命令创建目录rmdir命令删除目录

可以添加规则myfreax ALL=(ALL) NOPASSWD:/bin/mkdir,/bin/rmdir/etc/sudoers文件中。

添加用户到sudo组

如果你仅仅是让用户拥有sudo权限,最快捷方法是将用户添加到wheel组。wheel组的成员可以通过sudo以root用户执行运行任何命令。

如果需要创建用户并创建用户的家目录,你可以使用useradd的-m选项。useradd命令为你创建用户与用户的家目录。

当运行useradd命令后,你还需要为用户创建密码。没有密码的用户是不能登录到CentOS Linux。

但你可以使用sudo su - myfreax命令,切换用户myfreax。这里以myfreax用户作为示例,-表示包括所有环境变量也切换用户myfreax。

没有密码的用户是最安全的用户,这在配置FTP服务器时非常有用。这样ftp用户就不能登录到你的CentOS服务器。

如需要切换设置用户密码,请使用passwd命令为用户设置密码。系统将提示您确认密码。确保你使用强密码。

sudo useradd -m username #添加用户

passwd username #设置用户密码
Changing password for user username.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

修改用户所属组的命令是usermod命令,我们不建议直接修改用户主要组。这可能导致某些权限问题。最好的方式将用户追加到wheel组中。

因此你将使用usermod命令的-aG选项,添加用户到wheel组中,-a表示追加用户到指定组,-G选项表示不要将用户从其它组中移除。

你将使用以下命令将用户添加到wheel组,添加到wheel组后,可以使用sudo命令验证是否具有sudo权限。

sudo usermod -aG wheel myfreax

在大多数情况下,使用此方法授予sudo权限就已足够。要确认是否已将用户myfreax添加到wheel组。

请键入以下命令,id命令将打印用户myfreax的所有组,并使用grep命令过滤标准输出wheel字符将会被高亮:

sudo id myfreax | grep wheel

你将会看到以下输出:
uid=1001(myfreax) gid=1001(myfreax) groups=1001(myfreax),27(wheel)

现在你已经确认myfreax用户是否存在wheel组中。你可运行命令sudo whoami命令进行真实的测试。

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

结论

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