
Ich möchte einen Server einrichten, auf dem Studenten C-Code hochladen können. Der Server kompiliert C-Code, führt die Binärdatei aus und zeigt den Studenten die Ausgabe an.
Jetzt habe ich Sicherheitsbedenken. Studenten können jeden Code hochladen, aber ich möchte, dass sie fopen
nur auf 2 angegebene Dateien (1 zum Lesen und 1 zum Schreiben) und auf stdout zugreifen können. Ich möchte nicht, dass sie auf das Internet oder andere Dateien auf dem System zugreifen.
Der Server, den ich habe, ist ein Linux-Containerserver und ich habe kein Root-Recht.
Ich habe über diese Lösungen nachgedacht:
chroot
oderfirejail
. (Ich habe keinen Zugriff auf das Server-Root. Es ist in einem Container, das Festlegen der EUID ist nicht zulässig.)Verwenden Sie einige
gcc
Optionen,.h
Dateien oder C-Bibliothekslimits. (Ich habe wenig Ahnung vom Kompilieren. Theoretisch können Leute mit C alles machen, ohne Header-Dateien oder Bibliotheken zu verwenden.)Verwenden Sie etwas wie
strace
oder,ptrace
um den Prozess zu überwachen und ihn zu beenden, wenn er das tut, was ich nicht möchte.
Ist das möglich?