sudoers – 请求简单的解释
每次我想能够运行一些需要我成为sudoer
太多次的东西,我需要谷歌搜索/etc/sudoers
的格式再次提醒我什么是正确的写它的方式。
现在我在我的sudoers
文件中看到了不同的写作风格,这是几个月来不同谷歌搜索结果的结果。 我也注意到第二个例子(下面)似乎适用于XFCE,但不适用于Cinnamon(Gnome 3)。 这可能是完全不相关的,但是我想一劳永逸地知道,sudoer线的正确语法是什么,给定的例子之间有什么区别?
redsandro ALL=NOPASSWD:/path/to/command
redsandro ALL=(ALL) NOPASSWD:/path/to/command
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command
还有, ALL
的所有内容是什么? 一个用户,一个命令,但我需要使用ALL
关键字最多三次? 我做错了吗?
当然,省略NOPASSWD:
会让您在允许运行命令之前输入密码,但有一点困惑是使用=
和:
,对于作为行主题的最终命令,可以通过以下任一方式加上=
, :
,或
)
,混淆类似语义的语法。
它不仅仅是一个用户和一个命令:
redsandro host=(user:group) tag:commands
-
host
指定此行有效的主机名。 除非您在使用特殊值ALL
不同主机之间共享asudoers文件,否则“所有主机”是一个不错的选择。 -
user
指定可以使用-u
选项运行命令的用户。 如果省略此项,则无法使用-u
选项。 -
group
指定可以与-g
选项一起使用的组。 如果省略它,则不能使用-g
选项。
user
和group
将特殊值ALL
理解为“所有用户/组”
如果省略整个(user:group)
事物,则不能使用-u
和-g
而只能以root身份运行命令。
-
tag
允许您指定一些选项,例如NOPASSWD
因此,使用您的第一个示例,您可以以root身份运行该命令,但不能使用-u
和-g
将其作为任何其他用户或组运行。
使用示例2.您可以以root身份运行命令或使用-u
以任何其他用户身份运行它。
使用3.您可以以root身份运行命令或使用-u
或-g
以与任何其他用户或组一样运行命令。
让我们分开这个:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command
redsandro是我们允许的用户名。 在前面加一个%以使其适用于一个组。
ALL是此规则的名称。 Sudoers可以做的不仅仅是授予全局权限。 这就是它变得复杂的地方。
=不需要解释
ALL:ALL读作(who_to_run_it_as:what_group_to_run_it_as)。 这样,您可以允许运行命令,但仅限于特定用户或组的上下文中。
NOPASSWD:告诉它关闭密码提示。
/ path / to / command允许您指定特定命令path_to_commmand,another_command
需要记住的是,虽然sudo主要由家庭用户升级为root权限,但它可以并且用于以更精细的方式控制对特定命令的访问。