如何在 sudoers 中取消规则?

cei*_*art 3 linux sudo

现在 sudoers 支持/etc/sudoers.d我们可以在那里设置个性化规则的子文件夹。

我想使用它并避免更改主/etc/sudoers文件。

因此,在一个文件中,/etc/sudoers.d/99_adjusts我想取消设置主要用户规范规则:

ALL   ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

我试图避免在/etc/sudoers.
我想要一些可以撤销之前设置的规则:

!ALL   ALL=(ALL) ALL
Run Code Online (Sandbox Code Playgroud)

但不幸的是,上述方法不起作用;!查看手册页我不知道是否有一些技巧可以做到这一点。

War*_*ung 5

我想要一些可以撤销之前设置的规则:

!ALL ALL=(ALL) ALL

但不幸的是,上述方法不起作用

自然不会。在!ALL一开始的意思是“授予须藤权限没有用户”,所以规则什么都不做。线路后面的内容无关紧要,它无法匹配任何内容。

正如手册页中所指出的,可以覆盖/etc/sudoersvia :/etc/sudoers.dsudoers

当多个条目与用户匹配时,它们将按顺序应用。如果有多个匹配项,则使用最后一个匹配项(不一定是最具体的匹配项)。

由于sudoers.d目录内容sudoers通过#includedir通常放置在文件末尾的指令拉入顶级文件,因此添加规则/etc/sudoers.d/*将覆盖顶级文件中等效匹配的任何规则。

覆盖相关规则的正确语法是:

ALL ALL = (ALL) !ALL
Run Code Online (Sandbox Code Playgroud)

这从左到右说的是:

  1. ALL 用户...
  2. ALL主机...
  3. 可以作为一组ALL用户中的任何一个运行以下命令,默认为 root ...
  4. 哪些命令是 !ALL

由于最后一位表示“无命令”,因此它完全覆盖了主sudoers file.

然后,您需要/etc/sudoers在此之后从主文件中添加您想要的任何规则以恢复其权限授予。这是从/etc/sudoers文件中选择性复制和粘贴的简单问题。记住:最后一场比赛获胜。

警告:如果您没有将以上行之后的任何内容放入文件中,您将删除所有用户的sudo 权限。在root用户被禁用的系统上,su命令不起作用,您很可能会因弄乱它而无意中将自己锁定在机器之外。我建议您root在另一个终端中测试时保持一个单独的终端打开。


这已在 macOS 10.12 系统上得到验证,但它应该适用于#includedir在主sudoers文件底部具有该指令的任何系统。