DocsSicherheitSandbox & Ausführungsisolation
Zurück zur Doku
Sicherheit

Sandbox & Ausführungsisolation

Wie YeePilot die Befehlsausführung mit Linux-Namespaces, Ressourcenlimits und Pfadbeschränkungen isoliert

Zuletzt aktualisiert: 28. Februar 2026

YeePilot führt jeden Befehl in einer isolierten Sandbox aus, die einschränkt, worauf der Befehl zugreifen kann und wie viele Ressourcen er verbrauchen darf. Selbst wenn sich ein Befehl unerwartet verhält, verhindert die Sandbox weitreichende Schäden an Ihrem System.

Wie die Sandbox funktioniert

Wenn YeePilot einen Befehl ausführt, erstellt es eine isolierte Ausführungsumgebung mithilfe von Linux-Namespaces. Dies ist dieselbe Technologie, die Container-Laufzeiten wie Docker antreibt, angewendet auf die Ebene einzelner Befehle.

Jeder Befehl wird ausgeführt mit:

  • Prozessisolation -- der Befehl kann Prozesse außerhalb seines Namespace nicht sehen oder mit ihnen interagieren
  • Ressourcenlimits -- CPU, Speicher, Dateigröße und Prozessanzahl sind alle begrenzt
  • Pfadbeschränkungen -- sensible Systemdateien sind unzugänglich
  • Ausgabetrunkierung -- unkontrollierte Ausgaben werden abgeschnitten, bevor sie Ihr Terminal überfluten
  • Ausführungstimeout -- Befehle, die zu lange laufen, werden automatisch beendet

Ressourcenlimits

YeePilot erzwingt Standard-Ressourcenlimits für jeden Befehl:

RessourceStandardlimitBeschreibung
CPU-Zeit300 SekundenMaximale kombinierte CPU-Zeit über alle Threads
Speicher512 MBMaximale residente Speichernutzung
Dateigröße100 MBMaximale Größe einer einzelnen erstellten Datei
Prozesse64Maximale Anzahl erzeugter Prozesse/Threads
Ausgabe10.000 ZeichenAusgabe wird über dieses Limit hinaus abgeschnitten
Timeout30 SekundenEchtzeit bevor der Befehl beendet wird

Diese Standardwerte sind darauf ausgelegt, legitime Verwaltungsaufgaben zu handhaben und gleichzeitig zu verhindern, dass unkontrollierte Prozesse Serverressourcen verbrauchen.

Ressourcenlimits anpassen

Passen Sie die Limits in ~/.yeepilot/config.yaml unter dem Abschnitt sandbox an:

yaml
sandbox:
  enabled: true
  cpu_limit: 300          # CPU-Sekunden
  memory_limit: 512       # Megabyte
  file_size_limit: 100    # Megabyte
  process_limit: 64       # Max. Prozesse
  output_limit: 10000     # Zeichen
  timeout: 30             # Sekunden (Echtzeit)

Für ressourcenintensive Aufgaben wie das Kompilieren von Software oder die Verarbeitung großer Protokolldateien müssen Sie diese Limits möglicherweise erhöhen:

yaml
sandbox:
  memory_limit: 1024      # 1 GB für Kompilierungsaufgaben
  timeout: 120            # 2 Minuten für langwierige Builds
  output_limit: 50000     # Mehr Ausgabe für ausführliche Protokolle

Gesperrte Pfade

Bestimmte sensible Pfade sind standardmäßig blockiert und verhindern, dass Befehle kritische Systemdateien lesen oder ändern:

Gesperrter PfadGrund
/etc/shadowPasswort-Hashes
/etc/gshadowGruppen-Passwort-Hashes
/rootHome-Verzeichnis des Root-Benutzers

Befehle, die versuchen, auf gesperrte Pfade zuzugreifen, schlagen mit einem Berechtigungsfehler fehl.

Gesperrte Pfade anpassen

Fügen Sie gesperrte Pfade in Ihrer Konfiguration hinzu oder ändern Sie sie:

yaml
sandbox:
  denied_paths:
    - /etc/shadow
    - /etc/gshadow
    - /root
    - /var/lib/secrets       # Benutzerdefiniert: Ihre Anwendungsgeheimnisse
    - /opt/myapp/keys        # Benutzerdefiniert: Anwendungsschlüsselspeicher

