Q1

Q1

在该sudoers文件中,您可以包含以下任一行

modernNeo ALL=(ALL:ALL) ALL
modernNeo ALL=(ALL) ALL

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

问题1

如果我从上述答案中理解正确的话:

  • (ALL:ALL)意味着您可以以任何用户和任何组的身份运行该命令
  • (ALL)意味着您可以以任何用户身份运行该命令,但您的组保持不变[它仍然是您自己的组] - 无论您在第三个条目中使用sudowith时成为哪个用户?ALL

问题2

但与(ALL:ALL)

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

问题3

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

%admin ALL=(ALL) ALL

%sudo   ALL=(ALL:ALL) ALL  

他们说

管理员组中的用户可以成为 root。 sudo组中的用户只能使用sudo命令。例如,他们不能sudo su

(ALL:ALL)指的是(user:group)sudo使用。可以在运行时使用-u和指定它。如果您不指定任何内容,它将作为默认运行。无论如何,这就是大多数人最终使用它的方式。-gsudoroot:root

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

答案1

像这样的一行:

smith ALL=(ALL) ALL

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

smith@site ~ $ sudo -u root -g root bash

但这不会:

smith@site ~ $ sudo -u root -g smith bash

因为尚未声明任何组的权限。

然而,这:

smith ALL=(ALL:ALL) ALL

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

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

话说回来:

Q1

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

是的

(ALL) 意味着您可以以任何用户身份运行该命令...

是的

…但你的团体保持不变[它仍然是你自己的团体]

不可以,唯一允许的组是root

Q2

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

它默认为root.

它是否首先尝试将其作为您自己的组运行,然后浏览计算机上所有组的列表,然后找到允许您运行该命令的组?

不。

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

没有可供使用的列表。如上所述,它只是rootuser:ALL使用时落入默认值,或者在user:group使用时落入命名组。

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

root或者,当您未指定您想要成为的用户和/或组的首选项时,它是否会恢复用于用户和/或组?

是的。

如果是这样的话,当你可以执行 (root:root) 时,为什么还要执行 (ALL:ALL) 呢?

因为有了(ALL:ALL)你可以做到:

sudo -u tom -g sawyer id

但与(root:root)你只能做:

sudo -u root -g root id

没有其他(用户和组方面)。

第三季度

对于这些行:

    %admin  ALL=(ALL)     ALL
    %sudo   ALL=(ALL:ALL) ALL  
    

管理员组中的用户可以成为 root。

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

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

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

组(%)中的​​用户sudo可以成为任意用户((ALL:)部分) 任意组((:ALL)部分)可以执行任何命令(最后一个ALL)(不仅仅是 sudo,这是特别不正确的)。

例如,他们不能sudo su

不,他们可以做sudo susudo ls 或。sudo anycommand

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

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

如果您不指定任何内容root:root,它将作为默认运行。

这里也是正确的。该命令sudo ls将使用root:root凭据(即权力/特权)执行。

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

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

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

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

和:

……那么你就无法成为 root 了吗?

不,这种解释是不正确的。

  • 使用(ALL:ALL) ALLsudo 可以成为任何组的任何用户来执行任何命令。甚至根。

  • 使用(ALL) ALLsudo 失去设置组的能力,但仍然可以设置用户并运行任何命令(sudo su -允许)。

相关内容