试图了解 sudoers 文件中“modernNeo ALL=(ALL:ALL) ALL”和“modernNeo ALL=(ALL) ALL”之间的区别

mod*_*Neo 9 permissions sudo

sudoers文件中,您可以有以下任一行

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

我在这里查看了以下答案以了解这一点

问题 1

如果我从上面的答案中正确理解,则(ALL:ALL)意味着您可以以任何用户和任何组的身份运行该命令,这(ALL)意味着您可以以任何用户的身份运行该命令,但您的组保持不变[它仍然是您自己的组],无论当您使用sudowithALL第三个条目时,您将成为用户?

问题2

但是随着 (ALL:ALL)

  • 如果您可以作为任何组运行它,那么 sudo 如何决定您运行命令的组,就好像您没有在命令行上使用 指定它一样-g
  • 它是否首先尝试将它作为您自己的组运行,然后在找到允许您运行命令的组之前查看计算机上所有组的列表?
  • 它从哪里获取组列表以及该列表中组的顺序是什么?
  • 或者root当您没有指定您想要成为的用户和/或组的偏好时,它是否只是恢复为用于用户和/或组?如果是这样,为什么要(ALL:ALL)在可以做的时候做(root:root)

问题 3

此外,在这个 Ubuntu 论坛帖子中,关于以下几行

%admin ALL=(ALL) ALL

%sudo   ALL=(ALL:ALL) ALL  
Run Code Online (Sandbox Code Playgroud)

他们说

admin 组中的用户可能会成为 root。sudo 组中的用户只能使用 sudo 命令。
例如,他们不能sudo su
(ALL:ALL)(user:group)的是sudo将使用。可以使用-u-g运行时指定它sudo。如果您未指定任何内容,它将作为 运行root:root,这是默认设置。无论如何,这就是大多数人最终使用它的方式。

这让我很困惑;他们说如果您在运行命令时可以接受任何组,那么您就无法成为 root?

ImH*_*ere 13

像这样的一行:

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

将允许用户 smith 使用 sudo 在任何计算机(第一个 ALL)上运行,就像任何用户(第二个 ALL,括号内的那个)一样运行任何命令(最后一个 ALL)。sudo 将允许此命令:

smith@site ~ $ sudo -u root -g root bash
Run Code Online (Sandbox Code Playgroud)

但这不会:

smith@site ~ $ sudo -u root -g smith bash
Run Code Online (Sandbox Code Playgroud)

由于尚未声明任何组的权限。

然而,这:

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

将允许执行此命令(假设用户tom和组sawyer存在):

smith@site ~ $ sudo -u tom -g sawyer bash
tom@site ~ $ id
uid=1023(tom) gid=1087(sawyer) groups=1047(tom),1092(sawyer)
Run Code Online (Sandbox Code Playgroud)

话说回来:

第一季度

(ALL:ALL) 表示您可以以任何用户和任何组的身份运行该命令

是的

(ALL) 表示您可以以任何用户身份运行该命令

是的

但你的组保持不变[它仍然是你自己的组]

不,唯一允许的组是root

Q2

sudo 如何决定你运行命令的组,就像你没有在命令行上使用 -g 指定它一样?

它默认为 root

它是否首先尝试将它作为您自己的组运行,然后在找到允许您运行命令的组之前查看计算机上所有组的列表?

不。

它从哪里获取组列表以及该列表中组的顺序是什么?

没有要使用的列表,没有要搜索的组,它root*:ALL使用时简单地归为默认值,如果*:group使用则归为命名组。

简单的规则,简单的动作。

或者,当您没有指定要成为的用户和/或组的偏好时,它是否只是恢复为用户和/或组使用 root 用户?

是的。

如果是这种情况,为什么在可以执行 (root:root) 的情况下执行 (ALL:ALL) ?

因为使用 (ALL:ALL) 你可以:

sudo -u tom -g sawyer id
Run Code Online (Sandbox Code Playgroud)

但是使用 (root:root) 你只能这样做:

sudo -u root -g root id
Run Code Online (Sandbox Code Playgroud)

没有别的(用户和组明智)。

Q3

对于这些线路:

   %admin  ALL=(ALL)     ALL
   %sudo   ALL=(ALL:ALL) ALL  
Run Code Online (Sandbox Code Playgroud)

admin 组中的用户可能会成为 root。

是的,组中的用户 (%)admin可以成为任何用户(包括 root)(因为(ALL)),但只能成为root组。

sudo 组中的用户只能使用 sudo 命令。

那是不正确的。sudo 组中的用户可以执行任何命令(最后一个ALL)。

组(%)中的sudo用户可以成为任何用户((ALL:)部分)

任何组((:ANY)部分)
并且
可以执行任何命令(最后一个ALL)(不仅是 sudo,这是特别不正确的)。

例如,他们不能 sudo su

不,他们可以做sudo suorsudo lssudo anycommand

(ALL:ALL) 指的是 sudo 将使用的 (user:group)。可以在运行 sudo 时使用 -u 和 -g 指定它。

他们在这里是正确的。该命令sudo -u tom -g sawyer ls正确有效。

如果您不指定任何内容,它将以 root:root 运行,这是默认设置。

并且在这里也是正确的。该命令sudo ls将在root:root权限下执行。

无论如何,这就是大多数人最终使用它的方式。

正确,最常用的 sudo 命令没有指定用户或组。
所以,它是“最常用的,无论如何”(默认root:root)。

这让我很困惑......他们说如果你在运行命令时可以接受任何组,

是的,他们声明(ALL:ALL)sudo 可以接受任何用户或组。

但:

那你就不能成为root了吗?

不,他们不是这么说的。