Actualmente uso un software de espacio aislado en mi máquina 14.04 que aísla los archivos binarios de Linux entre sí (usando un tipo especial de aislamiento de espacio de nombres diferente a AppArmor)
Actualmente, la forma de invocar el sandbox es la siguiente:
/usr/local/bin/sandbox /path/to/binary --optional-arguments
Mi problema es que quiero invocar ciertos binarios arbitrarios y ejecutarlos en el sandbox.sintener que anteponer la /usr/local/bin/sandbox
parte a mi comando de shell. Es decir:
/usr/local/bin/sandbox /path/to/binary --optional-arguments --> *new process*
Se convierte en:
/path/to/binary --optional-arguments --> *binfmt-misc* --> *new process*
Pensé que podría hacer esto fácilmente gracias a binfmt-misc, sin embargo, después de leer la documentación, solo parece admitir la solicitud de un intérprete a través de bits mágicos en el archivo mismo o mediante su extensión de archivo. Como no es de pago hacer ninguna de esas cosas en este caso específico, busqué una opción en binfmt-misc que pudiera permitirme especificar atributos extendidos en ciertos archivos binarios que quiero lanzar en el sandbox que luego binfmt-misc podría leer. y utilícelo para determinar que estos binarios deben ser ejecutados por el /usr/local/bin/sandbox
"intérprete". Sin embargo, todavía tengo que encontrar una característica que me permita hacerlo.
¿Hay alguna manera de poder ejecutar archivos binarios ELF arbitrarios sin ninguna extensión compilada para la misma arquitectura que mi computadora usando el sandbox automáticamente?
Respuesta1
No conozco una manera de hacer esto a través de binfmt-misc y xattrs, pero propondré un enfoque diferente. No lo he probado pero no veo por qué no funcionaría.
La idea es utilizar unmontaje de uniónpara ocultar los binarios reales mediante un script contenedor que llama al sandbox. Necesitamos un montaje de unión donde el directorio superior se lee principalmente y las escrituras en un archivo no sombreado van al directorio inferior, que no es compatible con todos los sistemas de montaje de unión. En particular, esto descarta OverlayFS, que ahora está integrado en el kernel de Linux.
Escriba un script contenedor genérico:
#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"
Cree un directorio /sandbox
y cree un montaje de unión que sombree el sistema de archivos raíz. lo usaréaufs(Ubuntu:aufs-tools
), que lamentablemente ha sido abandonado recientemente; puede haber una mejor opción.
mount -t aufs -o br:/,br:/sandbox aufs-sandbox /
Para cada ejecutable que desee proteger, vincúlelo /sandbox/path/to/foo
al script contenedor (después de crear los directorios necesarios /path/to
en /sandbox
).