agents.defaults.sandbox (global) oder agents.entries.*.sandbox (pro Agent) gesteuert. Der Gateway-Prozess verbleibt immer auf dem Host; nur die Werkzeugausführung wird bei Aktivierung in die Sandbox verlagert.
Dies ist keine perfekte Sicherheitsgrenze, schränkt jedoch den Dateisystem- und Prozesszugriff erheblich ein, wenn das Modell etwas Unsinniges tut.
Was in der Sandbox ausgeführt wird
- Werkzeugausführung:
exec,read,write,edit,apply_patch,processusw. - Der optionale Browser in der Sandbox (
agents.defaults.sandbox.browser).
- Der Gateway-Prozess selbst.
- Jedes Werkzeug, das über
tools.elevatedausdrücklich für die Ausführung außerhalb der Sandbox zugelassen ist. Die Ausführung mit erhöhten Rechten umgeht das Sandboxing und erfolgt über den konfigurierten Ausweichpfad (standardmäßiggatewayodernode, wenn das Ausführungszielnodeist). Wenn Sandboxing deaktiviert ist, änderttools.elevatednichts, da die Ausführung bereits auf dem Host erfolgt. Siehe Modus mit erhöhten Rechten.
Modi, Geltungsbereich und Backend
Drei voneinander unabhängige Einstellungen steuern das Sandbox-Verhalten:
Der Modus steuert, wann Sandboxing angewendet wird:
off: kein Sandboxing.non-main: Jede Sitzung mit Ausnahme der Hauptsitzung des Agenten wird in einer Sandbox ausgeführt. Der Schlüssel der Hauptsitzung ist immeragent:<agentId>:main(oderglobal, wennsession.scopeden Wert"global"hat); er ist nicht konfigurierbar. Gruppen-/Kanalsitzungen verwenden eigene Schlüssel, gelten daher immer als Nicht-Hauptsitzungen und werden in einer Sandbox ausgeführt.all: Jede Sitzung wird in einer Sandbox ausgeführt.
agent: ein Container pro Agent.session: ein Container pro Sitzung.shared: ein von allen Sandbox-Sitzungen gemeinsam genutzter Container (agentenspezifische Überschreibungen vondocker/ssh/browserwerden in diesem Geltungsbereich ignoriert).
agents.defaults.sandbox.ssh; OpenShell-spezifische Konfiguration befindet sich unter plugins.entries.openshell.config.
Docker-Backend
Docker ist das standardmäßige Backend, sobald Sandboxing aktiviert ist. Es führt Werkzeuge und Sandbox-Browser lokal über den Socket des Docker-Daemons (/var/run/docker.sock) aus; die Isolation erfolgt durch Docker-Namespaces.
Standardwerte: network: "none" (kein ausgehender Datenverkehr), readOnlyRoot: true, capDrop: ["ALL"], Image openclaw-sandbox:bookworm-slim.
Um Host-GPUs bereitzustellen, setzen Sie agents.defaults.sandbox.docker.gpus (oder die agentenspezifische Überschreibung) auf einen Wert wie "all" oder "device=GPU-uuid". Dieser Wert wird an das Docker-Flag --gpus übergeben und erfordert eine kompatible Host-Laufzeitumgebung wie das NVIDIA Container Toolkit.
Browser in der Sandbox
- Der Sandbox-Browser wird automatisch gestartet (wodurch die Erreichbarkeit von CDP sichergestellt wird), wenn das Browser-Werkzeug ihn benötigt. Die Konfiguration erfolgt über
agents.defaults.sandbox.browser.autoStart(Standardwerttrue) undautoStartTimeoutMs(Standardwert 12s). - Sandbox-Browser-Container verwenden anstelle des globalen Netzwerks
bridgeein dediziertes Docker-Netzwerk (openclaw-sandbox-browser). Die Konfiguration erfolgt überagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangebeschränkt den CDP-Zugriff am Container-Rand mit einer CIDR-Zulassungsliste (zum Beispiel172.21.0.1/32).- Der noVNC-Beobachterzugriff ist standardmäßig passwortgeschützt. OpenClaw gibt eine kurzlebige Token-URL aus, die eine lokale Bootstrap-Seite bereitstellt und noVNC mit dem Passwort im URL-Fragment öffnet (nicht in der Abfragezeichenfolge oder in Header-Protokollen).
agents.defaults.sandbox.browser.allowHostControl(Standardwertfalse) ermöglicht Sandbox-Sitzungen, ausdrücklich den Host-Browser als Ziel zu verwenden.- Optionale Zulassungslisten beschränken
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
SSH-Backend
Verwenden Siebackend: "ssh", um exec, Dateiwerkzeuge und das Lesen von Medien auf einem beliebigen per SSH erreichbaren Rechner in einer Sandbox auszuführen.
command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true.
- Lebenszyklus: OpenClaw erstellt unter
sandbox.ssh.workspaceRootein Remote-Stammverzeichnis pro Geltungsbereich. Bei der ersten Verwendung nach dem Erstellen oder Neuerstellen wird dieser Remote-Workspace einmalig mit dem lokalen Workspace initialisiert. Danach werdenexec,read,write,edit,apply_patch, das Lesen von Prompt-Medien und die Bereitstellung eingehender Medien über SSH direkt im Remote-Workspace ausgeführt. OpenClaw synchronisiert Remote-Änderungen nicht automatisch zurück in den lokalen Workspace. - Authentifizierungsmaterial:
identityFile/certificateFile/knownHostsFileverweisen auf vorhandene lokale Dateien.identityData/certificateData/knownHostsDataakzeptieren Inline-Zeichenfolgen oder SecretRefs, die über den normalen Laufzeit-Snapshot für Geheimnisse aufgelöst, mit dem Modus0600in temporäre Dateien geschrieben und beim Ende der SSH-Sitzung gelöscht werden. Wenn für dasselbe Element sowohl eine*File- als auch eine*Data-Variante festgelegt ist, hat*Datafür diese Sitzung Vorrang. - Folgen des Remote-kanonischen Modells: Nach der anfänglichen Initialisierung wird der Remote-SSH-Workspace zum tatsächlichen Sandbox-Zustand. Nach dem Initialisierungsschritt außerhalb von OpenClaw vorgenommene lokale Host-Änderungen sind remote erst sichtbar, wenn Sie die Sandbox neu erstellen.
openclaw sandbox recreatelöscht das Remote-Stammverzeichnis des jeweiligen Geltungsbereichs und initialisiert es bei der nächsten Verwendung erneut aus der lokalen Umgebung. Browser-Sandboxing wird von diesem Backend nicht unterstützt und die Einstellungen untersandbox.docker.*gelten dafür nicht.
OpenShell-Backend
Verwenden Siebackend: "openshell", um Werkzeuge in einer von OpenShell verwalteten Remote-Umgebung in einer Sandbox auszuführen. OpenShell verwendet denselben SSH-Transport und dieselbe Remote-Dateisystem-Bridge wie das generische SSH-Backend und ergänzt den OpenShell-Lebenszyklus (sandbox create/get/delete/ssh-config) sowie einen optionalen Modus zur Workspace-Synchronisierung über mirror.
mode: "mirror" (Standard) hält den lokalen Arbeitsbereich kanonisch: OpenClaw synchronisiert den lokalen Arbeitsbereich vor exec in die Sandbox und danach zurück. mode: "remote" befüllt den Remote-Arbeitsbereich einmalig aus dem lokalen Arbeitsbereich und führt anschließend exec/read/write/edit/apply_patch direkt im Remote-Arbeitsbereich aus, ohne zurückzusynchronisieren; lokale Änderungen nach der initialen Befüllung bleiben unsichtbar, bis Sie openclaw sandbox recreate. Unter scope: "agent" oder scope: "shared" wird dieser Remote-Arbeitsbereich im selben Geltungsbereich gemeinsam genutzt. Aktuelle Einschränkungen: Der Sandbox-Browser wird noch nicht unterstützt, und sandbox.docker.binds gilt nicht für dieses Backend.
openclaw sandbox list/recreate/prune behandeln OpenShell-Laufzeitumgebungen genauso wie Docker-Laufzeitumgebungen; die Bereinigungslogik berücksichtigt das Backend.
Die vollständigen Voraussetzungen, die Konfigurationsreferenz, den Vergleich der Arbeitsbereichsmodi und Details zum Lebenszyklus finden Sie unter OpenShell.
Zugriff auf den Arbeitsbereich
agents.defaults.sandbox.workspaceAccess steuert, was die Sandbox sehen kann:
Mit dem OpenShell-Backend verwendet der Modus
mirror weiterhin den lokalen Arbeitsbereich als kanonische Quelle zwischen Ausführungen, der Modus remote verwendet nach der initialen Befüllung den Remote-OpenShell-Arbeitsbereich als kanonische Quelle, und workspaceAccess: "ro"/"none" beschränken das Schreibverhalten weiterhin auf dieselbe Weise.
Eingehende Medien werden in den aktiven Sandbox-Arbeitsbereich kopiert (media/inbound/*).
Skills: Das Tool
read ist in der Sandbox verwurzelt. Mit workspaceAccess: "none" spiegelt OpenClaw geeignete Skills in den Sandbox-Arbeitsbereich (.../skills), damit sie gelesen werden können. Mit "rw" sind Arbeitsbereichs-Skills unter /workspace/skills lesbar, und geeignete verwaltete, gebündelte oder Plugin-Skills werden im generierten schreibgeschützten Pfad /workspace/.openclaw/sandbox-skills/skills bereitgestellt.Mehrere Ordner für einen Agenten
Verwenden Sie Docker-Bind-Mounts, wenn ein in einer Sandbox ausgeführter Agent mehr als seinen primären Arbeitsbereich benötigt. Jeder Eintrag ordnet einen Host-Ordner mit einem expliziten Zugriffsmodus einem Container-Pfad zu:romacht den eingebundenen Ordner innerhalb der Sandbox schreibgeschützt.rwerlaubt Tools und Prozessen in der Sandbox, den Host-Ordner zu ändern.- Der Container-Pfad ist der Pfad, den der Agent verwendet. Host-Pfade werden nicht automatisch offengelegt.
research einen beschreibbaren primären Arbeitsbereich, schreibgeschütztes Referenzmaterial unter /reference und einen separaten beschreibbaren Ausgabeordner unter /drafts:
workspaceAccess und Bind-Modi sind unabhängig voneinander:
Das Ändern von
workspaceAccess ändert eine zusätzliche Bind-Einbindung nicht von ro zu rw oder umgekehrt. Globale und agentenspezifische docker.binds werden zusammengeführt. Behalten Sie scope: "agent" oder "session" für agentenspezifische Bind-Einbindungen bei; scope: "shared" ignoriert alle agentenspezifischen Docker-Überschreibungen und verwendet ausschließlich globale Bind-Einbindungen.
Bind-Mounts sind die unterstützte Grenze für mehrere Ordner, da Docker die Dateisystemansicht des Containers mit Mount-Isolierung erstellt und der Modus ro/rw für jeden Prozess in der Sandbox gilt. Diese Grenze umfasst exec, Dateisystem-Tools, untergeordnete Prozesse und Bibliotheken, ohne Pfadautorisierungsprüfungen in jedem OpenClaw-Codepfad zu duplizieren. Eine hostseitige Pfad-Zulassungsliste kann nicht dieselbe vollständige Grenze bieten, wenn eine zugelassene Shell oder Abhängigkeit direkt auf Dateien zugreifen kann.
Die optionale Einstellung dangerouslyAllowExternalBindSources erlaubt nur Quellen außerhalb der Arbeitsbereichswurzeln. Sie deaktiviert nicht die Prüfungen von OpenClaw auf blockierte Systempfade, Anmeldedaten, Docker-Sockets, Symlink-Elternpfade oder reservierte Ziele. Bevorzugen Sie den kleinstmöglichen Ordner, verwenden Sie ro, sofern kein Schreibzugriff erforderlich ist, und erstellen Sie die Sandbox nach Änderungen an den Einbindungen neu:
Weiteres Verhalten von Bind-Einbindungen
agents.defaults.sandbox.docker.binds konfiguriert globale Einbindungen. Das Format entspricht derselben Form host:container:mode (zum Beispiel "/home/user/source:/source:rw").
agents.defaults.sandbox.browser.binds bindet zusätzliche Host-Verzeichnisse ausschließlich in den Container des Sandbox-Browsers ein. Wenn diese Einstellung gesetzt ist (einschließlich []), ersetzt sie docker.binds für den Browser-Container; wenn sie nicht gesetzt ist, greift der Browser-Container auf docker.binds zurück.
Images und Einrichtung
Standardmäßiges Docker-Image:openclaw-sandbox:bookworm-slim
Quellcode-Checkout im Vergleich zur npm-InstallationDie Hilfsskripte
scripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh und scripts/sandbox-browser-setup.sh sind nur bei der Ausführung aus einem Quellcode-Checkout verfügbar. Sie sind nicht im npm-Paket enthalten.Wenn Sie OpenClaw über npm install -g openclaw installiert haben, verwenden Sie stattdessen die unten gezeigten Inline-Befehle für docker build.1
Standard-Image erstellen
Aus einem Quellcode-Checkout:Aus einer npm-Installation (kein Quellcode-Checkout erforderlich):Das Standard-Image enthält kein Node. Wenn ein Skill Node (oder andere Laufzeitumgebungen) benötigt, erstellen Sie entweder ein benutzerdefiniertes Image oder installieren Sie es über
sandbox.docker.setupCommand (erfordert ausgehenden Netzwerkzugriff, eine beschreibbare Root-Dateisystemebene und den Root-Benutzer).OpenClaw ersetzt fehlendes openclaw-sandbox:bookworm-slim nicht stillschweigend durch einfaches debian:bookworm-slim. Sandbox-Ausführungen, die auf das Standard-Image abzielen, schlagen frühzeitig mit einer Erstellungsanweisung fehl, bis Sie es erstellt haben, da das gebündelte Image python3 für die Schreib- und Bearbeitungshilfen der Sandbox enthält.2
Optional: Allgemeines Image erstellen
Für ein funktionsreicheres Sandbox-Image mit gängigen Tools (zum Beispiel Erstellen Sie bei einer npm-Installation zunächst das Standard-Image (siehe oben) und anschließend das allgemeine Image darauf aufbauend mithilfe von
curl, jq, Node 24, pnpm, python3 und git):Aus einem Quellcode-Checkout:scripts/docker/sandbox/Dockerfile.common aus dem Repository.Setzen Sie anschließend agents.defaults.sandbox.docker.image auf openclaw-sandbox-common:bookworm-slim.3
Optional: Image für den Sandbox-Browser erstellen
Aus einem Quellcode-Checkout:Erstellen Sie es bei einer npm-Installation mithilfe von
scripts/docker/sandbox/Dockerfile.browser aus dem Repository.agents.defaults.sandbox.docker.network.
Chromium-Standardeinstellungen des Sandbox-Browsers
Chromium-Standardeinstellungen des Sandbox-Browsers
Das gebündelte Sandbox-Browser-Image verwendet konservative Chromium-Startoptionen für containerisierte Arbeitslasten:
--remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-dev-shm-usage--disable-background-networking--disable-breakpad--disable-crash-reporter--no-zygote--metrics-recording-only--password-store=basic--use-mock-keychain--headless=new, wennbrowser.headlessaktiviert ist.--no-sandbox --disable-setuid-sandbox, wennbrowser.noSandboxaktiviert ist.--disable-3d-apis,--disable-gpu,--disable-software-rasterizerstandardmäßig; diese Flags zur Härtung der Grafikausgabe unterstützen Container ohne GPU-Unterstützung. Legen SieOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0fest, wenn Ihre Arbeitslast WebGL oder andere 3D-Funktionen benötigt.--disable-extensionsstandardmäßig; legen Sie für Abläufe, die Erweiterungen benötigen,OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0fest.--renderer-process-limit=2standardmäßig; gesteuert durchOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, wobei0den Standardwert von Chromium beibehält.
browser.extraArgs, um zusätzliche Start-Flags anzuhängen.Standardeinstellungen für die Netzwerksicherheit
Standardeinstellungen für die Netzwerksicherheit
network: "host"ist blockiert.network: "container:<id>"ist standardmäßig blockiert (Risiko einer Umgehung durch Beitritt zum Namespace).- Notfallübersteuerung:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh die Sandbox-Konfiguration initialisieren. Legen Sie OPENCLAW_SANDBOX=1 (oder true/yes/on) fest, um diesen Pfad zu aktivieren. Überschreiben Sie den Speicherort des Sockets mit OPENCLAW_DOCKER_SOCKET. Vollständige Einrichtung und Umgebungsvariablenreferenz: Docker.
setupCommand (einmalige Container-Einrichtung)
setupCommand wird einmal ausgeführt, nachdem der Sandbox-Container erstellt wurde (nicht bei jeder Ausführung). Der Befehl wird innerhalb des Containers über sh -lc ausgeführt.
Pfade:
- Global:
agents.defaults.sandbox.docker.setupCommand - Pro Agent:
agents.entries.*.sandbox.docker.setupCommand
Häufige Fallstricke
Häufige Fallstricke
- Der Standardwert von
docker.networkist"none"(kein ausgehender Netzwerkverkehr), daher schlagen Paketinstallationen fehl. docker.network: "container:<id>"erfordertdangerouslyAllowContainerNamespaceJoin: trueund ist nur für Notfälle vorgesehen.readOnlyRoot: trueverhindert Schreibvorgänge; legen SiereadOnlyRoot: falsefest oder erstellen Sie ein benutzerdefiniertes Image.usermuss für Paketinstallationen root sein (lassen Sieuserweg oder legen Sieuser: "0:0"fest).- Die Sandbox-Ausführung übernimmt
process.envdes Hosts nicht. Verwenden Sieagents.defaults.sandbox.docker.env(oder ein benutzerdefiniertes Image) für API-Schlüssel von Skills. - Werte in
agents.defaults.sandbox.docker.envwerden als explizite Umgebungsvariablen des Docker-Containers übergeben. Jeder mit Zugriff auf den Docker-Daemon kann sie mit Docker-Metadatenbefehlen wiedocker inspecteinsehen. Verwenden Sie ein benutzerdefiniertes Image, eine eingebundene Secret-Datei oder einen anderen Übermittlungsweg für Secrets, wenn diese Offenlegung über Metadaten nicht akzeptabel ist.
Tool-Richtlinien und Ausweichmöglichkeiten
Zulassungs-/Ablehnungsrichtlinien für Tools gelten weiterhin vor den Sandbox-Regeln. Wenn ein Tool global oder für einen Agenten abgelehnt wird, stellt die Sandbox es nicht wieder bereit.tools.elevated ist eine explizite Ausweichmöglichkeit, die exec außerhalb der Sandbox ausführt (standardmäßig gateway oder node, wenn das Ausführungsziel node ist). /exec-Direktiven gelten nur für autorisierte Absender und bleiben sitzungsbezogen bestehen; um exec vollständig zu deaktivieren, verwenden Sie die Ablehnungsrichtlinie für Tools (siehe Sandbox im Vergleich zu Tool-Richtlinien und erhöhten Berechtigungen).
Fehlerdiagnose:
openclaw sandbox listzeigt Sandbox-Container, Status, Image-Übereinstimmung, Alter, Leerlaufzeit und die zugehörige Sitzung bzw. den zugehörigen Agenten an.openclaw sandbox explain [--session <key>] [--agent <id>]prüft den effektiven Sandbox-Modus, den Host-Arbeitsbereich, das Laufzeit-Arbeitsverzeichnis, Docker-Einbindungen, Tool-Richtlinien und Konfigurationsschlüssel zur Problembehebung. Das FeldworkspaceRootenthält weiterhin das konfigurierte Sandbox-Stammverzeichnis;effectiveHostWorkspaceRootzeigt, wo sich der aktive Arbeitsbereich tatsächlich befindet.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]entfernt Container/Umgebungen, damit sie bei der nächsten Verwendung mit der aktuellen Konfiguration neu erstellt werden.- Unter Sandbox im Vergleich zu Tool-Richtlinien und erhöhten Berechtigungen finden Sie ein Denkmodell für die Frage „Warum ist dies blockiert?“.
Überschreibungen für mehrere Agenten
Jeder Agent kann Sandbox und Tools überschreiben:agents.entries.*.sandbox und agents.entries.*.tools (sowie agents.entries.*.tools.sandbox.tools für die Sandbox-Tool-Richtlinie). Informationen zur Rangfolge finden Sie unter Sandbox und Tools für mehrere Agenten.
Minimales Aktivierungsbeispiel
Verwandte Themen
- Sandbox und Tools für mehrere Agenten — Überschreibungen pro Agent und Rangfolge
- OpenShell — Einrichtung des verwalteten Sandbox-Backends, Arbeitsbereichsmodi und Konfigurationsreferenz
- Sandbox-Konfiguration
- Sandbox im Vergleich zu Tool-Richtlinien und erhöhten Berechtigungen — Fehlerdiagnose für „Warum ist dies blockiert?“
- Sicherheit