我正在嘗試建立一個本地網站,讓我可以解密檔案、安裝其包含的檔案系統並啟動 systemd 服務,而無需存取控制台。然後啟動的服務使用已安裝的檔案系統中的檔案。網路伺服器目前透過 cgi 運行我的 python 程式碼,以提供一個簡單的網站來解密和掛載該檔案系統。我在 sudoers 檔案中為 www-data 用戶建立了例外,以執行我在 python 中調用的某些命令。
當我使用此網站(調用cryptsetup luksOpen
)解密檔案時,解密的裝置按預期顯示:
> file /dev/mapper/service-volume
/dev/mapper/service-volume: symbolic link to ../dm-0
但是當我的 python 程式碼嘗試掛載它時,service-volume
它只掛載在 apache 工作進程中,對於我的 shell 或其他進程不可用(XXX 是 apache 工作進程的 PID):
> mountpoint /mnt/service-folder
/mnt/service-folder is not a mountpoint
> cat /proc/XXX/mounts
...
/dev/mapper/service-volume /mnt/service-folder ext4 rw,relatime 0 0
執行的掛載操作是sudo /bin/mount /dev/mapper/service-volume /mnt/service-folder
透過 python 的 subprocess.run() 執行的。
所以我的問題是:那裡發生了什麼事?這是命名空間/cgroup 的魔法嗎?除了 apache 本身之外,如何為其他服務/進程安裝此資料夾?
附加資訊:
存在service-folder
(沒有安裝的檔案系統):
> ls -la /mnt/service-folder
total 8
drwxr-xr-x 2 root root 4096 Jan 23 21:25 .
drwxr-xr-x 4 root root 4096 Jan 23 21:25 ..