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

Bel*_*dez 55 sudo

根据/etc/sudoers(Fedora 13) 中的评论:

## Syntax:
##
##    user  MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
Run Code Online (Sandbox Code Playgroud)

我的两个相关问题:

  1. ALL=(ALL) ALL以下行中的含义是什么:

    root  ALL=(ALL)   ALL
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我已经测试了这两行,但我无法弄清楚它们在功能上有何不同:

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

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

Sté*_*nez 97

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

在以下sudo条目中:

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

有四个字段:

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

例子:

alan   ALL = (root, bin : operator, system) /bin/ls, /bin/kill
Run Code Online (Sandbox Code Playgroud)

在这里,alan允许运行两个命令/bin/ls/bin/killas root(或bin),可能具有附加operatorsystem组权限。

因此alan可以选择以用户身份运行lsbin并具有这样operator的组权限:

sudo -u bin -g operator /bin/ls /whatever/directory
Run Code Online (Sandbox Code Playgroud)

如果-u省略,则与-u root. 如果-g省略,则不会授予额外的组权限。

  • 嗯,这可能是有史以来最好的答案...... (2认同)
  • 我观察到在 sudoers 或 /etc/sudoers.d/your_file_name 中的条目末尾必须有一个换行符 `\n` (2认同)

Ign*_*ams 9

sudoers(5)手册页,说明部分,Runas_Spec小节:

第一Runas_List指示哪些用户的命令可以被执行为经由sudo-u选项。

...

如果未指定 Runas_Spec,则命令可以作为运行,root并且可以不指定组。

因此,尝试将命令作为 运行时没有功能差异root,即,不使用-uwith 时sudo。尝试以其他用户身份运行命令时,差异很重要;后者会阻止这种情况,但前者会允许。