-
Virtuelle Maschine kann Ihnen die höchste Sicherheit ohne Neustart bieten, aber die niedrigste Leistung.
-
Eine weitere Option für noch höhere Sicherheit als eine virtuelle Maschine:Booten Sie eine "Live"-CD/DVD/einen USB-Stick ohne Zugriff auf die Festplatte (deaktivieren Sie die Festplatte vorübergehend im BIOS; wenn Sie dies nicht können, mounten Sie das Laufwerk zumindest nicht / unmounten Sie es, wenn es automatisch gemountet wird - dies ist jedoch viel weniger sicher)
-
Ein Docker Container ist eine etwas weniger sichere Alternative zu einer vollständigen virtuellen Maschine. Wahrscheinlich besteht der entscheidende Unterschied (in Bezug auf die Sicherheit) zwischen diesen beiden darin, dass Systeme, die in Docker ausgeführt werden, tatsächlich den Kernel Ihres Hostsystems verwenden.
-
Es gibt Programme wie Isolate, die eine spezielle, gesicherte Umgebung schaffen - dies wird allgemein als Sandbox bezeichnet - diese sind normalerweise chroot-basiert, mit zusätzlicher Überwachung - finden Sie eine, die zu Ihnen passt.
-
Eine einfache Chroot wird am wenigsten sicher sein (insbesondere in Bezug auf die Ausführung von Programmen), aber vielleicht etwas schneller, aber ... Sie müssen einen vollständigen separaten Stammbaum erstellen/kopieren und Bind-Mounts für
/dev
verwenden usw. (siehe Anmerkung 1). unter!). Daher kann dieser Ansatz im Allgemeinen nicht empfohlen werden, insbesondere wenn Sie einen sichereren und oft einfacher einzurichtendensandbox
verwenden können Umgebung.
Anmerkung 0: Zum Aspekt eines "besonderen Benutzers", wie der nobody
Konto:Das gibt kaum Sicherheit, viel weniger als selbst eine einfache chroot
. Ein nobody
Benutzer können immer noch auf Dateien und Programme zugreifen, die gelesen wurden und ausführen Berechtigungen für andere festgelegt . Sie können es mit su -s /bin/sh -c 'some command' nobody
testen . Und wenn Sie eine Konfigurations-/Verlaufs-/Cache-Datei haben, auf die jeder zugreifen kann (durch einen Fehler oder eine kleine Sicherheitslücke), ein Programm, das mit nobody
ausgeführt wird 's Berechtigungen können darauf zugreifen, nach vertraulichen Daten suchen (wie "pass=" usw.) und sie auf viele Arten über das Netz oder was auch immer senden.
Anmerkung 1: Wie Gilles in einem Kommentar weiter unten betonte, bietet eine einfache Chroot-Umgebung nur sehr wenig Sicherheit gegen Exploits, die auf die Eskalation von Berechtigungen abzielen. Eine einzige Chroot macht aus Sicherheitsgründen Sinn, nur wenn die Umgebung ist minimal und besteht nur aus sicherheitsgeprüften Programmen (aber es bleibt immer noch das Risiko, potenzielle Sicherheitslücken auf Kernel-Ebene auszunutzen), und alle nicht vertrauenswürdigen Programme, die in der Chroot laufen, laufen als ein Benutzer, der keinen Prozess außerhalb der Chroot ausführt. Was Chroot verhindert (mit den hier erwähnten Einschränkungen), ist das direkte Eindringen in das System ohne Rechteausweitung. Wie Gilles jedoch in einem anderen Kommentar feststellte, könnte selbst diese Sicherheitsstufe umgangen werden, wodurch ein Programm aus der Chroot ausbrechen kann.
Verwenden Sie eine virtuelle Maschine. Alles andere bietet nicht viel Sicherheit.
Vor ein paar Jahren hätte ich vielleicht einen chrooted dedizierten Benutzer oder so etwas vorgeschlagen. Aber die Hardware ist leistungsfähiger geworden und die Software für virtuelle Maschinen ist benutzerfreundlicher geworden. Darüber hinaus sind standardmäßige Angriffe raffinierter geworden. Es gibt keinen Grund mehr, hier nicht den ganzen Weg zu gehen.
Ich würde empfehlen, VirtualBox auszuführen. Sie können die virtuelle Maschine in wenigen Minuten einrichten und dann eine Linux-Distribution darin installieren. Das einzige nicht standardmäßige Setup, das ich empfehle, ist das Netzwerk-Setup:Erstellen Sie sowohl eine „NAT“-Schnittstelle (um mit der Welt zu kommunizieren) als auch eine „Host Only“-Schnittstelle (damit Sie problemlos Dateien zum und vom Host kopieren und ssh in die VM). Deaktivieren Sie die NAT-Schnittstelle, während Sie die Programme Ihrer Schüler ausführen¹; aktivieren Sie es nur, wenn Sie Softwarepakete installieren oder aktualisieren.
Erstellen Sie innerhalb der virtuellen Maschine einen Benutzer pro Schüler.
¹ Sie können die NAT-Schnittstelle auf eine Whitelist von Benutzern beschränken, aber das ist fortgeschrittener, als Sie in einer einfachen, auf den Punkt gebrachten Einrichtung benötigen.
Hier ist eine sehr gründliche Erklärung, warum die Verwendung von Chroot immer noch eine sehr praktikable Option ist und warum die vollständige Betriebssystem- oder vollständige Hardwarevirtualisierung in bestimmten Szenarien besonders übertrieben ist.
es ist nichts weiter als ein Mythos dass Chroot kein Sicherheitsfeature ist. Es gibt Tools, die das Chroot-Dateisystem automatisch für Sie erstellen, und Chroot ist als zweckmäßige Sicherheitsfunktion in viele Mainstream-Anwendungen integriert.
Entgegen der landläufigen Meinung erfordert nicht jede Situation eine vollständige Virtualisierung des Betriebssystems oder eine vollständige Simulation der Hardware. das kann tatsächlich bedeuten, mehr zu haben Angriffsfläche zu versuchen und abzudecken. was wiederum ein weniger sicheres System bedeutet . (angeblich für weniger sachkundige Systemadministratoren)
Die Regeln sind ziemlich einfach:Fügen Sie nichts in die Chroot ein, das nicht notwendig ist. Führen Sie keinen Daemon als Root aus. Führen Sie keinen Daemon aus wie irgendein Benutzer, der einen Daemon außerhalb der Chroot ausführt.
Entfernen Sie alle unsicheren Anwendungen, Setuid-Binärdateien, baumelnde Besitzerlose Symlinks/Hardlinks. Hängen Sie nicht benötigte Ordner mit nosuid, noexec und nodev erneut ein. Erstellen Sie die neueste stabile Version des laufenden Daemons aus der Quelle. und vor allem das Basissystem sichern!