操作系统: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
,似乎我需要两者。如果文件sudoers
有ALL
用户,我可以用密码提示执行任何我想要的操作
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