简体   繁体   English

通过 php-script/apache 挂载

[英]mount by php-script/apache

for a mobile backup-solution (rpi) I need to mount devices controlled by a webinterface (apache/php7.4).对于移动备份解决方案 (rpi),我需要安装由 web 界面 (apache/php7.4) 控制的设备。 I know, there is a risk, but I added www-data to the sodoers.我知道,有风险,但我在 sodoers 中添加了 www-data。

My problem is, mounting seems to work, seen from webinterface, from commandline the device seems not to be mounted.我的问题是,从网络界面看,从命令行看,安装似乎有效,设备似乎没有安装。 And my backup-scripts can not access the devices.而且我的备份脚本无法访问这些设备。

To reproduce I have a test-script lsblk.php:为了重现我有一个测试脚本 lsblk.php:

<?php
        echo (shell_exec("whoami"));
        echo (shell_exec("sudo whoami"));

        echo ("\n\numount\n");
        echo (shell_exec("sudo umount /media/storage"));
        echo (shell_exec("sudo lsblk"));

        echo ("\n\nmount\n");
        echo (shell_exec("sudo mount /dev/sda1 /media/storage"));
        echo (shell_exec("sudo lsblk"));
?>

Called by webinterface I get this back to the browser:由 webinterface 调用,我将其返回给浏览器:

www-data
root


umount
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
`-sda1        8:1    0 931.5G  0 part 
mmcblk0     179:0    0  29.7G  0 disk 
|-mmcblk0p1 179:1    0   256M  0 part /boot
`-mmcblk0p2 179:2    0  29.5G  0 part /


mount
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
`-sda1        8:1    0 931.5G  0 part /media/storage
mmcblk0     179:0    0  29.7G  0 disk 
|-mmcblk0p1 179:1    0   256M  0 part /boot
`-mmcblk0p2 179:2    0  29.5G  0 part /

/media/storage seems to be mounted. /media/storage 似乎已安装。 But lsblk (as pi, root or www-data) always gives back:但是 lsblk(作为 pi、root 或 www-data)总是回馈:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
└─sda1        8:1    0 931.5G  0 part 
mmcblk0     179:0    0  29.7G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot
└─mmcblk0p2 179:2    0  29.5G  0 part /

So it's not mounted?所以没装?

sudo -u www-data php./lsblk.php shows the same like the webinterface: sudo -u www-data php./lsblk.php 显示与 web 界面相同:

www-data
root


umount
umount: /media/storage: not mounted.
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
└─sda1        8:1    0 931.5G  0 part 
mmcblk0     179:0    0  29.7G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot
└─mmcblk0p2 179:2    0  29.5G  0 part /


mount
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
└─sda1        8:1    0 931.5G  0 part /media/storage
mmcblk0     179:0    0  29.7G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot
└─mmcblk0p2 179:2    0  29.5G  0 part /

But lsblk from commandline now shows the mounted device:但是命令行中的 lsblk 现在显示已安装的设备:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0 931.5G  0 disk 
└─sda1        8:1    0 931.5G  0 part /media/storage
mmcblk0     179:0    0  29.7G  0 disk 
├─mmcblk0p1 179:1    0   256M  0 part /boot
└─mmcblk0p2 179:2    0  29.5G  0 part /

Now I can access the storage: ls /media/storage/现在我可以访问存储: ls /media/storage/

test.txt

This was not possible after webinterface-based mounting.在基于 Web 界面的安装之后,这是不可能的。

I am out of ideas, any help?我没有想法,有什么帮助吗? Thank you!谢谢!

The main issue here is presumably an systemd option in the service settings.这里的主要问题可能是服务设置中的 systemd 选项。 apache2 example: /lib/systemd/system/apache2.service : PrivateTmp=true causes this behaviour, see details here . apache2 示例: /lib/systemd/system/apache2.servicePrivateTmp=true导致此行为,请参阅此处的详细信息。

In short: If PrivateTmp is enabled in the systemd settings for a service, a file system namespace is being set up for the service.简而言之:如果在服务的 systemd 设置中启用 PrivateTmp,则正在为服务设置文件系统命名空间。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM