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


50

根据/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部分是命令和标签规范,但是我仍然无法理解。

Answers:


91

注意:我正在回答1.,因为Ignacio 已经回答了 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/killas root(或bin),并可能具有附加operatorsystem组特权。

因此alan可以选择以用户身份运行lsbin并具有operator的组特权,如下所示:

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

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


1
好吧,这可能是有史以来最好的答案……
David Betz

1
我发现\n在sudoers或/etc/sudoers.d/your_file_name中条目的末尾必须有换行符
ramonrails

您也可以在主机名,路径名和命令行参数中使用通配符。喜欢这里/bin/cat /var/log/messages.?/bin/ls /var/log/*了解更多信息
Alex

9

sudoers(5)手册页的DESCRIPTION节的Runas_Spec子节中:

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

...

如果未指定Runas_Spec,则该命令可以按照运行root,也可以不指定任何组。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.