OpenClaw può eseguire strumenti all’interno di backend sandbox per ridurre il raggio d’impatto. È opzionale ed è controllato dalla configurazione (Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
agents.defaults.sandbox o agents.list[].sandbox). Se il sandboxing è disattivato, gli strumenti vengono eseguiti sull’host. Il Gateway rimane sull’host; l’esecuzione degli strumenti avviene in una sandbox isolata quando abilitata.
Questo non è un confine di sicurezza perfetto, ma limita concretamente l’accesso al filesystem e ai processi quando il modello fa qualcosa di stupido.
Cosa viene isolato in sandbox
- Esecuzione degli strumenti (
exec,read,write,edit,apply_patch,process, ecc.). - Browser opzionale in sandbox (
agents.defaults.sandbox.browser).
Dettagli del browser in sandbox
Dettagli del browser in sandbox
- Per impostazione predefinita, il browser in sandbox si avvia automaticamente (assicurando che CDP sia raggiungibile) quando lo strumento browser ne ha bisogno. Configura tramite
agents.defaults.sandbox.browser.autoStarteagents.defaults.sandbox.browser.autoStartTimeoutMs. - Per impostazione predefinita, i container del browser in sandbox usano una rete Docker dedicata (
openclaw-sandbox-browser) invece della rete globalebridge. Configura conagents.defaults.sandbox.browser.network. agents.defaults.sandbox.browser.cdpSourceRangeopzionale limita l’ingresso CDP al bordo del container con una allowlist CIDR (ad esempio172.21.0.1/32).- L’accesso osservatore noVNC è protetto da password per impostazione predefinita; OpenClaw emette un URL con token di breve durata che serve una pagina bootstrap locale e apre noVNC con la password nel frammento dell’URL (non nei log di query/header).
agents.defaults.sandbox.browser.allowHostControlconsente alle sessioni in sandbox di puntare esplicitamente al browser dell’host.- Allowlist opzionali regolano
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
- Il processo Gateway stesso.
- Qualsiasi strumento autorizzato esplicitamente a essere eseguito fuori dalla sandbox (ad es.
tools.elevated).- Elevated exec bypassa il sandboxing e usa il percorso di escape configurato (
gatewayper impostazione predefinita, oppurenodequando la destinazione exec ènode). - Se il sandboxing è disattivato,
tools.elevatednon modifica l’esecuzione (già sull’host). Vedi Modalità elevata.
- Elevated exec bypassa il sandboxing e usa il percorso di escape configurato (
Modalità
agents.defaults.sandbox.mode controlla quando viene usato il sandboxing:
- off
- non-main
- all
Nessun sandboxing.
Ambito
agents.defaults.sandbox.scope controlla quanti container vengono creati:
"agent"(predefinito): un container per agente."session": un container per sessione."shared": un container condiviso da tutte le sessioni isolate in sandbox.
Backend
agents.defaults.sandbox.backend controlla quale runtime fornisce la sandbox:
"docker"(predefinito quando il sandboxing è abilitato): runtime sandbox locale basato su Docker."ssh": runtime sandbox remoto generico basato su SSH."openshell": runtime sandbox basato su OpenShell.
agents.defaults.sandbox.ssh. La configurazione specifica per OpenShell si trova sotto plugins.entries.openshell.config.
Scelta di un backend
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Dove viene eseguito | Container locale | Qualsiasi host accessibile via SSH | Sandbox gestita da OpenShell |
| Configurazione | scripts/sandbox-setup.sh | Chiave SSH + host di destinazione | Plugin OpenShell abilitato |
| Modello workspace | Bind-mount o copia | Remoto canonico (seed una volta) | mirror o remote |
| Controllo rete | docker.network (predefinito: none) | Dipende dall’host remoto | Dipende da OpenShell |
| Browser sandbox | Supportato | Non supportato | Non ancora supportato |
| Bind mount | docker.binds | N/A | N/A |
| Ideale per | Sviluppo locale, isolamento completo | Offload su una macchina remota | Sandbox remote gestite con sincronizzazione bidirezionale opzionale |
Backend Docker
Il sandboxing è disattivato per impostazione predefinita. Se abiliti il sandboxing e non scegli un backend, OpenClaw usa il backend Docker. Esegue strumenti e browser in sandbox localmente tramite il socket del demone Docker (/var/run/docker.sock). L’isolamento dei container sandbox è determinato dai namespace Docker.
Per esporre le GPU dell’host alle sandbox Docker, imposta agents.defaults.sandbox.docker.gpus o l’override per agente agents.list[].sandbox.docker.gpus. Il valore viene passato al flag --gpus di Docker come argomento separato, ad esempio "all" o "device=GPU-uuid", e richiede un runtime host compatibile come NVIDIA Container Toolkit.
Backend SSH
Usabackend: "ssh" quando vuoi che OpenClaw isoli in sandbox exec, strumenti file e letture media su una macchina arbitraria accessibile via SSH.
Come funziona
Come funziona
- OpenClaw crea una root remota per ambito sotto
sandbox.ssh.workspaceRoot. - Al primo uso dopo creazione o ricreazione, OpenClaw esegue una sola volta il seed di quel workspace remoto dal workspace locale.
- Dopo di ciò,
exec,read,write,edit,apply_patch, letture media dei prompt e staging dei media in ingresso vengono eseguiti direttamente sul workspace remoto tramite SSH. - OpenClaw non sincronizza automaticamente le modifiche remote nel workspace locale.
Materiale di autenticazione
Materiale di autenticazione
identityFile,certificateFile,knownHostsFile: usano file locali esistenti e li passano attraverso la configurazione OpenSSH.identityData,certificateData,knownHostsData: usano stringhe inline o SecretRefs. OpenClaw li risolve tramite il normale snapshot runtime dei segreti, li scrive in file temporanei con0600e li elimina quando la sessione SSH termina.- Se sia
*Filesia*Datasono impostati per lo stesso elemento,*Dataprevale per quella sessione SSH.
Conseguenze del remoto canonico
Conseguenze del remoto canonico
Questo è un modello remoto canonico. Il workspace SSH remoto diventa il vero stato della sandbox dopo il seed iniziale.
- Le modifiche locali sull’host effettuate fuori da OpenClaw dopo il passaggio di seed non sono visibili da remoto finché non ricrei la sandbox.
openclaw sandbox recreateelimina la root remota per ambito ed esegue di nuovo il seed dal locale al successivo utilizzo.- Il sandboxing del browser non è supportato sul backend SSH.
- Le impostazioni
sandbox.docker.*non si applicano al backend SSH.
Backend OpenShell
Usabackend: "openshell" quando vuoi che OpenClaw isoli gli strumenti in sandbox in un ambiente remoto gestito da OpenShell. Per la guida completa alla configurazione, il riferimento di configurazione e il confronto delle modalità workspace, vedi la pagina OpenShell dedicata.
OpenShell riusa lo stesso trasporto SSH principale e lo stesso bridge del filesystem remoto del backend SSH generico, e aggiunge il ciclo di vita specifico di OpenShell (sandbox create/get/delete, sandbox ssh-config) più la modalità workspace opzionale mirror.
mirror(predefinita): il workspace locale rimane canonico. OpenClaw sincronizza i file locali in OpenShell prima di exec e sincronizza il workspace remoto dopo exec.remote: il workspace OpenShell è canonico dopo la creazione della sandbox. OpenClaw esegue una sola volta il seed del workspace remoto dal workspace locale, poi gli strumenti file ed exec vengono eseguiti direttamente sulla sandbox remota senza sincronizzare le modifiche indietro.
Dettagli del trasporto remoto
Dettagli del trasporto remoto
- OpenClaw chiede a OpenShell la configurazione SSH specifica della sandbox tramite
openshell sandbox ssh-config <name>. - Core scrive quella configurazione SSH in un file temporaneo, apre la sessione SSH e riusa lo stesso bridge del filesystem remoto usato da
backend: "ssh". - In modalità
mirrordifferisce solo il ciclo di vita: sincronizzazione dal locale al remoto prima di exec, poi sincronizzazione indietro dopo exec.
Limitazioni attuali di OpenShell
Limitazioni attuali di OpenShell
- il browser in sandbox non è ancora supportato
sandbox.docker.bindsnon è supportato sul backend OpenShell- le manopole runtime specifiche di Docker sotto
sandbox.docker.*continuano ad applicarsi solo al backend Docker
Modalità workspace
OpenShell ha due modelli di workspace. Questa è la parte che conta di più nella pratica.- mirror (canonico locale)
- remoto (OpenShell canonico)
Usa
plugins.entries.openshell.config.mode: "mirror" quando vuoi che il workspace locale rimanga canonico.Comportamento:- Prima di
exec, OpenClaw sincronizza lo spazio di lavoro locale nell’ambiente isolato OpenShell. - Dopo
exec, OpenClaw sincronizza lo spazio di lavoro remoto di nuovo nello spazio di lavoro locale. - Gli strumenti per i file continuano a operare tramite il ponte dell’ambiente isolato, ma lo spazio di lavoro locale rimane la fonte di verità tra i turni.
- modifichi file localmente fuori da OpenClaw e vuoi che tali modifiche compaiano automaticamente nell’ambiente isolato
- vuoi che l’ambiente isolato OpenShell si comporti il più possibile come il backend Docker
- vuoi che lo spazio di lavoro host rifletta le scritture dell’ambiente isolato dopo ogni turno exec
mirror se consideri l’ambiente isolato come un ambiente di esecuzione temporaneo. Scegli remote se consideri l’ambiente isolato come il vero spazio di lavoro.
Ciclo di vita OpenShell
Gli ambienti isolati OpenShell sono comunque gestiti tramite il normale ciclo di vita degli ambienti isolati:openclaw sandbox listmostra sia i runtime OpenShell sia i runtime Dockeropenclaw sandbox recreateelimina il runtime corrente e consente a OpenClaw di ricrearlo al prossimo utilizzo- anche la logica di pulizia è consapevole del backend
remote, la ricreazione è particolarmente importante:
- la ricreazione elimina lo spazio di lavoro remoto canonico per quell’ambito
- l’utilizzo successivo inizializza un nuovo spazio di lavoro remoto dallo spazio di lavoro locale
mirror, la ricreazione reimposta principalmente l’ambiente di esecuzione remoto perché lo spazio di lavoro locale rimane comunque canonico.
Accesso allo spazio di lavoro
agents.defaults.sandbox.workspaceAccess controlla cosa può vedere l’ambiente isolato:
- nessuno (predefinito)
- ro
- rw
Gli strumenti vedono uno spazio di lavoro dell’ambiente isolato sotto
~/.openclaw/sandboxes.- la modalità
mirrorusa ancora lo spazio di lavoro locale come fonte canonica tra i turni exec - la modalità
remoteusa lo spazio di lavoro OpenShell remoto come fonte canonica dopo l’inizializzazione iniziale workspaceAccess: "ro"e"none"continuano a limitare il comportamento di scrittura nello stesso modo
media/inbound/*).
Nota su Skills: lo strumento
read è radicato nell’ambiente isolato. Con workspaceAccess: "none", OpenClaw rispecchia le Skills idonee nello spazio di lavoro dell’ambiente isolato (.../skills) così che possano essere lette. Con "rw", le Skills dello spazio di lavoro sono leggibili da /workspace/skills.Montaggi bind personalizzati
agents.defaults.sandbox.docker.binds monta directory host aggiuntive nel contenitore. Formato: host:container:mode (ad esempio, "/home/user/source:/source:rw").
I bind globali e per agente vengono uniti (non sostituiti). Con scope: "shared", i bind per agente vengono ignorati.
agents.defaults.sandbox.browser.binds monta directory host aggiuntive solo nel contenitore del browser dell’ambiente isolato.
- Quando è impostato (incluso
[]), sostituisceagents.defaults.sandbox.docker.bindsper il contenitore del browser. - Quando è omesso, il contenitore del browser ripiega su
agents.defaults.sandbox.docker.binds(compatibile con le versioni precedenti).
Immagini e configurazione
Immagine Docker predefinita:openclaw-sandbox:bookworm-slim
Checkout del sorgente vs installazione npmGli script helper
scripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh e scripts/sandbox-browser-setup.sh sono disponibili solo quando si esegue da un checkout del sorgente. Non sono inclusi nel pacchetto npm.Se hai installato OpenClaw tramite npm install -g openclaw, usa invece i comandi inline docker build mostrati sotto.Crea l'immagine predefinita
Da un checkout del sorgente:Da un’installazione npm (nessun checkout del sorgente necessario):L’immagine predefinita non include Node. Se una skill richiede Node (o altri runtime), crea un’immagine personalizzata oppure installa tramite
sandbox.docker.setupCommand (richiede egress di rete + root scrivibile + utente root).OpenClaw non sostituisce silenziosamente con il semplice debian:bookworm-slim quando manca openclaw-sandbox:bookworm-slim. Le esecuzioni dell’ambiente isolato che puntano all’immagine predefinita falliscono subito con un’istruzione di build finché non la crei, perché l’immagine inclusa contiene python3 per gli helper di scrittura/modifica dell’ambiente isolato.Opzionale: crea l'immagine comune
Per un’immagine dell’ambiente isolato più funzionale con strumenti comuni (ad esempio Da un’installazione npm, crea prima l’immagine predefinita (vedi sopra), quindi crea l’immagine comune sopra di essa usando
curl, jq, nodejs, python3, git):Da un checkout del sorgente:scripts/docker/sandbox/Dockerfile.common dal repository.Quindi imposta agents.defaults.sandbox.docker.image su openclaw-sandbox-common:bookworm-slim.Opzionale: crea l'immagine del browser dell'ambiente isolato
Da un checkout del sorgente:Da un’installazione npm, crea usando
scripts/docker/sandbox/Dockerfile.browser dal repository.agents.defaults.sandbox.docker.network.
Impostazioni predefinite di Chromium per il browser dell'ambiente isolato
Impostazioni predefinite di Chromium per il browser dell'ambiente isolato
L’immagine inclusa del browser dell’ambiente isolato applica anche impostazioni di avvio Chromium conservative per carichi di lavoro containerizzati. Le impostazioni predefinite correnti del contenitore includono:
--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-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-sandboxquandonoSandboxè abilitato.- I tre flag di rafforzamento grafico (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) sono opzionali e sono utili quando i contenitori non dispongono di supporto GPU. ImpostaOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0se il tuo carico di lavoro richiede WebGL o altre funzionalità 3D/del browser. --disable-extensionsè abilitato per impostazione predefinita e può essere disabilitato conOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0per flussi che dipendono dalle estensioni.--renderer-process-limit=2è controllato daOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, dove0mantiene il valore predefinito di Chromium.
browser.extraArgs per aggiungere flag di avvio aggiuntivi.Impostazioni predefinite di sicurezza di rete
Impostazioni predefinite di sicurezza di rete
network: "host"è bloccato.network: "container:<id>"è bloccato per impostazione predefinita (rischio di aggiramento tramite unione dello spazio dei nomi).- Override di emergenza:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh può inizializzare la configurazione dell’ambiente isolato. Imposta OPENCLAW_SANDBOX=1 (o true/yes/on) per abilitare quel percorso. Puoi sovrascrivere la posizione del socket con OPENCLAW_DOCKER_SOCKET. Configurazione completa e riferimento delle variabili d’ambiente: Docker.
setupCommand (configurazione una tantum del contenitore)
setupCommand viene eseguito una volta dopo la creazione del contenitore dell’ambiente isolato (non a ogni esecuzione). Viene eseguito dentro il contenitore tramite sh -lc.
Percorsi:
- Globale:
agents.defaults.sandbox.docker.setupCommand - Per agente:
agents.list[].sandbox.docker.setupCommand
Errori comuni
Errori comuni
- Il valore predefinito di
docker.networkè"none"(nessuna uscita), quindi le installazioni dei pacchetti falliranno. docker.network: "container:<id>"richiededangerouslyAllowContainerNamespaceJoin: trueed è solo per situazioni di emergenza.readOnlyRoot: trueimpedisce le scritture; impostareadOnlyRoot: falseoppure crea un’immagine personalizzata.userdeve essere root per le installazioni dei pacchetti (omettiusero impostauser: "0:0").- L’esecuzione nella sandbox non eredita
process.envdell’host. Usaagents.defaults.sandbox.docker.env(o un’immagine personalizzata) per le chiavi API delle skill.
Criteri degli strumenti e vie di fuga
I criteri di autorizzazione/negazione degli strumenti continuano ad applicarsi prima delle regole della sandbox. Se uno strumento viene negato globalmente o per agente, la sandbox non lo rende di nuovo disponibile.tools.elevated è una via di fuga esplicita che esegue exec fuori dalla sandbox (gateway per impostazione predefinita, oppure node quando la destinazione di esecuzione è node). Le direttive /exec si applicano solo ai mittenti autorizzati e persistono per sessione; per disabilitare completamente exec, usa la negazione nei criteri degli strumenti (vedi Sandbox vs criteri degli strumenti vs Elevated).
Debug:
- Usa
openclaw sandbox explainper ispezionare la modalità sandbox effettiva, i criteri degli strumenti e le chiavi di configurazione per la correzione. - Consulta Sandbox vs criteri degli strumenti vs Elevated per il modello mentale di “perché è bloccato?”.
Override multi-agente
Ogni agente può sovrascrivere sandbox e strumenti:agents.list[].sandbox e agents.list[].tools (più agents.list[].tools.sandbox.tools per i criteri degli strumenti della sandbox). Consulta Sandbox e strumenti multi-agente per la precedenza.
Esempio minimo di abilitazione
Correlati
- Sandbox e strumenti multi-agente — override per agente e precedenza
- OpenShell — configurazione del backend sandbox gestito, modalità workspace e riferimento di configurazione
- Configurazione della sandbox
- Sandbox vs criteri degli strumenti vs Elevated — debug di “perché è bloccato?”
- Sicurezza