每次我想要运行一些需要我多次执行的操作时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:
会使您在运行命令之前输入密码,但容易引起混淆的一点是=
和的用法:
,因为作为该行主题的最后一个命令可以在前面添加=
、:
、或
)
,这会使语法混乱但语义相似。
答案1
它不仅仅是一个用户和一个命令:
redsandro host=(user:group) tag:commands
host
指定此行有效的主机名。除非您在需要不同规则的不同主机之间共享 asudoers 文件,否则使用特殊值ALL
“所有主机”是一个不错的选择。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
以任何其他用户或组的身份运行该命令。
答案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 权限,它可以并且用于以更精细的方式控制对特定命令的访问。