如何让用户运行特定的 sudo 命令而无需输入密码?
我已经尝试了以下操作:
我有一个/usr/local/bin/perform-update
具有以下权利的脚本-rwxr-xr-x 1 root root
:
#!/bin/bash
sudo apt-get update
sudo apt-get -y dist-upgrade
sudo apt-get -y autoremove
sudo snap refresh
我还有一个john
属于 sudoers 的用户。他可以通过输入 来执行命令perform-update
,但他需要输入密码。为了让他在使用此命令时无需输入密码,我尝试使用 添加新行sudo visudo
:
john ALL=(ALL) NOPASSWD: /usr/local/bin/perform-update
但用户在调用命令时仍需要输入密码perform-update
。因此我使用以下命令添加了所有必要的 apt 和 snap 命令sudo visudo
:
john ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt -y dist-upgrade, /usr/bin/apt -y autoremove, /usr/bin/snap refresh
但用户在调用命令时仍然需要输入密码perform-update
。
我需要做什么才能让他在执行时不必输入任何密码perform-update
?
编辑1:
根据@waltinator 和@terdon 的回答,我更新了以下内容。
/usr/local/bin/perform-update
:
#!/bin/bash
sudo apt update
sudo apt -y dist-upgrade
sudo apt -y autoremove
sudo snap refresh
sudo visudo
:
john ALL=(ALL) NOPASSWD: /usr/local/bin/perform-update
john ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt -y dist-upgrade, /usr/bin/apt -y autoremove, /usr/bin/snap refresh
perform-update
不幸的是,当我以用户身份调用时,系统仍要求我输入密码john
。错误在哪里visudo
?