Gateway
Sandboxing
OpenClaw kan tooluitvoering binnen een sandboxbackend uitvoeren om de impact te beperken. Sandboxing is standaard uitgeschakeld en wordt geregeld via agents.defaults.sandbox (globaal) of agents.list[].sandbox (per agent). Het Gateway-proces blijft altijd op de host; alleen de tooluitvoering wordt naar de sandbox verplaatst wanneer deze is ingeschakeld.
Wat in de sandbox wordt uitgevoerd
- Tooluitvoering:
exec,read,write,edit,apply_patch,process, enzovoort. - De optionele browser in de sandbox (
agents.defaults.sandbox.browser).
Niet in de sandbox uitgevoerd:
- Het Gateway-proces zelf.
- Elke tool die via
tools.elevatedexpliciet buiten de sandbox mag worden uitgevoerd. Uitvoering met verhoogde rechten omzeilt sandboxing en gebruikt het geconfigureerde ontsnappingspad (standaardgateway, ofnodewanneer het uitvoeringsdoelnodeis). Als sandboxing is uitgeschakeld, veranderttools.elevatedniets, omdat de uitvoering al op de host plaatsvindt. Zie Modus met verhoogde rechten.
Modi, bereik en backend
Drie onafhankelijke instellingen bepalen het sandboxgedrag:
| Instelling | Sleutel | Waarden | Standaard |
|---|---|---|---|
| Modus | agents.defaults.sandbox.mode |
off, non-main, all |
off |
| Bereik | agents.defaults.sandbox.scope |
agent, session, shared |
agent |
| Backend | agents.defaults.sandbox.backend |
docker, ssh, openshell |
docker |
Modus bepaalt wanneer sandboxing van toepassing is:
off: geen sandboxing.non-main: voer elke sessie behalve de hoofdsessie van de agent in een sandbox uit. De sleutel van de hoofdsessie is altijdagent:<agentId>:main(ofglobalwanneersession.scope"global"is); deze is niet configureerbaar. Groeps- en kanaalsessies gebruiken hun eigen sleutels, gelden dus altijd als niet-hoofdsessies en worden in een sandbox uitgevoerd.all: elke sessie wordt in een sandbox uitgevoerd.
Bereik bepaalt hoeveel containers/omgevingen worden gemaakt:
agent: één container per agent.session: één container per sessie.shared: één container die door alle sessies in een sandbox wordt gedeeld (overschrijvingen vandocker/ssh/browserper agent worden binnen dit bereik genegeerd).
Backend bepaalt welke runtime tools in een sandbox uitvoert. SSH-specifieke configuratie staat onder agents.defaults.sandbox.ssh; OpenShell-specifieke configuratie staat onder plugins.entries.openshell.config.
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Waar het draait | Lokale container | Elke via SSH toegankelijke host | Door OpenShell beheerde sandbox |
| Installatie | scripts/sandbox-setup.sh |
SSH-sleutel + doelhost | OpenShell-plugin ingeschakeld |
| Werkruimtemodel | Bind-mount of kopie | Extern canoniek (eenmaal initialiseren) | mirror of remote |
| Netwerkbeheer | docker.network (standaard: geen) |
Afhankelijk van de externe host | Afhankelijk van OpenShell |
| Browsersandbox | Ondersteund | Niet ondersteund | Nog niet ondersteund |
| Bind-mounts | docker.binds |
N.v.t. | N.v.t. |
| Meest geschikt voor | Lokale ontwikkeling, volledige isolatie | Uitbesteden aan een externe machine | Beheerde externe sandboxes met optionele tweerichtingssynchronisatie |
Docker-backend
Docker is de standaardbackend zodra sandboxing is ingeschakeld. Tools en sandboxbrowsers worden lokaal uitgevoerd via de Docker-daemonsocket (/var/run/docker.sock); de isolatie wordt geleverd door Docker-namespaces.
Standaardwaarden: network: "none" (geen uitgaand verkeer), readOnlyRoot: true, capDrop: ["ALL"], image openclaw-sandbox:bookworm-slim.
Stel agents.defaults.sandbox.docker.gpus (of de overschrijving per agent) in op een waarde zoals "all" of "device=GPU-uuid" om GPU's van de host beschikbaar te maken. Deze waarde wordt doorgegeven aan de Docker-vlag --gpus en vereist een compatibele hostruntime, zoals NVIDIA Container Toolkit.
Browser in de sandbox
- De sandboxbrowser start automatisch (en zorgt dat CDP bereikbaar is) wanneer de browsertool deze nodig heeft. Configureer dit via
agents.defaults.sandbox.browser.autoStart(standaardtrue) enautoStartTimeoutMs(standaard 12 s). - Sandboxbrowsercontainers gebruiken een speciaal Docker-netwerk (
openclaw-sandbox-browser) in plaats van het globalebridge-netwerk. Configureer dit metagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangebeperkt binnenkomend CDP-verkeer aan de containerrand met een CIDR-toelatingslijst (bijvoorbeeld172.21.0.1/32).- noVNC-waarnemerstoegang is standaard beveiligd met een wachtwoord; OpenClaw genereert een URL met een kortlevend token die een lokale opstartpagina aanbiedt en noVNC opent met het wachtwoord in het URL-fragment (niet in de querytekenreeks of headerlogboeken).
- Met
agents.defaults.sandbox.browser.allowHostControl(standaardfalse) kunnen sessies in een sandbox expliciet de hostbrowser als doel gebruiken. - Optionele toelatingslijsten bewaken
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
SSH-backend
Gebruik backend: "ssh" om exec, bestandstools en het lezen van media in een sandbox uit te voeren op een willekeurige via SSH toegankelijke machine.
{ agents: { defaults: { sandbox: { mode: "all", backend: "ssh", scope: "session", workspaceAccess: "rw", ssh: { target: "user@gateway-host:22", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true, identityFile: "~/.ssh/id_ed25519", certificateFile: "~/.ssh/id_ed25519-cert.pub", knownHostsFile: "~/.ssh/known_hosts", // Of gebruik SecretRefs / inline-inhoud in plaats van lokale bestanden: // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, }, }, }, },}Standaardwaarden: command: "ssh", workspaceRoot: "/tmp/openclaw-sandboxes", strictHostKeyChecking: true, updateHostKeys: true.
- Levenscyclus: OpenClaw maakt onder
sandbox.ssh.workspaceRooteen externe hoofdmap per bereik. Bij het eerste gebruik na aanmaak of heraanmaak vult OpenClaw die externe werkruimte eenmaal vanuit de lokale werkruimte. Daarna werkenexec,read,write,edit,apply_patch, het lezen van promptmedia en de voorbereiding van inkomende media rechtstreeks via SSH op de externe werkruimte. OpenClaw synchroniseert externe wijzigingen niet automatisch terug naar de lokale werkruimte. - Authenticatiemateriaal:
identityFile/certificateFile/knownHostsFileverwijzen naar bestaande lokale bestanden.identityData/certificateData/knownHostsDataaccepteren inline-tekenreeksen of SecretRefs, worden via de normale momentopname van de secretsruntime omgezet, naar tijdelijke bestanden met modus0600geschreven en verwijderd wanneer de SSH-sessie eindigt. Als voor hetzelfde item zowel een*File- als een*Data-variant is ingesteld, krijgt*Datavoor die sessie voorrang. - Gevolgen van extern canoniek: de externe SSH-werkruimte wordt na de eerste initialisatie de werkelijke sandboxstatus. Lokale bewerkingen op de host die na de initialisatiestap buiten OpenClaw worden uitgevoerd, zijn extern niet zichtbaar totdat u de sandbox opnieuw maakt.
openclaw sandbox recreateverwijdert de externe hoofdmap per bereik en initialiseert deze bij het volgende gebruik opnieuw vanuit de lokale werkruimte. Browsersandboxing wordt niet ondersteund op deze backend en instellingen vansandbox.docker.*zijn er niet op van toepassing.
OpenShell-backend
Gebruik backend: "openshell" om tools in een door OpenShell beheerde externe omgeving in een sandbox uit te voeren. OpenShell hergebruikt hetzelfde SSH-transport en dezelfde externe bestandssysteembridge als de algemene SSH-backend en voegt de OpenShell-levenscyclus (sandbox create/get/delete/ssh-config) plus een optionele mirror-modus voor werkruimtesynchronisatie toe.
{ agents: { defaults: { sandbox: { mode: "all", backend: "openshell", scope: "session", workspaceAccess: "rw", }, }, }, plugins: { entries: { openshell: { enabled: true, config: { from: "openclaw", mode: "remote", // mirror | remote }, }, }, },}mode: "mirror" (standaard) houdt de lokale werkruimte canoniek: OpenClaw synchroniseert de lokale werkruimte vóór exec naar de sandbox en synchroniseert deze daarna terug. mode: "remote" initialiseert de externe werkruimte eenmaal vanuit de lokale werkruimte en voert daarna exec/read/write/edit/apply_patch rechtstreeks op de externe werkruimte uit zonder terug te synchroniseren; lokale bewerkingen na de initialisatie zijn onzichtbaar totdat u openclaw sandbox recreate uitvoert. Onder scope: "agent" of scope: "shared" wordt die externe werkruimte binnen hetzelfde bereik gedeeld. Huidige beperkingen: de sandboxbrowser wordt nog niet ondersteund en sandbox.docker.binds is niet van toepassing op deze backend.
openclaw sandbox list/recreate/prune behandelen OpenShell-runtimes allemaal hetzelfde als Docker-runtimes; de opschoonlogica houdt rekening met de backend.
Zie OpenShell voor alle vereisten, de configuratiereferentie, de vergelijking van werkruimtemodi en details over de levenscyclus.
Toegang tot de werkruimte
agents.defaults.sandbox.workspaceAccess bepaalt wat de sandbox kan zien:
| Waarde | Gedrag |
|---|---|
none (standaard) |
Tools zien een geïsoleerde sandboxwerkruimte onder ~/.openclaw/sandboxes. |
ro |
Koppelt de agentwerkruimte alleen-lezen aan /agent (schakelt write/edit/apply_patch uit). |
rw |
Koppelt de agentwerkruimte voor lezen/schrijven aan /workspace. |
Met de OpenShell-backend gebruikt de modus mirror nog steeds de lokale werkruimte als canonieke bron tussen exec-beurten, gebruikt de modus remote na de initiële vulling de externe OpenShell-werkruimte als canonieke bron en beperken workspaceAccess: "ro"/"none" het schrijfgedrag nog steeds op dezelfde manier.
Inkomende media worden naar de actieve sandboxwerkruimte gekopieerd (media/inbound/*).
Aangepaste bind-mounts
agents.defaults.sandbox.docker.binds koppelt extra hostmappen aan de container. Indeling: host:container:mode (bijvoorbeeld "/home/user/source:/source:rw").
Globale en agentspecifieke bind-mounts worden samengevoegd (niet vervangen). Bij scope: "shared" worden agentspecifieke bind-mounts genegeerd.
agents.defaults.sandbox.browser.binds koppelt extra hostmappen uitsluitend aan de container van de sandboxbrowser. Wanneer dit is ingesteld (ook als []), vervangt het docker.binds voor de browsercontainer; wanneer het is weggelaten, valt de browsercontainer terug op docker.binds.
{ agents: { defaults: { sandbox: { docker: { binds: ["/home/user/source:/source:ro", "/var/data/myapp:/data:ro"], }, }, }, list: [ { id: "build", sandbox: { docker: { binds: ["/mnt/cache:/cache:rw"], }, }, }, ], },}Images en configuratie
Standaard-Docker-image: openclaw-sandbox:bookworm-slim
De standaard-image bouwen
Vanuit een broncheckout:
scripts/sandbox-setup.shVanuit een npm-installatie (geen broncheckout vereist):
docker build -t openclaw-sandbox:bookworm-slim - <<'DOCKERFILE'FROM debian:bookworm-slimENV DEBIAN_FRONTEND=noninteractiveRUN apt-get update && apt-get install -y --no-install-recommends \ bash ca-certificates curl git jq python3 ripgrep \ && rm -rf /var/lib/apt/lists/*RUN useradd --create-home --shell /bin/bash sandboxUSER sandboxWORKDIR /home/sandboxCMD ["sleep", "infinity"]DOCKERFILEDe standaard-image bevat geen Node. Als een Skill Node (of andere runtimes) nodig heeft, bouwt u die in een aangepaste image in of installeert u die via sandbox.docker.setupCommand (vereist uitgaand netwerkverkeer + een beschrijfbare hoofdmap + rootgebruiker).
OpenClaw gebruikt niet stilzwijgend het gewone debian:bookworm-slim wanneer openclaw-sandbox:bookworm-slim ontbreekt. Sandboxuitvoeringen die op de standaard-image zijn gericht, stoppen direct met een bouwinstructie totdat u deze bouwt, omdat de meegeleverde image python3 bevat voor de schrijf-/bewerkhulpmiddelen van de sandbox.
Optioneel: de algemene image bouwen
Voor een functionelere sandbox-image met veelgebruikte tools (bijvoorbeeld curl, jq, Node 24, pnpm, python3 en git):
Vanuit een broncheckout:
scripts/sandbox-common-setup.shVanuit een npm-installatie bouwt u eerst de standaard-image (zie hierboven) en bouwt u vervolgens de algemene image daarop met scripts/docker/sandbox/Dockerfile.common uit de repository.
Stel daarna agents.defaults.sandbox.docker.image in op openclaw-sandbox-common:bookworm-slim.
Optioneel: de sandboxbrowser-image bouwen
Vanuit een broncheckout:
scripts/sandbox-browser-setup.shVanuit een npm-installatie bouwt u met scripts/docker/sandbox/Dockerfile.browser uit de repository.
Standaard worden Docker-sandboxcontainers uitgevoerd zonder netwerk. Overschrijf dit met agents.defaults.sandbox.docker.network.
Standaardinstellingen van Chromium in de sandboxbrowser
De meegeleverde sandboxbrowser-image past behoudende opstartvlaggen voor gecontaineriseerde werkbelastingen toe:
--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=newwanneerbrowser.headlessis ingeschakeld.--no-sandbox --disable-setuid-sandboxwanneerbrowser.noSandboxis ingeschakeld.- Standaard
--disable-3d-apis,--disable-gpu,--disable-software-rasterizer; deze vlaggen voor grafische versterking helpen containers zonder GPU-ondersteuning. StelOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0in als uw werkbelasting WebGL of andere 3D-functies nodig heeft. - Standaard
--disable-extensions; stelOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0in voor processen die afhankelijk zijn van extensies. - Standaard
--renderer-process-limit=2; geregeld doorOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, waarbij0de standaardwaarde van Chromium behoudt.
Als u een ander runtimeprofiel nodig hebt, gebruikt u een aangepaste browser-image en levert u uw eigen toegangspunt. Voor lokale Chromium-profielen (niet in containers) gebruikt u browser.extraArgs om extra opstartvlaggen toe te voegen.
Standaardinstellingen voor netwerkbeveiliging
network: "host"wordt geblokkeerd.network: "container:<id>"wordt standaard geblokkeerd (risico op omzeiling via samenvoeging van naamruimten).- Noodoverschrijving:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
Docker-installaties en de gecontaineriseerde Gateway vindt u hier: Docker
Voor Docker-implementaties van de Gateway kan scripts/docker/setup.sh de sandboxconfiguratie initialiseren. Stel OPENCLAW_SANDBOX=1 (of true/yes/on) in om dat pad in te schakelen. Overschrijf de socketlocatie met OPENCLAW_DOCKER_SOCKET. Volledige configuratie en naslaginformatie voor omgevingsvariabelen: Docker.
setupCommand (eenmalige containerconfiguratie)
setupCommand wordt eenmaal uitgevoerd nadat de sandboxcontainer is gemaakt (niet bij elke uitvoering). Het wordt in de container uitgevoerd via sh -lc.
Paden:
- Globaal:
agents.defaults.sandbox.docker.setupCommand - Per agent:
agents.list[].sandbox.docker.setupCommand
Veelvoorkomende valkuilen
- De standaardwaarde van
docker.networkis"none"(geen uitgaand verkeer), waardoor pakketinstallaties mislukken. docker.network: "container:<id>"vereistdangerouslyAllowContainerNamespaceJoin: trueen is uitsluitend bedoeld voor noodgevallen.readOnlyRoot: truevoorkomt schrijfbewerkingen; stelreadOnlyRoot: falsein of bouw een aangepaste image.usermoet root zijn voor pakketinstallaties (laatuserweg of steluser: "0:0"in).- Sandbox-exec neemt
process.envvan de host niet over. Gebruikagents.defaults.sandbox.docker.env(of een aangepaste image) voor API-sleutels van Skills. - Waarden in
agents.defaults.sandbox.docker.envworden als expliciete omgevingsvariabelen van de Docker-container doorgegeven. Iedereen met toegang tot de Docker-daemon kan deze inspecteren met Docker-metadataopdrachten zoalsdocker inspect. Gebruik een aangepaste image, een gekoppeld geheimenbestand of een andere methode voor het aanleveren van geheimen als die blootstelling via metadata onaanvaardbaar is.
Toolbeleid en ontsnappingsmogelijkheden
Toestaan-/weigerenbeleid voor tools wordt nog steeds vóór sandboxregels toegepast. Als een tool globaal of per agent wordt geweigerd, maakt sandboxing deze niet opnieuw beschikbaar.
tools.elevated is een expliciete ontsnappingsmogelijkheid die exec buiten de sandbox uitvoert (standaard op de gateway, of op de node wanneer het exec-doel node is). /exec-instructies gelden alleen voor geautoriseerde afzenders en blijven per sessie behouden; om exec volledig uit te schakelen, gebruikt u weigering via het toolbeleid (zie Sandbox versus toolbeleid versus verhoogde rechten).
Foutopsporing:
openclaw sandbox listtoont sandboxcontainers, status, overeenkomst van de image, leeftijd, inactieve tijd en de gekoppelde sessie/agent.openclaw sandbox explain [--session <key>] [--agent <id>]inspecteert de effectieve sandboxmodus, hostwerkruimte, runtimewerkmap, Docker-mounts, toolbeleid en configuratiesleutels voor oplossingen. Het veldworkspaceRootblijft de geconfigureerde sandboxhoofdmap;effectiveHostWorkspaceRoottoont waar de actieve werkruimte zich daadwerkelijk bevindt.openclaw sandbox recreate [--all | --session <key> | --agent <id>] [--browser] [--force]verwijdert containers/omgevingen, zodat deze bij het volgende gebruik opnieuw met de huidige configuratie worden gemaakt.- Zie Sandbox versus toolbeleid versus verhoogde rechten voor het denkmodel achter “waarom wordt dit geblokkeerd?”.
Overschrijvingen voor meerdere agents
Elke agent kan sandbox + tools overschrijven: agents.list[].sandbox en agents.list[].tools (plus agents.list[].tools.sandbox.tools voor het toolbeleid van de sandbox). Zie Sandbox en tools voor meerdere agents voor de prioriteitsvolgorde.
Minimaal inschakelvoorbeeld
{ agents: { defaults: { sandbox: { mode: "non-main", scope: "session", workspaceAccess: "none", }, }, },}Gerelateerd
- Multi-agentsandbox en -tools -- overschrijvingen per agent en voorrangsvolgorde
- OpenShell -- instelling van de beheerde sandboxbackend, werkruimtemodi en configuratiereferentie
- Sandboxconfiguratie
- Sandbox versus toolbeleid versus verhoogde bevoegdheden -- fouten opsporen bij "waarom wordt dit geblokkeerd?"
- Beveiliging