为什么这个 sudoer 命令不能以 root 身份运行?

为什么这个 sudoer 命令不能以 root 身份运行?

我想使用 下的配置让 PHP 访问非常具体的脚本/etc/sudoers.d

所以我做了以下事情:

visudo -f /etc/sudoers.d/99-php

并输入以下 sudo 规则:

www-data ALL = (root) NOPASSWD: /etc/my_script.sh

/etc/my_script.sh脚本中我创建了一个文件夹和一些文件,/tmp然后再次删除它们。

去测试:

su www-data
/etc/my_script.sh

这给了我很多这样的权限错误:

rm: cannot remove «/tmp/my_file.txt»: Access denied

这表明我的脚本实际上根本没有以 root 身份运行。

那么我该怎么做才能让它正常工作呢?

答案1

您必须使用以下命令运行命令须藤

sudo /etc/my_script.sh

编辑 suduoers 文件并不意味着每次调用脚本都以 root 身份运行,只是表示如果正确调用,它们被允许这样做。

将 shell 脚本放入 /etc 是否有意义是另一个问题。

答案2

首先,正如 dmourati 所说,您仍然需要用 调用脚本sudo,而不仅仅是运行它。

其次,您真的不应该放入脚本/etc- 特别是如果这些脚本应该由网络服务器运行。

第三,授予用户以 root 身份运行 shell 脚本的权限几乎等于授予他们完全 root 权限。一旦您获得了这么多 sudo 访问权限,就很容易逃到 shell 中。您不应该将整个 shell 脚本放在 sudoers 文件中,而应该找出 shell 脚本中哪些特定命令需要 root 权限,然后更改脚本以使用 调用这些特定命令sudo。换句话说,在脚本中,您现在有一行说

rm /tmp/myfile.txt

应该说

sudo rm /tmp/myfile.txt

相应的 sudoers 行应该是

www-data ALL = (root) NOPASSWD: rm /tmp/myfile.txt

相关内容