Sudoers 对单个可执行文件使用 NOPASSWD 但允许其他

Sudoers 对单个可执行文件使用 NOPASSWD 但允许其他

操作系统:Arch Linux

Linux 版本:4.16.11

Sudo 版本:1.8.23

我需要的

  • 能够any executable通过sudo密码提示执行
  • 能够执行一个可执行文件/home/username/script.sh,无需密码提示。

当我像这样配置时

username ALL=(ALL) NOPASSWD: /home/username/script.sh

我已获得预期的效果script.sh,但无法用执行任何其他executable操作sudo

例子

$ sudo ./script.sh # runs fine!

尝试其他方法

$ sudo nano /etc/sudoers
[sudo] password for username: 
Sorry, user username is not allowed to execute '/usr/bin/nano 
/etc/sudoers' as root on hostname.

ALL似乎这是用替换的结果NOPASSWD,似乎我需要两者。如果文件sudoersALL用户,我可以用密码提示执行任何我想要的操作

username ALL=(ALL) ALL

我尝试结合 ALL 和 NOPASSWD,但没有结果

username ALL=(ALL) ALL, NOPASSWD: /home/username/script.sh

像这样,它要求输入密码script.sh

我可以两者皆有吗?

答案1

man 5 sudoers说(“Sudoers 文件格式”部分):

当多个条目与用户匹配时,将按顺序应用它们。如果有多个匹配项,则使用最后一个匹配项(不一定是最具体的匹配项)。

因此,您应该严格按照以下顺序排列这些行:

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh

并且任何匹配的行(例如%sudo ALL=(ALL:ALL) ALL)应该位于该NOPASSWD行之前。

一般说明:#include#includedir允许sudoers包括其他文件从 1.9.1 版本开始,鼓励的指令分别是@include@includedir,但#include#includedir仍然被接受。不要#被愚弄,这些是不是评论。在搜索可能干扰的条目时,您不应省略内容#include#includedir指向。有用的选项:sudo -l

答案2

您经常会发现这样的一行/etc/sudoers

# Allow members of group sudo to execute any command
%wheel   ALL=(ALL:ALL) ALL

这将允许处于“车轮“ 组使用sudo适当的身份证明(例如:他们的密码)。指定组也可以是“须藤“,”行政",或其他......(例如:行以 开头%sudo

如果文件中存在此内容,则运行id以查看您所在的组:

$ id
uid=1000(attie) gid=1000(attie) groups=1000(attie),27(sudo),117(docker)

如果您的用户不在适当的组中,那么您必须将您的用户添加到该组。


另一种方法是逐一列出两个规则,最后匹配的规则生效(即:顺序很重要):

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh

请参阅 ArchWiki 上有关 sudo 的页面:https://wiki.archlinux.org/index.php/sudo#Example_entries

相关内容