Estoy intentando crear un sitio web local que me permita descifrar un archivo, montar el sistema de archivos que contiene e iniciar un servicio systemd sin acceder a la consola. Luego, el servicio iniciado utiliza los archivos dentro del sistema de archivos montado. Actualmente, el servidor web ejecuta mi código Python a través de cgi para ofrecer un sitio web simple para descifrar y montar ese sistema de archivos. Hice excepciones en el archivo sudoers para que el usuario www-data ejecute ciertos comandos que llamo en Python.
Cuando descifro el archivo usando este sitio web (que llama cryptsetup luksOpen
), el dispositivo descifrado aparece como se esperaba:
> file /dev/mapper/service-volume
/dev/mapper/service-volume: symbolic link to ../dm-0
Pero cuando mi código Python intenta montar esto, service-volume
solo se monta dentro del proceso de trabajo de Apache, no disponible para mi shell u otros procesos (XXX es el PID del proceso de trabajo de 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
La operación de montaje ejecutada es sudo /bin/mount /dev/mapper/service-volume /mnt/service-folder
con pythons subprocess.run().
Entonces mis preguntas son: ¿Qué está pasando allí? ¿Es esta alguna magia de espacio de nombres/grupos c? ¿Y cómo se puede montar esta carpeta para otro servicio/proceso que no sea el propio Apache?
Información adicional:
Existe service-folder
(sin el sistema de archivos montado):
> 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 ..