Linux安装脚本在PHP解释器中运行,但不在Web Apache中运行

问题描述

我的网站是关于复制文件的。我决定不使用复制文件来避免浪费大量时间和服务器,而决定使用overlayfs。代码mount到使用PHP解释器在终端中指定位置的文件夹。但是,当我从Apache运行PHP脚本时,该脚本不会mount覆盖。最糟糕的是,没有错误输出,因此我可以调试出什么问题了。我检查了PHP错误日志,没有关于发生的情况的输出

我要安装overlayfs的目的地是另一个用户。为此,我需要root才能执行mount命令。为了能够在不使用root或sudo的情况下运行代码,我看了一下这个question。我创建了c代码,对其进行了编译并设置了适当的权限(root.root,rwsr,sr...)。我在PHP文件中运行了代码

<?PHP
// filename over.PHP

print shell_exec("whoami")."\n";

print shell_exec('/var/www/vhosts/user/deployment/exec "sudo mount -t overlay overlay -o lowerdir=/var/www/vhosts/user/deployment/template5_dev,upperdir=/var/www/vhosts/user.deve/httpdocs,workdir=/var/www/vhosts/user/deployment/overlay-work /var/www/vhosts/user.deve/httpdocs"');

代码执行的操作是打印实际用户名(以确保我有输出,以查看代码是否执行),然后合并文件夹。文件/var/www/vhosts/user/deployment/exec是c程序,然后我传递代码以作为参数执行。

在终端中,我运行:PHP -f "/var/www/vhosts/user/httpdocs/over.PHP"。我检查了合并的文件夹,可以看到它的工作原理。输出user

然后我卸下覆盖物sudo umount /var/www/vhosts/user.deve/httpdocs

我通过浏览器访问PHP脚本,得到了输出user,但是文件夹没有合并。我多次按下ctrl-f5,但是什么也没有,没有错误,日志中没有错误

我将命令更改为shell_exec('/var/www/vhosts/user/deployment/exec "sudo mkdir /var/www/vhosts/user.deve/httpdocs/nouvo"');sudo从浏览器创建了文件夹。

我注意到只有mount命令无法正常运行。

sudo mount命令没有由apache运行的原因可能是什么,即使出现错误,它也不会打印出错误吗?

我只看/var/log/kern.log。我可以看到mount命令是从Web浏览器执行的。但是日志与终端中执行的日志不同。

在网络浏览器中:

 kernel: [  149.465459] overlayfs: filesystem on '/var/www/vhosts/user.deve/httpdocs' not supported as upperdir
 kernel: [  151.629192] overlayfs: filesystem on '/var/www/vhosts/user.deve/httpdocs' not supported as upperdir
 kernel: [  153.453612] overlayfs: filesystem on '/var/www/vhosts/user.deve/httpdocs' not supported as upperdir

从浏览器执行后,从终端上:

kernel: [  312.858797] overlayfs: upperdir is in-use as upperdir/workdir of another mount,accessing files from both mounts will result in undefined behavior.
 kernel: [  312.858804] overlayfs: workdir is in-use as upperdir/workdir of another mount,accessing files from both mounts will result in undefined behavior.

由于脚本相同,我只是没有从浏览器获取日志。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)