我有一个脚本write_get.php
,我希望通过用户远程加载网页来执行该脚本。该脚本依次运行
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。我知道这里可能存在重大安全问题,但请知道此服务器上没有敏感数据/任何内容,并且sudo-requiring
脚本中创建的文件甚至不包含用户输入,所以目前我是更关心的是尝试执行上述操作而不是创建更安全的文件结构/替代方法。
答案 0 :(得分:0)
你要做的是一个坏主意,因为你需要给Apache用户提供无密码的root访问权限,这实际上就像让Apache用户等同于root用户。获得对服务器的root访问权限只需要上传恶意PHP脚本并让Apache用户执行该脚本。相反,只需通过执行以下命令使您正在编写的文件可由Apache用户写入:
chown -R www-data:www:data /var/www/html
然后,而不只是exec()
只是include
主脚本中的另一个PHP文件。