Usando binfmt-misc em conjunto com xattrs

Usando binfmt-misc em conjunto com xattrs

Atualmente, uso um software de sandbox em minha máquina 14.04 que isola binários Linux uns dos outros (usando um tipo especial de isolamento de namespace diferente do AppArmor)

Atualmente, a forma de invocar o sandbox é assim:

/usr/local/bin/sandbox /path/to/binary --optional-arguments

Meu problema é que quero invocar certos binários arbitrários e executá-los na sandboxsemter que acrescentar a /usr/local/bin/sandboxparte ao meu comando shell. Ou seja:

/usr/local/bin/sandbox /path/to/binary --optional-arguments --> *new process*

Torna-se:

/path/to/binary --optional-arguments --> *binfmt-misc* --> *new process*

Achei que poderia fazer isso facilmente graças ao binfmt-misc, no entanto, depois de ler a documentação, ele só parece suportar a solicitação de um intérprete por meio de bits mágicos no próprio arquivo ou por meio de sua extensão de arquivo. Como não é pago fazer nenhuma dessas coisas neste caso específico, procurei uma opção em binfmt-misc que pudesse me permitir especificar atributos estendidos em certos binários que desejo lançar na sandbox que binfmt-misc poderia então ler e use para determinar que esses binários devem ser executados pelo /usr/local/bin/sandbox"intérprete". No entanto, ainda não encontrei nele um recurso que me permitisse fazer isso.

Existe alguma maneira de lançar binários ELF arbitrários sem extensão compilada para a mesma arquitetura do meu computador usando o sandbox automaticamente?

Responder1

Não conheço uma maneira de fazer isso através do binfmt-misc e do xattrs, mas proporei uma abordagem diferente. Ainda não experimentei, mas não vejo por que não funcionaria.

A ideia é usar ummontagem sindicalpara ocultar os binários reais por meio de um script wrapper que chama o sandbox. Precisamos de uma montagem sindical onde o diretório superior seja principalmente lido e gravado em um arquivo não sombreado, vá para o diretório inferior, que não é suportado por todos os sistemas de montagem sindical. Em particular, isso exclui o OverlayFS, que agora está integrado ao kernel do Linux.

Escreva um script wrapper genérico:

#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"

Crie um diretório /sandboxe crie uma montagem de união que acompanhe o sistema de arquivos raiz. vou usaraufs(Ubuntu:aufs-tools), que infelizmente foi recentemente abandonado; pode haver uma escolha melhor.

mount -t aufs -o br:/,br:/sandbox aufs-sandbox /

Para cada executável que você deseja colocar em sandbox, vincule /sandbox/path/to/fooao script wrapper (depois de criar os diretórios necessários /path/toem /sandbox).

informação relacionada