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 文件。
我有一个脚本 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 文件。