Utiliser binfmt-misc avec xattrs

4

J'utilise actuellement sur mon ordinateur 14.04 un logiciel de sandboxing qui isole les fichiers binaires Linux les uns des autres (Utilisation d'un type spécial d'isolation d'espace de nom différent de AppArmor)

Actuellement, la manière d'invoquer le bac à sable est la suivante:

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

Mon problème est, je veux appeler certains fichiers binaires arbitraires et les exécuter dans le bac à sable sans avoir à ajouter la /usr/local/bin/sandboxpartie à ma commande shell. C'est à dire:

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

Devient:

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

Je pensais que je pouvais facilement le faire grâce à binfmt-misc. Toutefois, après avoir lu la documentation, il semble que seule la demande d'un interprète semble pouvoir être sollicitée, que ce soit par des bits magiques dans le fichier même ou par son extension. Comme il n’est pas payant de faire l’une de ces choses dans ce cas particulier, j’ai cherché une option dans binfmt-misc qui me permettrait de spécifier des attributs étendus sur certains binaires que je veux lancer dans le bac à sable que binfmt-misc pourrait ensuite lire. et utiliser pour déterminer que ces fichiers binaires doivent être exécutés par /usr/local/bin/sandbox"l'interpréteur". Cependant, je n'ai pas encore trouvé une telle fonctionnalité qui me permettrait de le faire.

Est-il possible de lancer des fichiers binaires ELF arbitraires sans extension compilée pour la même architecture que mon ordinateur en utilisant le bac à sable automatiquement?

Joshumax
la source

Réponses:

2

Je ne connais pas de moyen de faire cela à travers binfmt-misc et xattrs, mais je proposerai une approche différente. Je ne l'ai pas essayé mais je ne vois pas pourquoi cela ne fonctionnerait pas.

L'idée est d'utiliser un montage en union pour masquer les fichiers binaires réels à l'aide d'un script wrapper qui appelle le bac à sable. Nous avons besoin d'un montage d'union où le répertoire supérieur est principalement lu et écrit dans un fichier non dupliqué, dans le répertoire inférieur, qui n'est pas pris en charge par tous les systèmes de montage d'union. En particulier, cela exclut OverlayFS, qui est maintenant intégré au noyau Linux.

Écrivez un script wrapper générique:

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

Créez un répertoire /sandboxet créez un montage d'union qui masque le système de fichiers racine. Je vais utiliser aufs (Ubuntu :)aufs-tools , qui a malheureusement été récemment abandonné; il peut y avoir un meilleur choix.

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

Pour chaque exécutable que vous voulez installer dans un sandbox, /sandbox/path/to/foocréez un lien vers le script wrapper (après avoir créé les répertoires nécessaires /path/tosous /sandbox).

Gilles
la source
Hmm, c'est une solution unique au problème! À moins que quelqu'un ait une méthode plus simple, je marquerai ceci comme accepté
joshumax