LXC-Container als Sandbox-Umgebung

9

Ich starte derzeit ein Projekt zur Bewertung nicht vertrauenswürdiger Programme (Aufgaben von Studenten) in einer sicheren Sandbox-Umgebung. Die Hauptidee besteht darin, eine Web-App für GlassFish und Java Wrapper um lxc-utils zu erstellen, um LXC-Container zu verwalten. Es wird eine Warteschlange mit wartenden Programmen haben und ein Java-Wrapper wird eine feste Anzahl (Pool) von LXC-Containern verwalten und jedem Programm einen (nicht verwendeten) Container zuweisen.

Jeder Container sollte mit SELinux gesichert werden, um das Hostsystem zu schützen.

Meine Frage ist: Ist es eine gute Idee, einen solchen Mechanismus für eine Sandbox-Umgebung zu erstellen, oder gibt es eine bessere Lösung für dieses Problem? Es sollte leicht und sicher gegen die Kreativität der Schüler sein.

eXPi
quelle

Antworten:

6

Sie haben nicht geschrieben, warum Sie sich für LXC entschieden haben, da es nicht die sicherste Virtualisierungslösung ist. Ich bin ein starker Benutzer von KVM / XEN und auch von LXC und ich kann sagen, dass ich in Bezug auf Sicherheit niemals mit Linux-Containern arbeite (egal ob LXC / OpenVZ / VServer). Mit KVM / XEN ist es einfach einfacher (und zuverlässiger).

Wenn es um Leistung oder Hardwareanforderungen geht, dann ok - Sie können es mit LXC versuchen, aber es gibt einige Regeln, die Sie befolgen sollten:

  • libvirt stellt bei Verwendung von SELinux (dank LXC_driver) eine strikte Beschränkung der Container sicher - allerdings nicht sicher, ob es sich nur um einen RHEL / Centos / Fedora-Fall handelt (ich verwende Ubuntu / Debian nicht so häufig) https://www.redhat.com/archives /libvir-list/2012-January/msg01006.html - daher ist es eine gute Idee, sich für SELinux zu entscheiden (meiner Meinung nach ist es unter solchen Umständen ein "Muss").
  • Legen Sie strenge cgroups-Regeln fest, damit Ihre Gäste Ihren Host nicht einfrieren oder andere Container beeinflussen
  • Ich würde lieber mit LVM-basierten Containern arbeiten - es ist immer eine weitere Ebene der "Sicherheit"
  • Denken Sie an Netzwerklösung und Architektur. Müssen diese Container miteinander kommunizieren?

Beginnen Sie mit dem Lesen dieses - es ist ziemlich alt ist, aber immer noch - es gibt viel Wissen gibt. Und auch - treffen Sie Benutzer-Namespaces

Und nach all dem noch einmal überlegen - haben Sie wirklich so viel Zeit, um mit LXC-Sicherheit zu spielen? KVM ist einfach viel einfacher ...

Maciej Lasyk
quelle
Zunächst einmal vielen Dank für die Antwort. Ich wähle LXC, weil ich etwas Leichtes brauche und es in KVM läuft. Ist es möglich, KVM innerhalb von KVM auszuführen?
eXPi
1

Für die Ausführung nicht vertrauenswürdiger Programme ist Linux Namespaces immer noch die beste Lösung. Es ist einfacher einzurichten als KVM und erfordert weniger Ressourcen. Sie können LXC ausprobieren, LXC wurde jedoch als allgemeinere Sandbox zum Ausführen vollständiger Linux-Distributionsimages erstellt. Zwei andere Linux-Namespaces-Sandboxen fallen mir ein:

  • Google Chrome Sandbox, derzeit mit Google Chrome / Chromium vertrieben
  • Firejail , eine Sicherheitssandbox zum Ausführen von Mozilla Firerfox und anderen GUI-Programmen.
netblue
quelle