2012-03-26 7 views
2

Hoi.Benötigen Sie seltsame Ratschläge, wie Sie einem Linux-Prozess erlauben, NUR eine einzige Pipe zu erstellen und zu verwenden

Ich arbeite an einem Experiment, mit dem Benutzer 1% meiner CPU verwenden können. Das ist wie dein eigener Webserver; aber eine große dynamische Remote-Ausführung Framework (Fragen Sie nicht darüber), und ich möchte nicht, dass Benutzer API-Funktionen wie Dateien erstellen, keine Sockets, keine Threads, keine Konsolenausgabe, nichts.

Update1: Leute werden mir Binärdateien senden, so interrupt 0x80 ist möglich. Deshalb ... Kernel?

Ich muss einen Prozess beschränken, so dass es nichts anderes tun kann, als eine Einzelrohr verwenden. Durch diese Pipe wird der Prozess meine eigene umwickelte und kontrollierte API verwenden.

Ist das überhaupt möglich? Ich dachte wie ein Linux-Kernel-Modul.

Die Probleme mit der Begrenzung von RAM und CPU sind hier nicht primär, dafür gibt es etwas bei Google.

Vielen Dank im Voraus!

+0

Werden Sie die Programme kompilieren, oder senden Ihnen die Benutzer Binärdateien? – Corbin

+2

Es klingt, als ob Sie nach [ptrace] suchen (https://en.wikipedia.org/wiki/Ptrace). –

+0

Sie können Chroot verwenden, um den Zugriff auf den Rest des Dateisystems zu beschränken. Aber um Dinge wie Socket-Erstellung und Ähnliches zu begrenzen, müssten Sie wahrscheinlich Ihre eigene libc rollen oder zumindest libc/glibc einbinden, um die Grenzen zu setzen. –

Antwort

2

Die Funktion ptrace ermöglicht es Ihrem Programm, den Betrieb eines anderen Prozesses zu beobachten und zu steuern. Mit dem Flag PTRACE_SYSCALL können Sie den untergeordneten Prozess vor alle syscall anhalten und eine Entscheidung darüber treffen, ob der Systemaufruf fortgesetzt werden soll.

+0

Muss ich jeden verdammten Befehl überprüfen, oder wird er automatisch ausgelöst? – imacake

+1

Ich weiß nicht, was Sie mit "verdammt Anweisung" meinen. Es gibt viele mögliche Optionen für 'ptrace()', ich empfehle die Dokumentation zu lesen. Es gibt Optionen für einzelne Schritte sowie für den nächsten syscall. –

0

Sie möchten vielleicht sehen, was Google mit seiner Technologie Native Client und der seccomp-Sandbox macht. Der Native Client (NaCl) -Stuff soll x86-Binärdateien, die von einer Website bereitgestellt werden, im lokalen Browser eines Benutzers ausführen lassen. Das Problem von bösartigen Binärdateien ist ähnlich dem, dem Sie gegenüberstehen, so dass der Großteil der Technologie/Forschung wahrscheinlich direkt zutrifft.