我正在尝试创建一个本地网站,它允许我解密文件、挂载其包含的文件系统并启动 systemd 服务,而无需访问控制台。然后,启动的服务使用已挂载文件系统中的文件。Web 服务器当前通过 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
使用 pythons subprocess.run()。
所以我的问题是:那里发生了什么?这是命名空间/cgroups 的魔力吗?除了 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 ..