Dies ist besonders nützlich zum Schutz anwendungsspezifischer Geheimnis-Speicher oder Konfigurationsverzeichnisse, auf die niemals über YeePilot zugegriffen werden sollte.

Netzwerkzugriff

Standardmäßig haben über YeePilot ausgeführte Befehle Netzwerkzugriff, damit Aufgaben wie Paketinstallation (apt install), Updates und Gesundheitsprüfungen normal funktionieren.

Sie können den Netzwerkzugriff für strengere Isolation einschränken:

yaml
sandbox:
  network: true            # true (Standard) oder false

Die Einstellung network: false blockiert alle ausgehenden und eingehenden Netzwerkverbindungen von ausgeführten Befehlen. Dies ist nützlich in Hochsicherheitsumgebungen, in denen Sie sicherstellen möchten, dass Befehle nur auf lokale Ressourcen zugreifen.

PTY-Unterstützung

YeePilot verwendet Pseudo-Terminal (PTY)-Zuordnung für die Befehlsausführung. Das bedeutet, dass Befehle sich verhalten, als würden sie in einem echten Terminal laufen, was sicherstellt:

  • Korrekte Ausgabeformatierung -- Werkzeuge, die Terminal-Fähigkeiten erkennen (wie farbige Ausgabe, Fortschrittsbalken), funktionieren korrekt
  • Interaktive Kompatibilität -- Befehle, die Terminal-Funktionen erfordern, funktionieren ordnungsgemäß
  • Signalbehandlung -- Ctrl+C und andere Signale werden korrekt an laufende Befehle weitergeleitet

Ausgabetrunkierung

Wenn ein Befehl mehr Ausgabe produziert als das konfigurierte Limit (Standard: 10.000 Zeichen), kürzt YeePilot sie und benachrichtigt Sie:

plaintext
> Search all log files for errors
 
Running: grep -r "ERROR" /var/log/
 
[Output truncated at 10,000 characters -- 45,230 total characters produced]
... showing last portion of output ...

Dies verhindert, dass ein einzelner Befehl Ihre Sitzung überfordert. Wenn Sie die vollständige Ausgabe sehen müssen, können Sie:

  1. Das output_limit in Ihrer Konfiguration erhöhen
  2. Ausgabe in eine Datei umleiten: "Search for errors and save results to /tmp/errors.log"
  3. Spezifischere Anfragen verwenden, um das Ausgabevolumen zu reduzieren

Ausführungstimeout

Befehle werden standardmäßig nach 30 Sekunden Echtzeit beendet. Dies schützt vor:

  • Versehentlich ausgeführten Befehlen, die endlos hängen
  • Befehlen, die auf Netzwerkressourcen warten
  • Endlosschleifen oder unkontrollierten Prozessen

Wenn ein Befehl das Zeitlimit überschreitet, beendet YeePilot ihn sauber und meldet das Timeout:

plaintext
Command timed out after 30 seconds: ping 10.0.0.1

Erhöhen Sie das Timeout für Befehle, die legitimerweise mehr Zeit benötigen:

yaml
sandbox:
  timeout: 120             # 2 Minuten

Vollständige Sandbox-Konfigurationsreferenz

Hier ist eine vollständige Sandbox-Konfiguration mit allen verfügbaren Optionen:

yaml
sandbox:
  enabled: true            # Sandbox aktivieren/deaktivieren (Standard: true)
  cpu_limit: 300           # CPU-Sekunden (Standard: 300)
  memory_limit: 512        # Megabyte (Standard: 512)
  file_size_limit: 100     # Megabyte (Standard: 100)
  process_limit: 64        # Max. Prozesse (Standard: 64)
  output_limit: 10000      # Zeichen (Standard: 10000)
  timeout: 30              # Echtzeit-Sekunden (Standard: 30)
  network: true            # Netzwerkzugriff erlauben (Standard: true)
  denied_paths:            # Pfade, auf die Befehle nicht zugreifen können
    - /etc/shadow
    - /etc/gshadow
    - /root

Hinweis: Das vollständige Deaktivieren der Sandbox (enabled: false) entfernt sämtliche Isolation und Ressourcenlimits. Dies wird für den Produktionseinsatz dringend abgeraten. Deaktivieren Sie die Sandbox nur in kontrollierten Entwicklungsumgebungen, in denen Sie den ausgeführten Befehlen vollständig vertrauen.

Sandbox & Ausführungsisolation - YeePilot-Dokumentation – YeePilot Docs | YeePilot