Sandboxing
OpenClaw kann Tools in Sandbox-Backends ausführen, um den Blast Radius zu verringern. Dies ist optional und wird über die Konfiguration gesteuert (agents.defaults.sandbox oder
agents.list[].sandbox). Wenn Sandboxing deaktiviert ist, laufen Tools auf dem Host.
Das Gateway bleibt auf dem Host; die Tool-Ausführung läuft in einer isolierten Sandbox,
wenn dies aktiviert ist.
Das ist keine perfekte Sicherheitsgrenze, begrenzt aber den Zugriff auf Dateisystem
und Prozesse erheblich, wenn das Modell etwas Dummes tut.
Was in eine Sandbox kommt
- Tool-Ausführung (
exec,read,write,edit,apply_patch,processusw.). - Optionaler sandboxierter Browser (
agents.defaults.sandbox.browser).- Standardmäßig startet der Sandbox-Browser automatisch (stellt sicher, dass CDP erreichbar ist), wenn das Browser-Tool ihn benötigt.
Konfiguration über
agents.defaults.sandbox.browser.autoStartundagents.defaults.sandbox.browser.autoStartTimeoutMs. - Standardmäßig verwenden Sandbox-Browser-Container ein dediziertes Docker-Netzwerk (
openclaw-sandbox-browser) statt des globalenbridge-Netzwerks. Konfiguration überagents.defaults.sandbox.browser.network. - Optionales
agents.defaults.sandbox.browser.cdpSourceRangebeschränkt eingehenden CDP-Zugriff am Container-Rand mit einer CIDR-Allowlist (zum Beispiel172.21.0.1/32). - noVNC-Beobachterzugriff ist standardmäßig passwortgeschützt; OpenClaw erzeugt eine kurzlebige Token-URL, die eine lokale Bootstrap-Seite bereitstellt und noVNC mit Passwort im URL-Fragment öffnet (nicht in Query-/Header-Logs).
agents.defaults.sandbox.browser.allowHostControlerlaubt es sandboxierten Sitzungen, ausdrücklich den Host-Browser anzusprechen.- Optionale Allowlists begrenzen
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
- Standardmäßig startet der Sandbox-Browser automatisch (stellt sicher, dass CDP erreichbar ist), wenn das Browser-Tool ihn benötigt.
Konfiguration über
- Der Gateway-Prozess selbst.
- Jedes Tool, das ausdrücklich für die Ausführung außerhalb der Sandbox erlaubt ist (z. B.
tools.elevated).- Erhöhtes
execumgeht Sandboxing und verwendet den konfigurierten Escape-Pfad (gatewaystandardmäßig odernode, wenn das Exec-Zielnodeist). - Wenn Sandboxing deaktiviert ist, ändert
tools.elevateddie Ausführung nicht (läuft bereits auf dem Host). Siehe Elevated Mode.
- Erhöhtes
Modi
agents.defaults.sandbox.mode steuert, wann Sandboxing verwendet wird:
"off": kein Sandboxing."non-main": nur Nicht-Main-Sitzungen werden sandboxiert (Standard, wenn normale Chats auf dem Host laufen sollen)."all": jede Sitzung läuft in einer Sandbox. Hinweis:"non-main"basiert aufsession.mainKey(Standard"main"), nicht auf der Agent-ID. Gruppen-/Channel-Sitzungen verwenden ihre eigenen Schlüssel, zählen also als non-main und werden sandboxiert.
Scope
agents.defaults.sandbox.scope steuert, wie viele Container erstellt werden:
"agent"(Standard): ein Container pro Agent."session": ein Container pro Sitzung."shared": ein Container, der von allen sandboxierten Sitzungen gemeinsam genutzt wird.
Backend
agents.defaults.sandbox.backend steuert, welche Runtime die Sandbox bereitstellt:
"docker"(Standard, wenn Sandboxing aktiviert ist): lokale Docker-basierte Sandbox-Runtime."ssh": generische Remote-Sandbox-Runtime über SSH."openshell": OpenShell-basierte Sandbox-Runtime.
agents.defaults.sandbox.ssh.
OpenShell-spezifische Konfiguration liegt unter plugins.entries.openshell.config.
Backend auswählen
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Wo es läuft | Lokaler Container | Beliebiger per SSH erreichbarer Host | Von OpenShell verwaltete Sandbox |
| Einrichtung | scripts/sandbox-setup.sh | SSH-Schlüssel + Zielhost | OpenShell-Plugin aktiviert |
| Workspace-Modell | Bind-Mount oder Kopie | Remote-kanonisch (einmalig seeden) | mirror oder remote |
| Netzwerkkontrolle | docker.network (Standard: none) | Hängt vom Remote-Host ab | Hängt von OpenShell ab |
| Browser-Sandbox | Unterstützt | Nicht unterstützt | Noch nicht unterstützt |
| Bind-Mounts | docker.binds | N/V | N/V |
| Am besten für | Lokale Entwicklung, volle Isolation | Auslagerung auf eine Remote-Maschine | Verwaltete Remote-Sandboxes mit optionaler Zwei-Wege-Synchronisierung |
Docker-Backend
Sandboxing ist standardmäßig deaktiviert. Wenn Sie Sandboxing aktivieren und kein Backend wählen, verwendet OpenClaw das Docker-Backend. Es führt Tools und Sandbox-Browser lokal über den Docker-Daemon-Socket (/var/run/docker.sock) aus. Die Isolation des Sandbox-Containers
wird durch Docker-Namespaces bestimmt.
Docker-out-of-Docker-(DooD)-Einschränkungen:
Wenn Sie das OpenClaw Gateway selbst als Docker-Container bereitstellen, orchestriert es Geschwister-Sandbox-Container über den Docker-Socket des Hosts (DooD). Das bringt eine spezielle Pfadzuordnungs-Einschränkung mit sich:
- Konfiguration erfordert Host-Pfade: Die
workspace-Konfiguration inopenclaw.jsonMUSS den absoluten Pfad des Hosts enthalten (z. B./home/user/.openclaw/workspaces), nicht den internen Pfad des Gateway-Containers. Wenn OpenClaw den Docker-Daemon auffordert, eine Sandbox zu starten, wertet der Daemon Pfade relativ zum Namespace des Host-OS aus, nicht zum Gateway-Namespace. - FS-Bridge-Parität (identisches Volume-Mapping): Der native OpenClaw-Gateway-Prozess schreibt außerdem Heartbeat- und Bridge-Dateien in das Verzeichnis
workspace. Da das Gateway exakt denselben String (den Host-Pfad) innerhalb seiner eigenen containerisierten Umgebung auswertet, MUSS die Gateway-Bereitstellung ein identisches Volume-Mapping enthalten, das den Host-Namespace nativ verknüpft (-v /home/user/.openclaw:/home/user/.openclaw).
EACCES-Berechtigungsfehler aus, wenn es versucht, seinen Heartbeat innerhalb der Container-Umgebung zu schreiben, weil der vollqualifizierte Pfad-String nativ nicht existiert.
SSH-Backend
Verwenden Siebackend: "ssh", wenn OpenClaw exec, Datei-Tools und Media-Reads auf
einer beliebigen per SSH erreichbaren Maschine sandboxieren soll.
- OpenClaw erstellt unter
sandbox.ssh.workspaceRootein Remote-Root pro Scope. - Bei der ersten Verwendung nach Erstellung oder Neuerstellung seedet OpenClaw diesen Remote-Workspace einmalig aus dem lokalen Workspace.
- Danach laufen
exec,read,write,edit,apply_patch, Media-Reads im Prompt und Inbound-Media-Staging direkt gegen den Remote-Workspace über SSH. - OpenClaw synchronisiert Remote-Änderungen nicht automatisch zurück in den lokalen Workspace.
identityFile,certificateFile,knownHostsFile: vorhandene lokale Dateien verwenden und über die OpenSSH-Konfiguration durchreichen.identityData,certificateData,knownHostsData: Inline-Strings oder SecretRefs verwenden. OpenClaw löst sie über den normalen Runtime-Snapshot für Secrets auf, schreibt sie mit0600in temporäre Dateien und löscht sie, wenn die SSH-Sitzung endet.- Wenn für dasselbe Element sowohl
*Fileals auch*Datagesetzt sind, gewinnt für diese SSH-Sitzung*Data.
- Host-lokale Bearbeitungen, die außerhalb von OpenClaw nach dem Seed-Schritt erfolgen, sind remote nicht sichtbar, bis Sie die Sandbox neu erstellen.
openclaw sandbox recreatelöscht das Remote-Root pro Scope und seedet es bei der nächsten Verwendung erneut aus lokal.- Browser-Sandboxing wird im SSH-Backend nicht unterstützt.
- Einstellungen unter
sandbox.docker.*gelten nicht für das SSH-Backend.
OpenShell-Backend
Verwenden Siebackend: "openshell", wenn OpenClaw Tools in einer
von OpenShell verwalteten Remote-Umgebung sandboxieren soll. Die vollständige Einrichtungsanleitung, die Konfigurationsreferenz
und den Vergleich der Workspace-Modi finden Sie auf der dedizierten
OpenShell-Seite.
OpenShell verwendet denselben zentralen SSH-Transport und dieselbe Remote-Dateisystem-Bridge wie das
generische SSH-Backend wieder und ergänzt OpenShell-spezifische Lebenszyklusbefehle
(sandbox create/get/delete, sandbox ssh-config) sowie den optionalen Workspace-Modus mirror.
mirror(Standard): Der lokale Workspace bleibt kanonisch. OpenClaw synchronisiert lokale Dateien vorexecin OpenShell und synchronisiert den Remote-Workspace nachexeczurück.remote: Der OpenShell-Workspace ist nach Erstellung der Sandbox kanonisch. OpenClaw seedet den Remote-Workspace einmalig aus dem lokalen Workspace, danach laufen Datei-Tools undexecdirekt gegen die Remote-Sandbox, ohne Änderungen zurückzusynchronisieren.
- OpenClaw fordert bei OpenShell eine sandboxspezifische SSH-Konfiguration über
openshell sandbox ssh-config <name>an. - Der Core schreibt diese SSH-Konfiguration in eine temporäre Datei, öffnet die SSH-Sitzung und verwendet dieselbe Remote-Dateisystem-Bridge wie bei
backend: "ssh"wieder. - Nur im Modus
mirrorunterscheidet sich der Lebenszyklus: lokal nach remote vorexecsynchronisieren, dann zurück synchronisieren.
- Sandbox-Browser wird noch nicht unterstützt
sandbox.docker.bindswird im OpenShell-Backend nicht unterstützt- Docker-spezifische Runtime-Optionen unter
sandbox.docker.*gelten weiterhin nur für das Docker-Backend
Workspace-Modi
OpenShell hat zwei Workspace-Modelle. Das ist in der Praxis der wichtigste Teil.mirror
Verwenden Sie plugins.entries.openshell.config.mode: "mirror", wenn der lokale Workspace kanonisch bleiben soll.
Verhalten:
- Vor
execsynchronisiert OpenClaw den lokalen Workspace in die OpenShell-Sandbox. - Nach
execsynchronisiert OpenClaw den Remote-Workspace zurück in den lokalen Workspace. - Datei-Tools arbeiten weiterhin über die Sandbox-Bridge, aber der lokale Workspace bleibt zwischen den Zügen die Single Source of Truth.
- Sie Dateien lokal außerhalb von OpenClaw bearbeiten und möchten, dass diese Änderungen automatisch in der Sandbox erscheinen
- die OpenShell-Sandbox sich möglichst ähnlich wie das Docker-Backend verhalten soll
- der Host-Workspace nach jedem
exec-Zug die Schreibvorgänge der Sandbox widerspiegeln soll
- zusätzlicher Synchronisationsaufwand vor und nach
exec
remote
Verwenden Sie plugins.entries.openshell.config.mode: "remote", wenn der OpenShell-Workspace kanonisch werden soll.
Verhalten:
- Wenn die Sandbox zum ersten Mal erstellt wird, seedet OpenClaw den Remote-Workspace einmalig aus dem lokalen Workspace.
- Danach arbeiten
exec,read,write,editundapply_patchdirekt gegen den Remote-OpenShell-Workspace. - OpenClaw synchronisiert Remote-Änderungen nach
execnicht zurück in den lokalen Workspace. - Media-Reads zur Prompt-Zeit funktionieren weiterhin, weil Datei- und Media-Tools über die Sandbox-Bridge lesen, statt einen lokalen Host-Pfad vorauszusetzen.
- Der Transport erfolgt per SSH in die OpenShell-Sandbox, die von
openshell sandbox ssh-configzurückgegeben wird.
- Wenn Sie Dateien auf dem Host außerhalb von OpenClaw nach dem Seed-Schritt bearbeiten, sieht die Remote-Sandbox diese Änderungen nicht automatisch.
- Wenn die Sandbox neu erstellt wird, wird der Remote-Workspace erneut aus dem lokalen Workspace geseedet.
- Bei
scope: "agent"oderscope: "shared"wird dieser Remote-Workspace auf genau diesem Scope gemeinsam genutzt.
- die Sandbox primär auf der Remote-Seite von OpenShell leben soll
- Sie geringeren Synchronisations-Overhead pro Zug möchten
- host-lokale Bearbeitungen den Remote-Sandbox-Zustand nicht stillschweigend überschreiben sollen
mirror, wenn Sie die Sandbox als temporäre Ausführungsumgebung betrachten.
Wählen Sie remote, wenn Sie die Sandbox als den echten Workspace betrachten.
OpenShell-Lebenszyklus
OpenShell-Sandboxes werden weiterhin über den normalen Sandbox-Lebenszyklus verwaltet:openclaw sandbox listzeigt OpenShell-Runtimes ebenso wie Docker-Runtimes anopenclaw sandbox recreatelöscht die aktuelle Runtime und lässt OpenClaw sie bei der nächsten Verwendung neu erstellen- die Prune-Logik ist ebenfalls backendbewusst
remote ist recreate besonders wichtig:
recreatelöscht den kanonischen Remote-Workspace für diesen Scope- die nächste Verwendung seedet einen frischen Remote-Workspace aus dem lokalen Workspace
mirror setzt recreate hauptsächlich die Remote-Ausführungsumgebung zurück,
da der lokale Workspace ohnehin kanonisch bleibt.
Workspace-Zugriff
agents.defaults.sandbox.workspaceAccess steuert, was die Sandbox sehen kann:
"none"(Standard): Tools sehen einen Sandbox-Workspace unter~/.openclaw/sandboxes."ro": mountet den Agent-Workspace schreibgeschützt unter/agent(deaktiviertwrite/edit/apply_patch)."rw": mountet den Agent-Workspace mit Lese-/Schreibzugriff unter/workspace.
- Im Modus
mirrorbleibt der lokale Workspace zwischen denexec-Zügen die kanonische Quelle - Im Modus
remotewird der Remote-OpenShell-Workspace nach dem initialen Seed zur kanonischen Quelle workspaceAccess: "ro"und"none"beschränken das Schreibverhalten weiterhin auf dieselbe Weise
media/inbound/*).
Hinweis zu Skills: Das Tool read ist auf die Sandbox-Root beschränkt. Mit workspaceAccess: "none"
spiegelt OpenClaw geeignete Skills in den Sandbox-Workspace (.../skills), damit
sie gelesen werden können. Mit "rw" sind Workspace-Skills unter
/workspace/skills lesbar.
Benutzerdefinierte Bind-Mounts
agents.defaults.sandbox.docker.binds mountet zusätzliche Host-Verzeichnisse in den Container.
Format: host:container:mode (z. B. "/home/user/source:/source:rw").
Globale und agent-spezifische Binds werden zusammengeführt (nicht ersetzt). Unter scope: "shared" werden agent-spezifische Binds ignoriert.
agents.defaults.sandbox.browser.binds mountet zusätzliche Host-Verzeichnisse nur in den Sandbox-Browser-Container.
- Wenn gesetzt (einschließlich
[]), ersetzt esagents.defaults.sandbox.docker.bindsfür den Browser-Container. - Wenn weggelassen, verwendet der Browser-Container als Fallback
agents.defaults.sandbox.docker.binds(abwärtskompatibel).
- Binds umgehen das Sandbox-Dateisystem: Sie legen Host-Pfade mit dem von Ihnen gesetzten Modus offen (
:rooder:rw). - OpenClaw blockiert gefährliche Bind-Quellen (zum Beispiel:
docker.sock,/etc,/proc,/sys,/devund übergeordnete Mounts, die diese freilegen würden). - OpenClaw blockiert außerdem gängige Root-Verzeichnisse für Credentials im Home-Verzeichnis wie
~/.aws,~/.cargo,~/.config,~/.docker,~/.gnupg,~/.netrc,~/.npmund~/.ssh. - Die Bind-Validierung ist nicht nur String-Matching. OpenClaw normalisiert den Quellpfad und löst ihn dann erneut über den tiefsten vorhandenen Vorgänger auf, bevor blockierte Pfade und erlaubte Roots erneut geprüft werden.
- Das bedeutet, dass auch Escapes über Symlink-Eltern fail-closed bleiben, selbst wenn das endgültige Leaf noch nicht existiert. Beispiel:
/workspace/run-link/new-filewird weiterhin als/var/run/...aufgelöst, wennrun-linkdorthin zeigt. - Erlaubte Quell-Roots werden auf dieselbe Weise kanonisiert, sodass ein Pfad, der nur vor der Symlink-Auflösung so aussieht, als läge er in der Allowlist, dennoch als
outside allowed rootsabgelehnt wird. - Sensitive Mounts (Secrets, SSH-Schlüssel, Service-Credentials) sollten
:rosein, sofern es nicht absolut erforderlich ist. - Kombinieren Sie dies mit
workspaceAccess: "ro", wenn Sie nur Lesezugriff auf den Workspace benötigen; die Bind-Modi bleiben unabhängig. - Siehe Sandbox vs Tool Policy vs Elevated, wie Binds mit Tool-Richtlinien und erhöhtem
execinteragieren.
Images + Einrichtung
Standard-Docker-Image:openclaw-sandbox:bookworm-slim
Einmal bauen:
sandbox.docker.setupCommand (erfordert Network Egress + beschreibbare Root +
Root-Benutzer).
Wenn Sie ein funktionaleres Sandbox-Image mit gängigen Tools möchten (zum Beispiel
curl, jq, nodejs, python3, git), bauen Sie:
agents.defaults.sandbox.docker.image auf
openclaw-sandbox-common:bookworm-slim.
Sandbox-Browser-Image:
agents.defaults.sandbox.docker.network.
Das gebündelte Sandbox-Browser-Image wendet außerdem konservative Standardwerte für den Chromium-Start
bei containerisierten Workloads an. Aktuelle Container-Standards umfassen:
--remote-debugging-address=127.0.0.1--remote-debugging-port=<abgeleitet von OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-3d-apis--disable-gpu--disable-dev-shm-usage--disable-background-networking--disable-extensions--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--disable-software-rasterizer--no-zygote--metrics-recording-only--renderer-process-limit=2--no-sandboxund--disable-setuid-sandbox, wennnoSandboxaktiviert ist.- Die drei Flags zur Härtung der Grafik (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) sind optional und nützlich, wenn Container keine GPU-Unterstützung haben. Setzen SieOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0, wenn Ihr Workload WebGL oder andere 3D-/Browser-Funktionen benötigt. --disable-extensionsist standardmäßig aktiviert und kann mitOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0für von Extensions abhängige Abläufe deaktiviert werden.--renderer-process-limit=2wird überOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>gesteuert, wobei0den Standard von Chromium beibehält.
browser.extraArgs, um zusätzliche Start-Flags anzuhängen.
Sicherheitsstandards:
network: "host"ist blockiert.network: "container:<id>"ist standardmäßig blockiert (Risiko durch Umgehung via Namespace-Join).- Break-glass-Override:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh die Sandbox-Konfiguration bootstrappen.
Setzen Sie OPENCLAW_SANDBOX=1 (oder true/yes/on), um diesen Pfad zu aktivieren. Sie können
den Socket-Speicherort mit OPENCLAW_DOCKER_SOCKET überschreiben. Vollständige Einrichtung und Env-
Referenz: Docker.
setupCommand (einmalige Container-Einrichtung)
setupCommand läuft einmal nach der Erstellung des Sandbox-Containers (nicht bei jedem Lauf).
Es wird innerhalb des Containers über sh -lc ausgeführt.
Pfade:
- Global:
agents.defaults.sandbox.docker.setupCommand - Pro Agent:
agents.list[].sandbox.docker.setupCommand
- Standard
docker.networkist"none"(kein Egress), daher schlagen Paketinstallationen fehl. docker.network: "container:<id>"erfordertdangerouslyAllowContainerNamespaceJoin: trueund ist nur als Break-glass gedacht.readOnlyRoot: trueverhindert Schreibvorgänge; setzen SiereadOnlyRoot: falseoder erstellen Sie ein benutzerdefiniertes Image.usermuss für Paketinstallationen root sein (lassen Sieuserweg oder setzen Sieuser: "0:0").- Sandbox-
execerbt nicht das Host-process.env. Verwenden Sieagents.defaults.sandbox.docker.env(oder ein benutzerdefiniertes Image) für API-Schlüssel von Skills.
Tool-Richtlinien + Escape-Hatches
Allow-/Deny-Richtlinien für Tools gelten weiterhin vor den Sandbox-Regeln. Wenn ein Tool global oder pro Agent verweigert wird, bringt Sandboxing es nicht zurück.tools.elevated ist ein ausdrücklicher Escape Hatch, der exec außerhalb der Sandbox ausführt (gateway standardmäßig oder node, wenn das Exec-Ziel node ist).
Direktiven für /exec gelten nur für autorisierte Absender und bleiben pro Sitzung erhalten; um exec hart zu deaktivieren,
verwenden Sie eine Deny-Regel in der Tool-Richtlinie (siehe Sandbox vs Tool Policy vs Elevated).
Debugging:
- Verwenden Sie
openclaw sandbox explain, um den effektiven Sandbox-Modus, die Tool-Richtlinie und Konfigurationsschlüssel zur Behebung zu prüfen. - Siehe Sandbox vs Tool Policy vs Elevated für das mentale Modell zu „warum ist das blockiert?“. Halten Sie es restriktiv.
Multi-Agent-Overrides
Jeder Agent kann Sandbox + Tools überschreiben:agents.list[].sandbox und agents.list[].tools (plus agents.list[].tools.sandbox.tools für die Tool-Richtlinie in der Sandbox).
Siehe Multi-Agent Sandbox & Tools für die Priorität.
Minimales Aktivierungsbeispiel
Verwandte Dokumente
- OpenShell — Einrichtung des verwalteten Sandbox-Backends, Workspace-Modi und Konfigurationsreferenz
- Sandbox Configuration
- Sandbox vs Tool Policy vs Elevated — Debugging von „warum ist das blockiert?“
- Multi-Agent Sandbox & Tools — Overrides pro Agent und Priorität
- Security