问题描述
我的网站是关于复制文件的。我决定不使用复制文件来避免浪费大量时间和服务器,而决定使用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 (将#修改为@)