Plugin-Sandbox einrichten¶
Welche Sandbox-Einrichtung zu Ihrem Server passt, in einfachen Worten. Für fast alle lautet die Antwort: Lassen Sie die Standardwerte. Der Server erkennt die Maschine und wählt die stärkste Isolierung, die verfügbar ist. Lesen Sie nur weiter, wenn Sie ein altes NAS haben, Evey ohne Docker betreiben oder eine stärkere Isolierung wollen. Das vollständige technische Modell steht unter Sicherheitsmodell und Plugin-Sandbox.
Was Sie schützt¶
Ein Plugin, das Sie installieren, läuft isoliert. Je nach Maschine:
- begrenzt die Isolierung, welche Dateien es anfassen kann: seinen eigenen Ordner und die Systembibliotheken, die es braucht, sonst nichts (nicht Ihre Medien, nicht Ihre Geheimnisse, nicht andere Plugins);
- blockiert sie gefährliche Systemaktionen im Kernel: andere Prozesse debuggen, Module laden, die Uhr verstellen, Laufwerke einbinden;
- sperrt sie den direkten Netzwerkzugang, immer: Ein Plugin, das Netzwerk verlangt hat und dem Sie es erlaubt haben, erreicht nur die Hosts, die es angegeben hat, und das über den Server;
- begrenzt sie CPU, Arbeitsspeicher, Festplatte und Zahl der Prozesse, damit ein Plugin, das zu viele Ressourcen verbraucht, den Server nicht lahmlegen kann;
- hält sie Ihre Geheimnisse unlesbar: den Schlüssel, der Anmeldungen signiert, und die Sicherungen.
Dazu kommt: Nur Administratoren können Plugins installieren, Plugins werden auf verdächtigen Code geprüft, und Sie genehmigen ihre Berechtigungen, bevor sie laufen.
Prüfen Sie, was gilt: Verwaltung → Plugins → Sicherheits-Dashboard
zeigt die Sandbox des Hosts, den Modus, den auto gewählt hat
(landlock, bubblewrap oder basic), mit den Prüfergebnissen
(Landlock-Kernel, Sandbox-Launcher, Bubblewrap). basic bedeutet,
dass der Host keine Dateibeschränkung pro Pfad bietet: Plugins
laufen nur mit einem Wechsel der UID und seccomp. Die Prüfungen sagen, warum,
und die Abschnitte unten, was zu ändern ist.
Ihre Situation wählen¶
| Ihr Server | Was Sie ohne Zutun bekommen | Etwas zu tun? |
|---|---|---|
| Modernes Linux in Docker (Kernel 5.13 oder neuer, ungefähr alles ab 2021), der Normalfall | die stärkste Isolierung (Landlock), automatisch | nichts |
| Altes NAS in Docker (Kernel älter als 5.13) | gute Isolierung, aber ohne die Dateibeschränkung pro Ordner; Geheimnisse, Netzwerk und Systemaktionen bleiben gesperrt | nichts: Die UID-Trennung (unten) schaltet sich selbst ein |
| Beliebiges Linux, ohne Docker | die stärkste verfügbare Isolierung: Landlock auf einem modernen Kernel, sonst bubblewrap-Namespaces | folgen Sie Ohne Container |
Die einzige Einstellung, die Sie vielleicht ändern: die UID-Trennung¶
Die UID-Trennung lässt ein Plugin unter einem anderen Benutzerkonto als den
Server laufen. So kann es die geheimen Dateien des Servers nicht lesen,
selbst wenn nichts anderes es verhindern würde. Das ist nur auf einer Maschine ohne
die Dateibeschränkung pro Ordner relevant (der Fall basic). Auf einer modernen Maschine
hält diese Beschränkung die Geheimnisse bereits unzugänglich, und die Trennung ist eine
zusätzliche, redundante Schicht.
EVEY_PLUGINS_UID_SEPARATION:
| Wert | Bedeutung | Verwenden, wenn |
|---|---|---|
auto (Standard) |
nur an, wenn sie gebraucht wird (der Fall basic), aus, wo sie redundant wäre |
immer, außer einer der beiden Fälle unten trifft zu |
on |
immer an, ein zweiter, unabhängiger Schutz zusätzlich zur Dateibeschränkung | Sie beide Schutzmaßnahmen wollen und die kleinen Kosten unten in Kauf nehmen |
off |
nie | ein bestimmtes Plugin sich damit falsch verhält (selten) |
Warning
Die UID-Trennung ist nicht mit der Docker-Option no-new-privileges
vereinbar: Entscheiden Sie sich für eines von beiden. Kann der Wechsel
auf einer alten Maschine (basic) nicht gewährt werden, weigert sich der
Server, das Plugin zu starten, statt es neben Ihren Geheimnissen laufen
zu lassen. Auf einer modernen Maschine schreibt er eine Warnung ins
Protokoll und startet das Plugin ohne den zusätzlichen Schutz. Das Image
bringt alles Nötige mit, Sie setzen nur die Variable.
Die kleinen Kosten von on: Das Plugin läuft unter einem eigenen Konto. Ein
Plugin, das Hilfsdateien in seinen eigenen Ordner schreibt, kann dabei
fehlschlagen. Passiert das, setzen Sie off. Deshalb ist der Standard auto: Er
geht dieses Risiko nur ein, wo es einen echten Nutzen gibt.
Was ein bösartiges Plugin tun könnte¶
Modernes Linux (Docker oder ohne Container): Ein bösartiges Plugin ist vollständig isoliert. Es kann Ihre Geheimnisse nicht lesen, die Dateien anderer Plugins weder sehen noch anfassen, keine beliebigen Netzwerkverbindungen aufbauen und das System nicht manipulieren. Der einzige realistische Weg hinaus ist ein schwerer Kernel-Fehler. Das gilt für jede Sandbox, die keine vollständige virtuelle Maschine ist.
Altes NAS in Docker, ohne Dateibeschränkung pro Ordner (basic):
- Ihre Geheimnisse bleiben geschützt (Anmeldeschlüssel, Sicherungen), durch
das eigene Benutzerkonto, das
autohier einschaltet; - das Plugin hat kein direktes Netzwerk; ein erlaubtes erreicht nur die Hosts, die es angegeben hat;
- gefährliche Systemaktionen bleiben im Kernel blockiert;
- aber ohne Dateibeschränkung pro Ordner könnte ein bösartiges Plugin gewöhnliche, nicht geheime Dateien lesen, laufende Prozesse auflisten und, weil sich die Plugins ein Konto teilen, die Dateien eines anderen Plugins lesen oder stören.
Installieren Sie auf einem solchen Host nur Plugins, denen Sie vertrauen, oder wechseln Sie auf einen modernen Kernel, um die vollständige Dateibeschränkung zu erhalten.
Beispiele für die Konfiguration¶
Jede Zeile gehört unter environment: in der Compose-Datei, geschrieben als
KEY: value (zum Beispiel EVEY_PLUGINS_UID_SEPARATION: "on").
EVEY_PLUGINS_SANDBOX_MODE=auto # wählt die stärkste verfügbare Stufe (Standard)
# EVEY_PLUGINS_UID_SEPARATION=auto # (Standard) nur dort an, wo nötig
# no-new-privileges nicht in die security_opt der Compose-Datei aufnehmen, es würde den Wechsel blockieren
EVEY_PLUGINS_SANDBOX_MODE=auto
EVEY_PLUGINS_UID_SEPARATION=auto # (Standard) im Fall basic an
EVEY_PLUGINS_SANDBOX_MODE=auto # ergibt landlock
EVEY_PLUGINS_UID_SEPARATION=on # zusätzlich die unabhängige UID-Trennung
EVEY_PLUGINS_SANDBOX_MODE=landlock # Plugins nicht starten, wenn Landlock nicht verfügbar ist
EVEY_PLUGINS_MEMORY_MB=256 # max. Arbeitsspeicher pro Plugin
EVEY_PLUGINS_PIDS_MAX=64 # max. Prozesse und Threads
EVEY_PLUGINS_DISK_MAX_MB=100 # max. Größe des Installationsordners (0 = aus)
EVEY_PLUGINS_CPU_NICE=10 # Planungspriorität 0-19 (höher = rücksichtsvoller)
Den Sandbox-Modus im laufenden Betrieb ändern¶
Ändern Sie Sandbox-Modus in der Karte Ressourcenlimits unter
Verwaltung → Plugins. Laufende Plugins werden automatisch neu gestartet,
damit der neue Modus sofort gilt, und das Sicherheits-Dashboard zeigt den
geltenden Modus. Ein Plugin, das unter dem neuen Modus nicht laufen kann (zum
Beispiel bubblewrap in einem Container ohne Sonderrechte), erscheint als
fehlerhaft: Stellen Sie den Modus zurück.
Prüfen, ob es funktioniert¶
# der Launcher trägt die Capability für die UID-Trennung
docker exec evey-server getcap /evey-plugin-launcher # cap_setuid=ep
# unter welchem Benutzer ein laufendes Plugin läuft (evey = mit dem Server geteilt,
# evey-plugin = getrennt); das Image hat ps, also funktioniert auch `docker exec evey-server ps`
docker top evey-server -o user,pid,args | grep -iE "node|python"
Der geltende Sandbox-Modus ist das Abzeichen unter Verwaltung → Plugins → Sicherheits-Dashboard.