使用 sudo 以特定用户身份授予特定脚本的无密码权限

使用 sudo 以特定用户身份授予特定脚本的无密码权限

我有一台运行 Debian Squeeze 并安装了最新更新的服务器。我尝试设置文件sudoers以允许用户www-data以特定用户身份执行特定的 shell 脚本。我visudo为此添加了以下行:

www-data ALL=(img) NOPASSWD: /path/to/script/imgsync.sh

然后我尝试以用户 www-data 的身份调用它(我首先从 root 切换到 www-data):

sudo -u img /path/to/script/imgsync.sh

令我惊讶的是,它仍然要求输入密码:

[sudo] password for www-data:

我希望NOPASSWD:能处理好这个问题?

真正让我困惑的是:我有另一台具有相同设置的服务器,无需密码即可运行。此外,我在同一台服务器上还有其他类似的权限,也无需密码即可运行。

我甚至添加了一行

Defaults:www-data       !authenticate

使用 visudo (只是为了测试,我不想要这个)。然后,当我再次尝试时,我收到了 (矛盾的) 错误消息:

抱歉,用户 www-data 无权在 servername 上以 img 形式执行“/path/to/script/imgsync.sh”。

我怎样才能让它执行而不必提供密码(并且不给予 www-data 任何其他权限)?

答案1

事实证明,上述设置没有任何问题。在我的测试中,脚本遇到了用户img缺少权限的目录,从而导致了上述结果。

尽管现在一切正常,但我仍然对dash(默认非登录 shell)无用的错误消息/行为感到有点不满意。

我会留下这个帖子,也许对其他人有帮助。

相关内容