chroot für die Ausführung unsicherer Programme

1380
attwad

Ich habe noch nie eine chroot-eingesperrte Umgebung eingerichtet, und ich fürchte, ich brauche Hilfe, um das gut zu machen.

Um es kurz zu erklären, worum es dabei geht: Ich habe einen Webserver, an den Benutzer Python-Skripte senden, um verschiedene Dateien zu verarbeiten, die auf dem Server gespeichert sind (das System ist für Forschungszwecke). Jeden Tag startet ein Cron-Job die Ausführung der hochgeladenen Skripte über einen solchen Befehl:

/usr/bin/python script_file.py 

All dies ist wirklich unsicher und ich möchte ein Gefängnis erstellen, in das ich die erforderlichen Dateien (hochgeladene Skripts, zu bearbeitende Dateien, Python-Binärdateien und Abhängigkeiten) kopieren würde.

Ich sah schon auf verschiedene Dienstprogramme Gefängnisse zu schaffen, aber keiner von ihnen schien up-to-date oder fehlten solide Dokumentation (dh. Die Links vorgeschlagen Wie kann ich einen nicht vertrauenswürdigen Python - Skript ausführen )

Könnte mich jemand zu einer tragfähigen Lösung für mein Problem führen? wie ein funktionierendes Beispiel für ein Skript, das ein Gefängnis erstellt, einige Dateien darin ablegt und ein Python-Skript ausführt?

Vielen Dank.

3

2 Antworten auf die Frage

0
jneves

Sie benötigen debootstrapchroot, lesen Sie die Anweisungen zum Einrichten Ihrer Chroot: https://wiki.kubuntu.org/DebootstrapChroot

0
Luc Stepniewski

Sie benötigen ziemlich viele Bibliotheken in Ihrer Chroot, und dies würde nicht verhindern, dass jemand einen Socket-Server installiert. Da Sie die Ausführung von Python-Skripts zulassen müssen, bedeutet dies uneingeschränkten Zugriff auf Standard-Python-Module wie Socket usw. Ich verstehe nicht wirklich, was Sie mit dieser Chroot schützen können?

Wenn ein Benutzer einen Socket-Server erstellen kann, kann er in dieser Chroot eine Verbindung herstellen und auf alles zugreifen / ändern.

Selbst ein einfaches Skript wie dieses os.system('rm -rf /')kann nicht verhindert werden und würde Ihr Gefängnis unbrauchbar machen.

Eine mögliche Lösung wäre die Verwendung eines Moduls wie TOMOYO, das so konfiguriert werden kann, dass der Zugriff auf Grundelemente vom Kernel (Öffnen, Schreiben usw.) verhindert wird.