[英]mount by php-script/apache
對於移動備份解決方案 (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 似乎已安裝。 但是 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 /
所以沒裝?
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 /media/storage/
test.txt
在基於 Web 界面的安裝之后,這是不可能的。
我沒有想法,有什么幫助嗎? 謝謝!
這里的主要問題可能是服務設置中的 systemd 選項。 apache2 示例: /lib/systemd/system/apache2.service
: PrivateTmp=true
導致此行為,請參閱此處的詳細信息。
簡而言之:如果在服務的 systemd 設置中啟用 PrivateTmp,則正在為服務設置文件系統命名空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.