Я пытаюсь создать локальный веб-сайт, который позволяет мне расшифровать файл, смонтировать содержащуюся в нем файловую систему и запустить службу systemd без доступа к консоли. Затем запущенная служба использует файлы в смонтированной файловой системе. Веб-сервер в настоящее время запускает мой код Python через cgi, чтобы обслуживать простой веб-сайт для расшифровки и монтирования этой файловой системы. Я сделал исключения в файле sudoers, чтобы пользователь www-data мог выполнять определенные команды, которые я вызываю в python.
Когда я расшифровываю файл с помощью этого веб-сайта (который вызывает cryptsetup luksOpen
) расшифрованное устройство выглядит так, как ожидалось:
> файл /dev/mapper/service-volume
/dev/mapper/service-volume: символическая ссылка на ../dm-0
Но когда мой код Python пытается смонтировать это объем обслуживания
он монтируется только в рабочем процессе apache, недоступен для моей оболочки или других процессов (XXX — это PID рабочего процесса apache):
>точка монтирования /mnt/служебная папка
/mnt/service-folder не является точкой монтирования
> кот /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
с помощью питонов subprocess.run().
Итак, мои вопросы: что там происходит? Это какая-то магия пространства имен/cgroups? И как эту папку можно смонтировать для другого сервиса/процесса, отличного от самого apache?
Дополнительная информация:
служебная папка
существует (без смонтированной файловой системы):
> ls -la /mnt/служебная-папка
всего 8
drwxr-xr-x 2 root root 4096 23 января 21:25 .
drwxr-xr-x 4 root root 4096 23 января 21:25 ..