sudoers – 请求简单的解释

每次我想能够运行一些需要我成为sudoer太多次的东西,我需要谷歌搜索/etc/sudoers的格式再次提醒我什么是正确的写它的方式。

现在我在我的sudoers文件中看到了不同的写作风格,这是几个月来不同谷歌搜索结果的结果。 我也注意到第二个例子(下面)似乎适用于XFCE,但不适用于Cinnamon(Gnome 3)。 这可能是完全不相关的,但是我想一劳永逸地知道,sudoer线的正确语法是什么,给定的例子之间有什么区别?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. 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选项。

usergroup将特殊值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权限,但它可以并且用于以更精细的方式控制对特定命令的访问。