Ich verwende derzeit auf meinem 14.04-Rechner eine Sandboxing-Software, die Linux-Binärdateien voneinander isoliert (unter Verwendung einer speziellen Art der Namespace-Isolierung, die sich von AppArmor unterscheidet).
Derzeit kann die Sandbox folgendermaßen aufgerufen werden:
/usr/local/bin/sandbox /path/to/binary --optional-arguments
Mein Problem ist, dass ich bestimmte beliebige Binärdateien aufrufen und in der Sandbox ausführen lassen möchte.ohneIch muss den /usr/local/bin/sandbox
Teil meinem Shell-Befehl voranstellen. Beispiel:
/usr/local/bin/sandbox /path/to/binary --optional-arguments --> *new process*
Wird:
/path/to/binary --optional-arguments --> *binfmt-misc* --> *new process*
Ich dachte, dass ich dies dank binfmt-misc problemlos tun könnte, aber nach dem Durchlesen der Dokumentation scheint es nur die Anforderung eines Interpreters über magische Bits in der Datei selbst oder über die Dateierweiterung zu unterstützen. Da es in diesem speziellen Fall nicht möglich ist, eine dieser Möglichkeiten zu nutzen, habe ich in binfmt-misc nach einer Option gesucht, mit der ich erweiterte Attribute für bestimmte Binärdateien angeben kann, die ich in der Sandbox ausführen möchte. Binfmt-misc kann diese dann lesen und verwenden, um zu bestimmen, dass diese Binärdateien vom /usr/local/bin/sandbox
„Interpreter“ ausgeführt werden müssen. Ich habe jedoch noch keine solche Funktion darin gefunden, die mir dies ermöglichen würde.
Gibt es eine Möglichkeit, mithilfe der Sandbox automatisch beliebige ELF-Binärdateien ohne Erweiterung zu starten, die für die gleiche Architektur wie mein Computer kompiliert wurden?
Antwort1
Ich kenne keine Möglichkeit, dies über binfmt-misc und xattrs zu tun, aber ich schlage einen anderen Ansatz vor. Ich habe es nicht ausprobiert, aber ich sehe keinen Grund, warum es nicht funktionieren sollte.
Die Idee besteht darin, einenAnschlussmontageum die echten Binärdateien durch ein Wrapper-Skript zu verbergen, das die Sandbox aufruft. Wir benötigen ein Union-Mount, bei dem das obere Verzeichnis hauptsächlich gelesen wird und das Schreiben in eine nicht-überschattete Datei in das untere Verzeichnis geht, was nicht von allen Union-Mount-Systemen unterstützt wird. Dies schließt insbesondere OverlayFS aus, das jetzt in den Linux-Kernel integriert ist.
Schreiben Sie ein allgemeines Wrapper-Skript:
#!/bin/sh
exec /usr/local/bin/sandbox "${0#/sandboxed}" "$@"
Erstellen Sie ein Verzeichnis /sandbox
und erstellen Sie einen Union Mount, der das Root-Dateisystem überdeckt. Ich verwendeauf(Ubuntu:aufs-tools
), das leider vor Kurzem aufgegeben wurde; möglicherweise gibt es eine bessere Alternative.
mount -t aufs -o br:/,br:/sandbox aufs-sandbox /
Erstellen Sie für jede ausführbare Datei, die Sie in einer Sandbox ausführen möchten, eine Verknüpfung /sandbox/path/to/foo
mit dem Wrapper-Skript (nachdem Sie die erforderlichen Verzeichnisse /path/to
unter erstellt haben /sandbox
).