Gateway
Isolamento in sandbox
OpenClaw può eseguire strumenti all'interno di backend sandbox per ridurre il raggio d'azione. Questo è facoltativo ed è controllato dalla configurazione (agents.defaults.sandbox o agents.list[].sandbox). Se il sandboxing è disattivato, gli strumenti vengono eseguiti sull'host. Il Gateway resta sull'host; l'esecuzione degli strumenti avviene in una sandbox isolata quando abilitata.
Cosa viene eseguito 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
- Per impostazione predefinita, il browser sandbox si avvia automaticamente (garantisce 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 sandbox usano una rete Docker dedicata (
openclaw-sandbox-browser) invece della rete globalebridge. Configura conagents.defaults.sandbox.browser.network. - L'opzione facoltativa
agents.defaults.sandbox.browser.cdpSourceRangelimita l'ingresso CDP al bordo del container con una allowlist CIDR (per esempio172.21.0.1/32). - L'accesso osservatore noVNC è protetto da password per impostazione predefinita; OpenClaw emette un URL con token a breve durata che serve una pagina di bootstrap locale e apre noVNC con la password nel frammento URL (non nei log di query/header).
agents.defaults.sandbox.browser.allowHostControlconsente alle sessioni in sandbox di puntare esplicitamente al browser host.- Allowlist facoltative controllano
target: "custom":allowedControlUrls,allowedControlHosts,allowedControlPorts.
Non in sandbox:
- Il processo Gateway stesso.
- Qualsiasi strumento esplicitamente autorizzato a essere eseguito fuori dalla sandbox (ad es.
tools.elevated).- L'exec elevato aggira il sandboxing e usa il percorso di escape configurato (
gatewayper impostazione predefinita, oppurenodequando il target exec ènode). - Se il sandboxing è disattivato,
tools.elevatednon cambia l'esecuzione (già sull'host). Vedi Modalità elevata.
- L'exec elevato aggira il sandboxing e usa il percorso di escape configurato (
Modalità
agents.defaults.sandbox.mode controlla quando viene usato il sandboxing:
off
Nessun sandboxing.
non-main
Sandbox solo per le sessioni non-main (predefinito se vuoi chat normali sull'host).
"non-main" si basa su session.mainKey (predefinito "main"), non sull'id dell'agente. Le sessioni di gruppo/canale usano le proprie chiavi, quindi contano come non-main e verranno eseguite in sandbox.
all
Ogni sessione viene eseguita in una sandbox.
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 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.
La configurazione specifica per SSH si trova sotto agents.defaults.sandbox.ssh. La configurazione specifica per OpenShell si trova sotto plugins.entries.openshell.config.
Scegliere 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: nessuna) |
Dipende dall'host remoto | Dipende da OpenShell |
| Browser sandbox | Supportato | Non supportato | Non ancora supportato |
| Bind mount | docker.binds |
N/D | N/D |
| Ideale per | Sviluppo locale, isolamento completo | Offload su una macchina remota | Sandbox remote gestite con sincronizzazione bidirezionale facoltativa |
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 sandbox localmente tramite il socket del daemon Docker (/var/run/docker.sock). L'isolamento dei container sandbox è determinato dai namespace Docker.
Per esporre GPU 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, per esempio "all" o "device=GPU-uuid", e richiede un runtime host compatibile come NVIDIA Container Toolkit.
Backend SSH
Usa backend: "ssh" quando vuoi che OpenClaw esegua in sandbox exec, strumenti file e letture multimediali su una macchina arbitraria accessibile via SSH.
{
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",
// Or use SecretRefs / inline contents instead of local files:
// 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" },
},
},
},
},
}
Come funziona
- OpenClaw crea una root remota per ambito sotto
sandbox.ssh.workspaceRoot. - Al primo utilizzo dopo la creazione o ricreazione, OpenClaw inizializza quel workspace remoto dal workspace locale una volta.
- Dopo di ciò,
exec,read,write,edit,apply_patch, le letture multimediali dei prompt e lo staging dei media in ingresso vengono eseguiti direttamente sul workspace remoto via SSH. - OpenClaw non sincronizza automaticamente le modifiche remote verso il workspace locale.
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 le risolve tramite il normale snapshot runtime dei segreti, le scrive in file temporanei con0600e le elimina quando la sessione SSH termina.- Se sia
*Filesia*Datasono impostati per lo stesso elemento,*Dataha la precedenza per quella sessione SSH.
Conseguenze del modello remoto canonico
Questo è un modello remoto canonico. Il workspace SSH remoto diventa lo stato reale della sandbox dopo il seed iniziale.
- Le modifiche locali sull'host eseguite 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 e inizializza di nuovo dal locale al prossimo utilizzo.- Il sandboxing del browser non è supportato sul backend SSH.
- Le impostazioni
sandbox.docker.*non si applicano al backend SSH.
Backend OpenShell
Usa backend: "openshell" quando vuoi che OpenClaw esegua 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 core e lo stesso bridge 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 facoltativa mirror.
{
agents: {
defaults: {
sandbox: {
mode: "all",
backend: "openshell",
scope: "session",
workspaceAccess: "rw",
},
},
},
plugins: {
entries: {
openshell: {
enabled: true,
config: {
from: "openclaw",
mode: "remote", // mirror | remote
remoteWorkspaceDir: "/sandbox",
remoteAgentWorkspaceDir: "/agent",
},
},
},
},
}
Modalità OpenShell:
mirror(predefinita): il workspace locale resta canonico. OpenClaw sincronizza i file locali in OpenShell prima di exec e sincronizza il workspace remoto indietro dopo exec.remote: il workspace OpenShell è canonico dopo la creazione della sandbox. OpenClaw inizializza il workspace remoto una volta dal workspace locale, poi gli strumenti file ed exec vengono eseguiti direttamente sulla sandbox remota senza sincronizzare le modifiche indietro.
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 filesystem remoto usato da
backend: "ssh". - In modalità
mirrorcambia solo il ciclo di vita: sincronizzazione dal locale al remoto prima di exec, quindi sincronizzazione indietro dopo exec.
Limitazioni attuali di OpenShell
- il browser sandbox non è ancora supportato
sandbox.docker.bindsnon è supportato sul backend OpenShell- le opzioni 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 (locale canonico)
Usa plugins.entries.openshell.config.mode: "mirror" quando vuoi che il workspace locale resti canonico.
Comportamento:
- Prima di
exec, OpenClaw sincronizza il workspace locale nella sandbox OpenShell. - Dopo
exec, OpenClaw sincronizza il workspace remoto indietro nel workspace locale. - Gli strumenti file operano comunque attraverso il bridge sandbox, ma il workspace locale resta la fonte di verità tra i turni.
Usalo quando:
- modifichi file localmente al di fuori di OpenClaw e vuoi che tali modifiche compaiano automaticamente nella sandbox
- vuoi che la sandbox OpenShell si comporti il più possibile come il backend Docker
- vuoi che lo spazio di lavoro host rifletta le scritture della sandbox dopo ogni turno di exec
Compromesso: costo di sincronizzazione aggiuntivo prima e dopo exec.
remote (OpenShell canonico)
Usa plugins.entries.openshell.config.mode: "remote" quando vuoi che lo spazio di lavoro OpenShell diventi canonico.
Comportamento:
- Quando la sandbox viene creata per la prima volta, OpenClaw inizializza una volta lo spazio di lavoro remoto a partire dallo spazio di lavoro locale.
- Dopo di che,
exec,read,write,editeapply_patchoperano direttamente sullo spazio di lavoro OpenShell remoto. - OpenClaw non sincronizza le modifiche remote nello spazio di lavoro locale dopo exec.
- Le letture dei media al momento del prompt continuano a funzionare perché gli strumenti per file e media leggono tramite il bridge della sandbox invece di assumere un percorso host locale.
- Il trasporto è SSH nella sandbox OpenShell restituita da
openshell sandbox ssh-config.
Conseguenze importanti:
- Se modifichi file sull'host al di fuori di OpenClaw dopo il passaggio di inizializzazione, la sandbox remota non vedrà automaticamente tali modifiche.
- Se la sandbox viene ricreata, lo spazio di lavoro remoto viene inizializzato di nuovo dallo spazio di lavoro locale.
- Con
scope: "agent"oscope: "shared", tale spazio di lavoro remoto è condiviso allo stesso scope.
Usalo quando:
- la sandbox deve risiedere principalmente sul lato OpenShell remoto
- vuoi ridurre l'overhead di sincronizzazione per turno
- non vuoi che modifiche locali all'host sovrascrivano silenziosamente lo stato della sandbox remota
Scegli mirror se consideri la sandbox un ambiente di esecuzione temporaneo. Scegli remote se consideri la sandbox lo spazio di lavoro reale.
Ciclo di vita di OpenShell
Le sandbox OpenShell sono comunque gestite tramite il normale ciclo di vita della sandbox:
openclaw sandbox listmostra i runtime OpenShell oltre ai runtime Dockeropenclaw sandbox recreateelimina il runtime corrente e consente a OpenClaw di ricrearlo al prossimo utilizzo- anche la logica di pruning è consapevole del backend
Per la modalità remote, la ricreazione è particolarmente importante:
- la ricreazione elimina lo spazio di lavoro remoto canonico per quello scope
- l'utilizzo successivo inizializza un nuovo spazio di lavoro remoto dallo spazio di lavoro locale
Per la modalità mirror, la ricreazione reimposta principalmente l'ambiente di esecuzione remoto, perché lo spazio di lavoro locale resta comunque canonico.
Accesso allo spazio di lavoro
agents.defaults.sandbox.workspaceAccess controlla cosa può vedere la sandbox:
none (predefinito)
Gli strumenti vedono uno spazio di lavoro sandbox sotto ~/.openclaw/sandboxes.
ro
Monta lo spazio di lavoro dell'agente in sola lettura in /agent (disabilita write/edit/apply_patch).
rw
Monta lo spazio di lavoro dell'agente in lettura/scrittura in /workspace.
Con il backend OpenShell:
- la modalità
mirrorcontinua a usare lo spazio di lavoro locale come sorgente canonica tra i turni di exec - la modalità
remoteusa lo spazio di lavoro OpenShell remoto come sorgente canonica dopo l'inizializzazione iniziale workspaceAccess: "ro"e"none"continuano a limitare il comportamento di scrittura nello stesso modo
I media in ingresso vengono copiati nello spazio di lavoro sandbox attivo (media/inbound/*).
Mount bind personalizzati
agents.defaults.sandbox.docker.binds monta directory host aggiuntive nel container. 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 container del browser sandbox.
- Quando è impostato (incluso
[]), sostituisceagents.defaults.sandbox.docker.bindsper il container del browser. - Quando è omesso, il container del browser usa come fallback
agents.defaults.sandbox.docker.binds(compatibile con le versioni precedenti).
Esempio (sorgente in sola lettura + una directory dati aggiuntiva):
{
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"],
},
},
},
],
},
}
Immagini e configurazione
Immagine Docker predefinita: openclaw-sandbox:bookworm-slim
Crea l'immagine predefinita
Da un checkout sorgente:
scripts/sandbox-setup.sh
Da un'installazione npm (nessun checkout sorgente necessario):
docker build -t openclaw-sandbox:bookworm-slim - <<'DOCKERFILE'
FROM debian:bookworm-slim
ENV DEBIAN_FRONTEND=noninteractive
RUN 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 sandbox
USER sandbox
WORKDIR /home/sandbox
CMD ["sleep", "infinity"]
DOCKERFILE
L'immagine predefinita non include Node. Se uno skill richiede Node (o altri runtime), integra un'immagine personalizzata oppure installa tramite sandbox.docker.setupCommand (richiede egress di rete + root scrivibile + utente root).
OpenClaw non sostituisce silenziosamente openclaw-sandbox:bookworm-slim mancante con un semplice debian:bookworm-slim. Le esecuzioni della sandbox che puntano all'immagine predefinita falliscono rapidamente con un'istruzione di build finché non la crei, perché l'immagine inclusa contiene python3 per gli helper di scrittura/modifica della sandbox.
Facoltativo: crea l'immagine comune
Per un'immagine sandbox più funzionale con strumenti comuni (ad esempio curl, jq, nodejs, python3, git):
Da un checkout sorgente:
scripts/sandbox-common-setup.sh
Da un'installazione npm, crea prima l'immagine predefinita (vedi sopra), poi crea l'immagine comune sopra di essa usando scripts/docker/sandbox/Dockerfile.common dal repository.
Poi imposta agents.defaults.sandbox.docker.image su openclaw-sandbox-common:bookworm-slim.
Facoltativo: crea l'immagine del browser sandbox
Da un checkout sorgente:
scripts/sandbox-browser-setup.sh
Da un'installazione npm, crea usando scripts/docker/sandbox/Dockerfile.browser dal repository.
Per impostazione predefinita, i container sandbox Docker vengono eseguiti senza rete. Sovrascrivi con agents.defaults.sandbox.docker.network.
Valori predefiniti di Chromium per il browser sandbox
L'immagine del browser sandbox inclusa applica anche valori predefiniti prudenti per l'avvio di Chromium nei carichi di lavoro containerizzati. I valori predefiniti correnti del container 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 facoltativi e utili quando i container non dispongono di supporto GPU. ImpostaOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0se il tuo carico di lavoro richiede WebGL o altre funzionalità 3D/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.
Se ti serve un profilo runtime diverso, usa un'immagine browser personalizzata e fornisci il tuo entrypoint. Per profili Chromium locali (non container), usa browser.extraArgs per aggiungere flag di avvio aggiuntivi.
Valori predefiniti di sicurezza della rete
network: "host"è bloccato.network: "container:<id>"è bloccato per impostazione predefinita (rischio di bypass tramite join del namespace).- Override di emergenza:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
Le installazioni Docker e il Gateway containerizzato sono qui: Docker
Per distribuzioni del Gateway Docker, scripts/docker/setup.sh può inizializzare la configurazione della sandbox. Imposta OPENCLAW_SANDBOX=1 (oppure true/yes/on) per abilitare quel percorso. Puoi sovrascrivere la posizione del socket con OPENCLAW_DOCKER_SOCKET. Configurazione completa e riferimento env: Docker.
setupCommand (configurazione del container una tantum)
setupCommand viene eseguito una volta dopo la creazione del container sandbox (non a ogni esecuzione). Viene eseguito all'interno del container tramite sh -lc.
Percorsi:
- Globale:
agents.defaults.sandbox.docker.setupCommand - Per agente:
agents.list[].sandbox.docker.setupCommand
Problemi comuni
- Il valore predefinito di
docker.networkè"none"(nessuna uscita), quindi le installazioni dei pacchetti non riusciranno. docker.network: "container:<id>"richiededangerouslyAllowContainerNamespaceJoin: trueed è solo per situazioni di emergenza.readOnlyRoot: trueimpedisce le scritture; impostareadOnlyRoot: falseo 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/blocco degli strumenti si applicano comunque prima delle regole della sandbox. Se uno strumento è bloccato globalmente o per agente, la sandbox non lo riabilita.
tools.elevated è una via di fuga esplicita che esegue exec fuori dalla sandbox (gateway per impostazione predefinita, o node quando la destinazione di exec è node). Le direttive /exec si applicano solo ai mittenti autorizzati e persistono per sessione; per disabilitare in modo rigido exec, usa il blocco tramite criterio degli strumenti (vedi Sandbox vs criteri degli strumenti vs privilegi elevati).
Debug:
- Usa
openclaw sandbox explainper ispezionare la modalità sandbox effettiva, il criterio degli strumenti e le chiavi di configurazione per la correzione. - Vedi Sandbox vs criteri degli strumenti vs privilegi elevati per il modello mentale di "perché è bloccato?".
Mantienilo bloccato.
Override multi-agente
Ogni agente può sovrascrivere sandbox + strumenti: agents.list[].sandbox e agents.list[].tools (più agents.list[].tools.sandbox.tools per il criterio degli strumenti della sandbox). Vedi Sandbox e strumenti multi-agente per la precedenza.
Esempio minimo di abilitazione
{
agents: {
defaults: {
sandbox: {
mode: "non-main",
scope: "session",
workspaceAccess: "none",
},
},
},
}
Correlati
- Sandbox e strumenti multi-agente — override per agente e precedenza
- OpenShell — configurazione del backend sandbox gestito, modalità dell'area di lavoro e riferimento di configurazione
- Configurazione della sandbox
- Sandbox vs criteri degli strumenti vs privilegi elevati — debug di "perché è bloccato?"
- Sicurezza