类 Unix操作系统上,visudo命令编辑sudo命令使用的sudoers文件。要更改允许哪些用户和组运行sudo,请运行visudo

如果运行sudo的用户不符合sudoers 中的身份验证配置,他们将被拒绝以升级的权限运行命令。

您不应通过在文本编辑器中打开来直接编辑sudoers。相反,使用visudo对其进行编辑,这将在将更改保存到磁盘之前验证其有效性。

描述

visudo编辑sudoers文件,该文件定义了具有管理员权限的用户和组。

Visudo 以安全的方式编辑 sudoers 文件,类似于vipw安全地编辑passwd文件的方式。Visudo 针对多个同时编辑锁定 sudoers 文件,提供基本的完整性检查,并检查解析错误。如果 sudoers 文件当前正在由其他人编辑,或者由您在另一个会话中编辑,您将收到一条消息,稍后再试。

有一个visudo使用的一个或多个编辑器的硬编码列表,在编译时设置。默认值为vi

笔记

默认情况下, visudo 不支持VISUALEDITOR 环境变量,许多程序使用它们来确定默认文本编辑器。但是,如果使用--with-env-editor选项配置 visudo或在 sudoers 文件中设置了env_editor 默认变量,则visudo使用VISUALEDITOR定义的任何编辑。但是,这样做会使您的系统容易受到安全漏洞的攻击,因为它允许用户通过设置VISUALEDITOR来执行他们想要的任何程序。

Visudo 会在编辑后解析 sudoers 文件,如果出现语法错误,将不会保存更改。发现错误后,visudo 会打印一条消息,说明发生错误的行号,用户将收到“现在怎么办?” 提示。在提示符下,输入e重新编辑 sudoers 文件,输入x退出而不保存更改,或输入Q退出并保存更改。“Q”选项应该非常小心地使用,因为如果 visudo 发现解析错误,那么sudo也会如此,并且没有人可以运行sudo再次,直到错误被修复。如果在检测到解析错误后键入“e”来编辑 sudoers 文件,则光标将放置在发生错误的行上,如果编辑器支持此功能。

句法

visudo [-c] [-h] [-q] [-s] [-V] [-f sudoers]

选项

-C启用仅检查模式。将检查现有的sudoers文件是否存在语法错误、ownermode。除非指定了-q选项,否则将在标准输出中打印一条消息,描述sudoers的状态。如果检查成功完成,visudo将退出,值为0。如果遇到错误,visudo将退出,值为1
-f sudoers指定备用sudoers文件位置。使用此选项,visudo将编辑(或检查)您选择的sudoers文件,而不是默认的/etc/sudoers。使用的锁定文件是指定的sudoers文件,其中附加了“.tmp”。仅在仅检查模式下,-f的参数可能是-,表示将从标准输入读取sudoers
-H-h(帮助)选项导致visudo命令打印一个简短的帮助信息到标准输出并退出。
-q启用安静模式。在此模式下,不会打印有关语法错误的详细信息。此选项仅在与-c选项结合使用时才有用。
-s启用对sudoers文件的严格检查。如果在定义之前使用别名,visudo会认为这是一个解析错误。请注意,无法区分别名和仅由大写字母、数字和下划线 (' _ ') 字符组成的主机名或用户名。
-V-V(版本)选项导致visudo命令打印其版本号并退出。

sudoers 文件

典型的 sudoers 文件如下所示:

#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults  env_reset
Defaults  mail_badpass
Defaults  secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root  ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

此处,“ root ALL=(ALL:ALL) ALL ”表示登录到任何主机名的用户root可以以任何用户或组的身份运行任何命令。该指令的一般形式是:

user hostname=(runas-user:runas-group) command

特殊词ALL可用于这些值中的任何一个,表示允许任何值。

如果user%开头,则将其解释为组的名称,并且该指令适用于该组中的所有用户。因此,“ %admin ALL=(ALL) ALL ”这一行允许属于admin组的任何用户以任何用户或组的身份运行任何命令。三行之后,为组sudo 的成员定义了相同的权限。

所以,通过这个配置,如果你想让一个用户拥有sudo权限,你可以将他们添加到adminsudo组中,完全不需要编辑sudoers。在这种情况下,命令:

usermod -aG sudo hope

将授予用户希望下次登录时的sudo 权限。有关如何使用usermod更改用户组成员身份的更多信息,请参阅usermod命令

如果您不想拥有专用的sudo组,则可以通过在文件中的任意位置添加一行,直接在 sudoers 中为用户定义 sudo 权限。例如,为了让用户hope获得完整的 sudo 访问权限,请添加:

hope ALL=(ALL:ALL) ALL

然后保存文件并退出 visudo 启动的文本编辑器。

重要文件

/etc/sudoerssudo命令的权限配置。
/etc/sudoers.tmp锁定文件,可防止对sudoers 进行多次同时编辑。

例子

要编辑sudoers文件,请以 root 身份运行visudo。使用su 将用户切换到 root (需要root密码,与您的用户密码不同):

su
Password:

然后运行visudo

visudo

或者,如果您已经拥有 sudo 权限,请使用sudo运行visudo

sudo visudo
[sudo] password for user:

Sudoer 指令

以下是运行visudo时添加到sudoers的行示例:

hope ALL=(ALL:ALL) ALL

用户hope可以以任何用户或组的身份运行所有命令,登录到此配置适用的任何主机。

%hope ALL=(ALL:ALL) ALL

同上,除了权限适用于hope组的任何成员(可能包括也可能不包括用户hope)。

hope myhost=(mysqluser:mysqlusers) mysqldump

用户hope,当登录到主机myhost 时,可以以用户mysqluser或组mysqlusers的成员身份运行命令mysqldump。例如,此指令将允许用户hope运行此命令:

sudo -u mysqluser -g mysqlusers mysqldump

su — 成为超级用户或其他用户。
sudo — 以超级用户身份执行命令。
vi — 基于ex视觉模式的文本编辑器。
vipw — 安全地编辑密码文件。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