Estou tentando criar um site local que me permita descriptografar um arquivo, montar seu sistema de arquivos contido e iniciar um serviço systemd sem acessar o console. O serviço iniciado usa os arquivos do sistema de arquivos montado. O servidor web atualmente executa meu código python via cgi para servir um site simples para descriptografar e montar esse sistema de arquivos. Fiz exceções no arquivo sudoers para o usuário www-data executar determinados comandos que chamo em python.
Quando descriptografo o arquivo usando este site (que chama cryptsetup luksOpen
), o dispositivo descriptografado aparece conforme o esperado:
> file /dev/mapper/service-volume
/dev/mapper/service-volume: symbolic link to ../dm-0
Mas quando meu código python tenta montar isso, service-volume
ele só é montado dentro do processo de trabalho do Apache, indisponível para meu shell ou outros processos (XXX é o PID do processo de trabalho do 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
A operação de montagem executada é sudo /bin/mount /dev/mapper/service-volume /mnt/service-folder
com pythons subprocess.run().
Então, minhas perguntas são: o que está acontecendo lá? Isso é alguma mágica de namespace/cgroups? E como essa pasta pode ser montada para outro serviço/processo diferente do próprio Apache?
Informações adicionais:
Existe service-folder
(sem o sistema de arquivos 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 ..