根据/etc/sudoers
(Fedora 13)中的评论:
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
我的两个相关问题:
ALL=(ALL) ALL
以下行的含义是什么:root ALL=(ALL) ALL
我已经测试了这两行,但我无法弄清楚它们在功能上有何不同:
superadm ALL=(ALL) ALL superadm ALL=ALL
我已阅读手册,但语法规范很难遵循。我已经推断出该(ALL) ALL
部分是命令和标签规范,但我仍然无法理解它。
答案1
笔记:我正在回答1.,自伊格纳西奥已经回答了 2.。
在以下sudo
条目中:
superadm ALL=(ALL) ALL
有四个字段:
- 第一个指定将被授予某些命令权限的用户。
- 第二种很少使用。这是此 sudo 条目将对其生效的主机名列表。在标准设置中,只有一台主机相关(localhost),因此该字段通常保留为
ALL
. - 这第四
superadm
字段是能够以提升的权限运行的命令列表。ALL
表示所有命令。否则使用逗号分隔的命令列表。 - 第三个字段(
(…)
可选的)指定用户superadm
将能够以哪些用户(和组)身份运行以下命令。ALL
意味着他们可以选择任何东西(不受限制)。如果省略该字段,则与 含义相同(root)
。
例子:
alan ALL = (root, bin : operator, system) /bin/ls, /bin/kill
此处,alan
允许运行两个命令/bin/ls
和/bin/kill
as root
(或bin
),可能具有附加operator
或system
组权限。
因此可以选择以用户身份alan
运行并具有组权限,如下所示:ls
bin
operator
sudo -u bin -g operator /bin/ls /whatever/directory
如果-u
省略,则与 相同-u root
。如果-g
省略,则不会授予其他组权限。
答案2
从sudoers(5)
手册页来看,描述部分,Runas_Spec小节:
sudo
第一个 Runas_List 指示哪些用户可以通过的选项来运行该命令-u
。
...
如果未指定 Runas_Spec,则可以运行该命令,
root
并且不能指定任何组。
root
因此,当尝试运行命令 as 时,即不使用-u
with时,没有功能差异sudo
。当尝试以其他用户身份运行命令时,差异很重要;后者会阻止这种情况发生,但前者会允许这种情况发生。