在该sudoers
文件中,您可以包含以下任一行
modernNeo ALL=(ALL:ALL) ALL
modernNeo ALL=(ALL) ALL
我在这里查看了以下答案来理解这一点
- Sudoers 文件,为用户启用 NOPASSWD,所有命令
root ALL=(ALL:ALL) ALL
和 和有什么区别root ALL=(ALL) ALL
?- (ALL:ALL) 在 sudoers 中的作用?
- sudoers 中的“ALL ALL=(ALL) ALL”是什么意思?
问题1
如果我从上述答案中理解正确的话:
(ALL:ALL)
意味着您可以以任何用户和任何组的身份运行该命令(ALL)
意味着您可以以任何用户身份运行该命令,但您的组保持不变[它仍然是您自己的组] - 无论您在第三个条目中使用sudo
with时成为哪个用户?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
和指定它。如果您不指定任何内容,它将作为默认运行。无论如何,这就是大多数人最终使用它的方式。-g
sudo
root: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
.
它是否首先尝试将其作为您自己的组运行,然后浏览计算机上所有组的列表,然后找到允许您运行该命令的组?
不。
它从哪里获取组列表以及该列表中组的顺序是什么?
没有可供使用的列表。如上所述,它只是root
在user: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 su
或sudo ls
或。sudo anycommand
(ALL:ALL)
指的是(user:group)
会sudo
使用。可以在运行时使用-u
和指定它。-g
sudo
他们在这里是正确的。该命令sudo -u tom -g sawyer ls
正确且有效。
如果您不指定任何内容
root:root
,它将作为默认运行。
这里也是正确的。该命令sudo ls
将使用root:root
凭据(即权力/特权)执行。
无论如何,这就是大多数人最终使用它的方式。
正确,最常用sudo
命令不指定用户或组。所以,它是“无论如何,最常用”(默认root:root
)。
这让我很困惑......他们说如果你可以在运行命令时接受任何组,......
是的,他们声明(ALL:ALL)
该sudo
命令可以使用任何用户或组。
和:
……那么你就无法成为 root 了吗?
不,这种解释是不正确的。
使用
(ALL:ALL) ALL
sudo 可以成为任何组的任何用户来执行任何命令。甚至根。使用
(ALL) ALL
sudo 失去设置组的能力,但仍然可以设置用户并运行任何命令(sudo su -
允许)。