PHP exec("sudo ...") 在网络上调用时似乎不起作用?

PHP exec("sudo ...") doesn't seem to work when called over the web?

我有一个脚本 write_get.php,我想通过用户远程加载网页来执行该脚本。此脚本依次运行s

exec("sudo php save_file.php ".$arg1)

做一些需要sudo权限的文件写入。当我作为非特权用户从我的 Web 服务器上的命令行 运行 write_get.php 时,这工作正常,但当我通过在 Web 浏览器中加载它来调用脚本时,它不能正常工作。 Web 浏览器显示相同的消息,使其看起来好像没有错误,但从未创建 save_file.php 创建的文件。需要发生的所有其他事情(不需要 sudo 的另一个临时文件创建 + 数据库插入)工作正常,但其他一切都在 write_get 而不是 sudo-requiring save_file 中。

我假设服务器在远程调用时以某种方式阻止了对 exec("sudo... 的调用?或者如果没有,这里发生了什么?最重要的是,我该如何解决这个问题?


p.s。我知道这里可能存在主要的安全问题,但请注意此服务器上没有敏感的 data/anything 并且在 sudo-requiring 脚本中创建的文件甚至不包含用户输入,所以目前我更关心尝试执行上述操作,而不是创建更安全的文件 structure/alternate 方法。

您尝试做的是一个坏主意,因为您需要为 Apache 用户提供无密码的 root 访问权限,这基本上就像让 Apache 用户等于 root 一样。要获得对服务器的根访问权限,只需上传恶意 PHP 脚本并让 Apache 用户执行该脚本。相反,只需通过执行以下命令使您正在写入的文件可由 Apache 用户写入:

chown -R www-data:www:data /var/www/html

然后不执行 exec() 而是 include 主脚本中的另一个 PHP 文件。