当前位置: 首页>>技术教程>>正文


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 关键字最多 3 次?我做错了吗?

当然,省略 NOPASSWD: 会使您在被允许运行命令之前输入密码,但有一点令人困惑的是 =: 的用法,因为作为该行主题的最终命令可以由 = 前缀, :) ,混淆了相似语义的语法。

最佳答案

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


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

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12453.html,未经允许,请勿转载。