在类 Unix操作系统上,visudo命令编辑sudo命令使用的sudoers文件。要更改允许哪些用户和组运行sudo,请运行visudo。
如果运行sudo的用户不符合sudoers 中的身份验证配置,他们将被拒绝以升级的权限运行命令。
您不应通过在文本编辑器中打开来直接编辑sudoers。相反,使用visudo对其进行编辑,这将在将更改保存到磁盘之前验证其有效性。
描述
visudo编辑sudoers文件,该文件定义了具有管理员权限的用户和组。
Visudo 以安全的方式编辑 sudoers 文件,类似于vipw安全地编辑passwd文件的方式。Visudo 针对多个同时编辑锁定 sudoers 文件,提供基本的完整性检查,并检查解析错误。如果 sudoers 文件当前正在由其他人编辑,或者由您在另一个会话中编辑,您将收到一条消息,稍后再试。
有一个visudo使用的一个或多个编辑器的硬编码列表,在编译时设置。默认值为vi。
默认情况下, visudo 不支持VISUAL或EDITOR 环境变量,许多程序使用它们来确定默认文本编辑器。但是,如果使用–with-env-editor选项配置 visudo或在 sudoers 文件中设置了env_editor 默认变量,则visudo使用VISUAL或EDITOR定义的任何编辑器。但是,这样做会使您的系统容易受到安全漏洞的攻击,因为它允许用户通过设置VISUAL或EDITOR来执行他们想要的任何程序。
Visudo 会在编辑后解析 sudoers 文件,如果出现语法错误,将不会保存更改。发现错误后,visudo 会打印一条消息,说明发生错误的行号,用户将收到“现在怎么办?” 提示。在提示符下,输入e重新编辑 sudoers 文件,输入x退出而不保存更改,或输入Q退出并保存更改。“Q”选项应该非常小心地使用,因为如果 visudo 发现解析错误,那么sudo也会如此,并且没有人可以运行sudo再次,直到错误被修复。如果在检测到解析错误后键入“e”来编辑 sudoers 文件,则光标将放置在发生错误的行上,如果编辑器支持此功能。
句法
visudo [-c] [-h] [-q] [-s] [-V] [-f sudoers]
选项
-C | 启用仅检查模式。将检查现有的sudoers文件是否存在语法错误、owner和mode。除非指定了-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权限,你可以将他们添加到admin或sudo组中,完全不需要编辑sudoers。在这种情况下,命令:
usermod -aG sudo hope
将授予用户希望下次登录时的sudo 权限。有关如何使用usermod更改用户组成员身份的更多信息,请参阅usermod命令。
如果您不想拥有专用的sudo组,则可以通过在文件中的任意位置添加一行,直接在 sudoers 中为用户定义 sudo 权限。例如,为了让用户hope获得完整的 sudo 访问权限,请添加:
hope ALL=(ALL:ALL) ALL
然后保存文件并退出 visudo 启动的文本编辑器。
重要文件
/etc/sudoers | sudo命令的权限配置。 |
/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 — 安全地编辑密码文件。
今天的文章Linux visudo 命令分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/6563.html