Sandboxing
OpenClaw kan tools in Docker-containers uitvoeren om de impact te beperken. Dit is optioneel en wordt aangestuurd via configuratie (agents.defaults.sandbox of
agents.list[].sandbox). Als sandboxing uit staat, draaien tools op de host.
De Gateway blijft op de host; tooluitvoering draait in een geïsoleerde sandbox
wanneer ingeschakeld.
Dit is geen perfecte beveiligingsgrens, maar het beperkt de toegang tot het bestandssysteem
en processen aanzienlijk wanneer het model iets doms doet.
Wat wordt gesandboxed
- Tooluitvoering (
exec,read,write,edit,apply_patch,process, enz.). - Optionele gesandboxde browser (
agents.defaults.sandbox.browser).- Standaard start de sandboxbrowser automatisch (zorgt dat CDP bereikbaar is) wanneer de browsertool dit nodig heeft.
Configureer via
agents.defaults.sandbox.browser.autoStartenagents.defaults.sandbox.browser.autoStartTimeoutMs. agents.defaults.sandbox.browser.allowHostControllaat gesandboxde sessies expliciet de hostbrowser targeten.- Optionele toegestane lijsten begrenzen
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
- Standaard start de sandboxbrowser automatisch (zorgt dat CDP bereikbaar is) wanneer de browsertool dit nodig heeft.
Configureer via
- Het Gateway-proces zelf.
- Elke tool die expliciet is toegestaan om op de host te draaien (bijv.
tools.elevated).- Uitvoering met verhoogde rechten draait op de host en omzeilt sandboxing.
- Als sandboxing uit staat, verandert
tools.elevatedde uitvoering niet (al op de host). Zie Elevated Mode.
Modi
agents.defaults.sandbox.mode bepaalt wanneer sandboxing wordt gebruikt:
"off": geen sandboxing."non-main": sandbox alleen niet-hoofdsessies (standaard als je normale chats op de host wilt)."all": elke sessie draait in een sandbox. Let op:"non-main"is gebaseerd opsession.mainKey(standaard"main"), niet op agent-id. Groep-/kanaalsessies gebruiken hun eigen sleutels, tellen dus als niet-hoofd en worden gesandboxed.
Scope
agents.defaults.sandbox.scope bepaalt hoeveel containers worden aangemaakt:
"session"(standaard): één container per sessie."agent": één container per agent."shared": één container gedeeld door alle gesandboxde sessies.
Werkruimte-toegang
agents.defaults.sandbox.workspaceAccess bepaalt wat de sandbox kan zien:
"none"(standaard): tools zien een sandbox-werkruimte onder~/.openclaw/sandboxes."ro": mount de agent-werkruimte alleen-lezen op/agent(schakeltwrite/edit/apply_patchuit)."rw": mount de agent-werkruimte lees/schrijf op/workspace.
media/inbound/*).
Skills-opmerking: de read-tool is sandbox-geroot. Met workspaceAccess: "none"
spiegelt OpenClaw in aanmerking komende skills naar de sandbox-werkruimte (.../skills), zodat
ze gelezen kunnen worden. Met "rw" zijn werkruimte-skills leesbaar vanaf
/workspace/skills.
Aangepaste bind mounts
agents.defaults.sandbox.docker.binds mount extra hostmappen in de container.
Formaat: host:container:mode (bijv. "/home/user/source:/source:rw").
Globale en per-agent binds worden samengevoegd (niet vervangen). Onder scope: "shared" worden per-agent binds genegeerd.
agents.defaults.sandbox.browser.binds mount aanvullende hostmappen alleen in de sandbox browser-container.
- Indien ingesteld (inclusief
[]), vervangt hetagents.defaults.sandbox.docker.bindsvoor de browsercontainer. - Indien niet opgegeven, valt de browsercontainer terug op
agents.defaults.sandbox.docker.binds(achterwaarts compatibel).
- Binds omzeilen het sandbox-bestandssysteem: ze stellen hostpaden bloot met de ingestelde modus (
:roof:rw). - Gevoelige mounts (bijv.
docker.sock, secrets, SSH-sleutels) moeten:rozijn, tenzij absoluut vereist. - Combineer met
workspaceAccess: "ro"als je alleen leestoegang tot de werkruimte nodig hebt; bind-modi blijven onafhankelijk. - Zie Sandbox vs Tool Policy vs Elevated voor hoe binds samenwerken met tool policy en elevated exec.
Images + installatie
Standaard image:openclaw-sandbox:bookworm-slim
Bouw deze één keer:
sandbox.docker.setupCommand (vereist netwerk-egress + schrijfbare root +
root-gebruiker).
Gesandboxde browser image:
agents.defaults.sandbox.docker.network.
Docker-installaties en de gecontaineriseerde Gateway vind je hier:
Docker
setupCommand (eenmalige container-setup)
setupCommand draait één keer nadat de sandbox-container is aangemaakt (niet bij elke run).
Het wordt in de container uitgevoerd via sh -lc.
Paths:
- Globaal:
agents.defaults.sandbox.docker.setupCommand - Per agent:
agents.list[].sandbox.docker.setupCommand
- Standaard
docker.networkis"none"(geen egress), dus pakketinstallaties mislukken. readOnlyRoot: truevoorkomt schrijven; stelreadOnlyRoot: falsein of bak een aangepaste image.usermoet root zijn voor pakketinstallaties (laatuserweg of steluser: "0:0"in).- Sandbox-exec erft niet de host-
process.env. Gebruikagents.defaults.sandbox.docker.env(of een aangepaste image) voor skill-API-sleutels.
Tool policy + ontsnappingsluiken
Tool allow/deny-beleid blijft van kracht vóór sandboxregels. Als een tool globaal of per agent is geweigerd, brengt sandboxing deze niet terug.tools.elevated is een expliciet ontsnappingsluik dat exec op de host uitvoert.
/exec-directieven gelden alleen voor geautoriseerde afzenders en blijven per sessie behouden; om
exec hard uit te schakelen, gebruik tool policy deny (zie Sandbox vs Tool Policy vs Elevated).
Debuggen:
- Gebruik
openclaw sandbox explainom de effectieve sandbox-modus, tool policy en fix-it-config-sleutels te inspecteren. - Zie Sandbox vs Tool Policy vs Elevated voor het mentale model “waarom is dit geblokkeerd?”. Houd het vergrendeld.
Multi-agent overrides
Elke agent kan sandbox + tools overschrijven:agents.list[].sandbox en agents.list[].tools (plus agents.list[].tools.sandbox.tools voor sandbox-toolbeleid).
Zie Multi-Agent Sandbox & Tools voor prioriteit.