Ich habe eine Reihe von Python-Projekten mit nicht vertrauenswürdigen WSGI-Anwendungen in ihnen. Ich muss sie simultan und sicher führen. Also brauche ich Einschränkungen für den Verzeichniszugriff, Python-Modul-Nutzung und Einschränkungen für CPU und Speicher.Python Code ins Gefängnis
Ich halte zwei Ansätze:
Import über imp-Modul WSGI-Objekt aus definierten Datei, und es mit pysandbox läuft. Jetzt habe ich
SandboxError: Read only object
wenn tun:self.config = SandboxConfig('stdout') self.sandbox = Sandbox(self.config) self.s = imp.get_suffixes() wsgi_obj = imp.load_module("run", open(path+"/run.py", "r"), path, self.s[2]).app … return self.sandbox.call(wsgi_obj, environ, start_response)
Ändern Python-Interpreter, ausschließen potenziell riskante Module, in parallelen Prozessen ablaufen, kommunizieren über ZMQ/Unix-Sockets. Ich weiß überhaupt nicht, wo ich anfangen soll.
Was können Sie empfehlen?
Prozesstrennung ist definitiv eine gute Idee. Noch besser wäre es, Virtualisierung zu nutzen. Ich weiß nichts über pysandbox, aber ich habe gehört, dass die vorhandenen Lösungen für Sandbox-Python-Code nicht besonders gut sind. –
Sandboxing in CPython ist nicht sehr gut, aber andere Python-Interpreter, insbesondere PyPy, haben eine umfassendere Sandboxing-Unterstützung. –
Ich habe versucht PyPy Sandboxing. Es ist zu kompliziert. – sashab