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

Yar*_*lyk 7 linux sudo gnu permissions sudoers

操作系统: Arch Linux

Linux版本: 4.16.11

须藤版本: 1.8.23

我需要什么

  • 能够执行any executablesudo使用密码提示
  • 能够在/home/username/script.sh没有密码提示的情况下执行一个可执行文件。

当我这样配置时

username ALL=(ALL) NOPASSWD: /home/username/script.sh
Run Code Online (Sandbox Code Playgroud)

我对 有想要的效果script.sh,但我不能executablesudo.

例子

$ sudo ./script.sh # runs fine!
Run Code Online (Sandbox Code Playgroud)

尝试别的

$ 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.
Run Code Online (Sandbox Code Playgroud)

看来这是替换的结果ALLNOPASSWD,看来我需要两者。如果sudoers文件已ALL供用户使用,我可以使用密码提示执行任何我想要的操作

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

我试图结合 ALL 和 NOPASSWD 但没有结果

username ALL=(ALL) ALL, NOPASSWD: /home/username/script.sh
Run Code Online (Sandbox Code Playgroud)

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

我可以两者兼得吗?

Kam*_*ski 18

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

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

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

username ALL=(ALL) ALL
username ALL=(ALL) NOPASSWD: /home/username/script.sh
Run Code Online (Sandbox Code Playgroud)

并且任何也匹配的行(如 eg %sudo ALL=(ALL:ALL) ALL)应该在该NOPASSWD行之前。

一般注意事项:#include#includedir允许sudoers包含其他文件。不要让#你蒙骗了,这些不是评论。在搜索可能会干扰的条目时,您不应该忽略 what#include#includedir指向。有用的选项:sudo -l