sudoers-请求简单解释

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:会使您在运行命令之前输入密码,但容易引起混淆的一点是=和的用法:,因为作为该行主题的最后一个命令可以在前面添加=:),这会使语法混乱但语义相似。

答案1

它不仅仅是一个用户和一个命令:


redsandro host=(user:group) tag:commands
  • host指定此行有效的主机名。除非您在需要不同规则的不同主机之间共享 asudoers 文件,否则使用特殊值ALL“所有主机”是一个不错的选择。

  • 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以任何其他用户或组的身份运行该命令。

答案2

让我们把这个拆开:
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 权限,它可以并且用于以更精细的方式控制对特定命令的访问。

相关内容