it-swarm.cn

添加用户的正确sudoers语法是什么?

根据_/etc/sudoers_(Fedora 13)中的注释:

_## Syntax:
##
##    user  MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
_

我的两个相关问题:

  1. ALL=(ALL) ALL在以下行中是什么意思:

    _root  ALL=(ALL)   ALL
    _
  2. 我已经测试了这两行,但无法弄清它们在功能上有何不同:

    _superadm    ALL=(ALL)    ALL
    superadm    ALL=ALL
    _

我已经阅读了手册,但是语法规范很难遵循。我已经得出_(ALL) ALL_部分是命令和标签规范,但我仍然无法理解。

51
Belmin Fernandez

注意:我正在回答1。,因为Ignacio 已经回答2。

在以下Sudo条目中:

superadm  ALL=(ALL)   ALL

有四个字段:

  • 第一个指定将被授予某些命令特权的用户。
  • 第二个很少使用。这是此Sudo条目将在其上生效的主机名的列表。在标准设置中,只有一个主机与之相关(本地主机),因此该字段通常保留为ALL
  • 第四字段是superadm能够以提升的特权运行的命令列表。 ALL表示所有命令。否则,请使用逗号分隔的命令列表。
  • 第三个字段(写为(…)的一个可选字段)指定superadm用户可以运行以下命令的用户(和组)。 ALL表示他们可以选择任何内容(不受限制)。如果省略此字段,则意味着与(root)相同。

示例:

alan   ALL = (root, bin : operator, system) /bin/ls, /bin/kill

此处,允许alanroot(或bin)的形式运行两个命令/bin/ls/bin/kill,可能还需要附加operatorsystem组特权。

因此alan可以选择以ls用户身份并以bin的组权限运行operator

Sudo -u bin -g operator /bin/ls /whatever/directory

如果省略-u,则与-u root相同。如果省略-g,则不会授予其他组权限。

94
Stéphane Gimenez

sudoers(5)手册页上,[〜#〜] description [〜#〜]部分,Runas_Spec子部分:

第一个Runas_List表示可以通过Sudo-u选项运行命令的用户。

...

如果未指定Runas_Spec,则该命令可以以root的身份运行,并且不能指定任何组。

因此,在尝试以root的身份运行命令时,即在不将-uSudo一起使用时,没有功能上的区别。尝试以其他用户身份运行命令时,差异很重要。后者将阻止这种情况,但前者将允许它。

9
Ignacio Vazquez-Abrams