Sandbox & Ausführungsisolation
Wie YeePilot die Befehlsausführung mit Linux-Namespaces, Ressourcenlimits und Pfadbeschränkungen isoliert
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:
| Ressource | Standardlimit | Beschreibung |
|---|---|---|
| CPU-Zeit | 300 Sekunden | Maximale kombinierte CPU-Zeit über alle Threads |
| Speicher | 512 MB | Maximale residente Speichernutzung |
| Dateigröße | 100 MB | Maximale Größe einer einzelnen erstellten Datei |
| Prozesse | 64 | Maximale Anzahl erzeugter Prozesse/Threads |
| Ausgabe | 10.000 Zeichen | Ausgabe wird über dieses Limit hinaus abgeschnitten |
| Timeout | 30 Sekunden | Echtzeit 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:
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:
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 ProtokolleGesperrte Pfade
Bestimmte sensible Pfade sind standardmäßig blockiert und verhindern, dass Befehle kritische Systemdateien lesen oder ändern:
| Gesperrter Pfad | Grund |
|---|---|
/etc/shadow | Passwort-Hashes |
/etc/gshadow | Gruppen-Passwort-Hashes |
/root | Home-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:
sandbox:
denied_paths:
- /etc/shadow
- /etc/gshadow
- /root
- /var/lib/secrets # Benutzerdefiniert: Ihre Anwendungsgeheimnisse
- /opt/myapp/keys # Benutzerdefiniert: AnwendungsschlüsselspeicherDies 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:
sandbox:
network: true # true (Standard) oder falseDie 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+Cund 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:
> 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:
- Das
output_limitin Ihrer Konfiguration erhöhen - Ausgabe in eine Datei umleiten: "Search for errors and save results to /tmp/errors.log"
- 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:
Command timed out after 30 seconds: ping 10.0.0.1Erhöhen Sie das Timeout für Befehle, die legitimerweise mehr Zeit benötigen:
sandbox:
timeout: 120 # 2 MinutenVollständige Sandbox-Konfigurationsreferenz
Hier ist eine vollständige Sandbox-Konfiguration mit allen verfügbaren Optionen:
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
- /rootHinweis: 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.