Я пытаюсь создать локальный веб-сайт, который позволяет мне расшифровывать файл, монтировать содержащуюся в нем файловую систему и запускать службу systemd без доступа к консоли. Запущенная служба затем использует файлы в смонтированной файловой системе. Веб-сервер в настоящее время запускает мой код python через cgi для обслуживания простого веб-сайта для расшифровки и монтирования этой файловой системы. Я сделал исключения в файле sudoers для пользователя www-data, чтобы выполнять определенные команды, которые я вызываю в python.
Когда я расшифровываю файл с помощью этого веб-сайта (который вызывается cryptsetup luksOpen
), расшифрованное устройство отображается так, как и ожидалось:
> file /dev/mapper/service-volume
/dev/mapper/service-volume: symbolic link to ../dm-0
Но когда мой код Python пытается смонтировать это, service-volume
он монтируется только внутри рабочего процесса Apache, недоступного для моей оболочки или других процессов (XXX — это PID рабочего процесса Apache):
> 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 ..