Existe uma maneira de isolar um programa em execução do resto de um sistema Linux?

2

Primeiro de tudo, eu sei sobre virtualização e contêineres. Tenho certeza de que "ele quer contêineres" é o que surgiu em sua mente. (Não negue isso!)

No entanto, os contêineres são como o chroot: se você deseja executar o bash nele, é necessário copiar / espelhar um executável do bash em algum lugar no FS do contêiner, assim como todas as bibliotecas requeridas. (Se eu entendi mal alguma coisa, por favor me corrija).

O que eu quero saber é se posso iniciar um programa como busybox a partir do namespace atual (usando o FS original, portanto nenhuma cópia é necessária) e então isolá-lo (por exemplo, usando namespace do Linux FS ) para permitir o acesso a um único diretório.

De alguma forma, o ssh (sftp, na verdade) parece ser capaz de fazer algo assim sem requerer que o executável sshd esteja no FS chrooted. Mas ainda não tenho habilidades para entender o que está acontecendo sozinho.

    
por LouisTP 21.11.2015 / 00:18

1 resposta

1

Acho que você provavelmente está procurando por contêineres.

Ou talvez não. Os namespaces do Linux podem ser bastante transparentes, afinal. Eu não acredito que há um caminho para unshare um namespace para um processo que já foi chamado, mas você definitivamente pode unshare um namespace no tempo de chamada com pouco ou nenhum efeito. / p>

cd   /tmp
echo you >hey
sudo unshare -m busybox
echo hey >you; cat  hey
you

... e de outro terminal ...

cd   /tmp
cat  you
hey

... a árvore de montagem é compartilhada por padrão no namespace pai e, embora os sinalizadores de propagação de montagem de busybox estejam definidos como private por padrão , não faz diferença até que uma alteração na árvore de montagem seja de alguma forma afetada no namespace. Isso não precisa ser feito através de busybox.

... no terminal busybox ...

echo "#$$"
#8854

... e agora do outro ...

sudo nsenter -t8854 -m mount -t tmpfs none /tmp
cd .; cat hey
you

... mas do terminal busybox e, portanto, do namespace, acabamos de efetuar um mount

cd .;  cat hey
cat: hey: no such file or directory

... porque um novo tmpfs privado foi montado sobre o /tmp compartilhado no comando nsenter ...

cd ..
umount tmp
cat tmp/hey
you
    
por 21.11.2015 / 02:57