【问题标题】:mount by php-script/apache通过 php-script/apache 挂载
【发布时间】:2022-08-03 22:07:17
【问题描述】:

对于移动备份解决方案 (rpi),我需要安装由 web 界面 (apache/php7.4) 控制的设备。我知道,有风险,但我在 sodoers 中添加了 www-data。

我的问题是,安装似乎工作,来自网络界面的场景,从命令行,设备似乎没有被安装。而且我的备份脚本无法访问这些设备。

为了重现我有一个测试脚本 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\"));
?>

由 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. But lsblk (as pi, root or www-data) always gives back:

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 /

所以它没有安装?

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 /

但是命令行中的 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 /

现在我可以访问存储: ls /媒体/存储/

test.txt

在基于 Web 界面的安装之后,这是不可能的。

我没有想法,有什么帮助吗?谢谢!

  • 疯狂,apache-web-applications 可以访问已安装的存储,而其他进程不能。我使用文件浏览器 (github.com/filebrowser/filebrowser)(以 root 身份运行)并且当 mejiro (github.com/dmpop/mejiro) 读取时它看不到任何文件/写权限!
  • 作为 www-data 运行文件浏览器没有任何改变。如果我通过命令行安装,它可以工作,如果我通过 apache/php 安装,它就像没有为非 apache 安装......
  • 这不应该在Super User 上?

标签: php apache sudo


【解决方案1】:

这里的主要问题可能是服务设置中的 systemd 选项。 apache2 示例:/lib/systemd/system/apache2.servicePrivateTmp=true 导致此行为,请参阅详细信息 here

简而言之:如果在服务的 systemd 设置中启用 PrivateTmp,则正在为服务设置文件系统命名空间。

【讨论】:

    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多