O OpenClaw pode executar ferramentas dentro de backends de sandbox para reduzir o raio de impacto. Isso é opcional e controlado por configuração (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 ou agents.list[].sandbox). Se o isolamento em sandbox estiver desativado, as ferramentas serão executadas no host. O Gateway permanece no host; a execução de ferramentas ocorre em uma sandbox isolada quando habilitada.
Este não é um limite de segurança perfeito, mas limita materialmente o acesso ao sistema de arquivos e a processos quando o modelo faz algo inadequado.
O que entra em sandbox
- Execução de ferramentas (
exec,read,write,edit,apply_patch,process, etc.). - Navegador opcional em sandbox (
agents.defaults.sandbox.browser).
Detalhes do navegador em sandbox
Detalhes do navegador em sandbox
- O próprio processo do Gateway.
- Qualquer ferramenta explicitamente autorizada a ser executada fora da sandbox (por exemplo,
tools.elevated).- Execução elevada ignora o isolamento em sandbox e usa o caminho de escape configurado (
gatewaypor padrão, ounodequando o destino de execução énode). - Se o isolamento em sandbox estiver desativado,
tools.elevatednão altera a execução (já está no host). Consulte Modo Elevado.
- Execução elevada ignora o isolamento em sandbox e usa o caminho de escape configurado (
Modos
agents.defaults.sandbox.mode controla quando o isolamento em sandbox é usado:
- off
- non-main
- all
Sem isolamento em sandbox.
Escopo
agents.defaults.sandbox.scope controla quantos contêineres são criados:
"agent"(padrão): um contêiner por agente."session": um contêiner por sessão."shared": um contêiner compartilhado por todas as sessões em sandbox.
Backend
agents.defaults.sandbox.backend controla qual runtime fornece a sandbox:
"docker"(padrão quando o isolamento em sandbox está habilitado): runtime de sandbox local baseado em Docker."ssh": runtime genérico de sandbox remoto baseado em SSH."openshell": runtime de sandbox baseado em OpenShell.
agents.defaults.sandbox.ssh. A configuração específica de OpenShell fica em plugins.entries.openshell.config.
Como escolher um backend
| Docker | SSH | OpenShell | |
|---|---|---|---|
| Onde executa | Contêiner local | Qualquer host acessível por SSH | Sandbox gerenciada pelo OpenShell |
| Configuração | scripts/sandbox-setup.sh | Chave SSH + host de destino | Plugin OpenShell habilitado |
| Modelo de workspace | Bind mount ou cópia | Canônico remoto (semeado uma vez) | mirror ou remote |
| Controle de rede | docker.network (padrão: nenhum) | Depende do host remoto | Depende do OpenShell |
| Sandbox de navegador | Compatível | Não compatível | Ainda não compatível |
| Bind mounts | docker.binds | N/A | N/A |
| Melhor para | Desenvolvimento local, isolamento completo | Descarregar para uma máquina remota | Sandboxes remotas gerenciadas com sincronização bidirecional opcional |
Backend Docker
O isolamento em sandbox fica desativado por padrão. Se você habilitar o isolamento em sandbox e não escolher um backend, o OpenClaw usa o backend Docker. Ele executa ferramentas e navegadores em sandbox localmente via socket do daemon Docker (/var/run/docker.sock). O isolamento do contêiner de sandbox é determinado pelos namespaces do Docker.
Para expor GPUs do host a sandboxes Docker, defina agents.defaults.sandbox.docker.gpus ou a substituição por agente agents.list[].sandbox.docker.gpus. O valor é passado para a flag --gpus do Docker como um argumento separado, por exemplo "all" ou "device=GPU-uuid", e exige um runtime de host compatível, como NVIDIA Container Toolkit.
Backend SSH
Usebackend: "ssh" quando quiser que o OpenClaw coloque exec, ferramentas de arquivo e leituras de mídia em sandbox em uma máquina arbitrária acessível por SSH.
Como funciona
Como funciona
- O OpenClaw cria uma raiz remota por escopo em
sandbox.ssh.workspaceRoot. - No primeiro uso após criar ou recriar, o OpenClaw semeia esse workspace remoto a partir do workspace local uma vez.
- Depois disso,
exec,read,write,edit,apply_patch, leituras de mídia de prompt e staging de mídia de entrada são executados diretamente no workspace remoto via SSH. - O OpenClaw não sincroniza automaticamente alterações remotas de volta para o workspace local.
Material de autenticação
Material de autenticação
identityFile,certificateFile,knownHostsFile: usam arquivos locais existentes e os repassam pela configuração do OpenSSH.identityData,certificateData,knownHostsData: usam strings inline ou SecretRefs. O OpenClaw as resolve pelo snapshot normal de runtime de segredos, grava em arquivos temporários com0600e as exclui quando a sessão SSH termina.- Se
*Filee*Dataestiverem definidos para o mesmo item,*Datavence para essa sessão SSH.
Consequências canônicas remotas
Consequências canônicas remotas
Este é um modelo canônico remoto. O workspace SSH remoto se torna o estado real da sandbox após a semente inicial.
- Edições locais no host feitas fora do OpenClaw após a etapa de semente não ficam visíveis remotamente até você recriar a sandbox.
openclaw sandbox recreateexclui a raiz remota por escopo e semeia novamente a partir do local no próximo uso.- O isolamento em sandbox de navegador não é compatível com o backend SSH.
- As configurações
sandbox.docker.*não se aplicam ao backend SSH.
Backend OpenShell
Usebackend: "openshell" quando quiser que o OpenClaw coloque ferramentas em sandbox em um ambiente remoto gerenciado pelo OpenShell. Para o guia completo de configuração, a referência de configuração e a comparação de modos de workspace, consulte a página do OpenShell dedicada.
O OpenShell reutiliza o mesmo transporte SSH central e a mesma ponte de sistema de arquivos remoto do backend SSH genérico, e adiciona ciclo de vida específico do OpenShell (sandbox create/get/delete, sandbox ssh-config) mais o modo de workspace mirror opcional.
mirror(padrão): o workspace local permanece canônico. O OpenClaw sincroniza arquivos locais para o OpenShell antes de exec e sincroniza o workspace remoto de volta após exec.remote: o workspace do OpenShell é canônico depois que a sandbox é criada. O OpenClaw semeia o workspace remoto uma vez a partir do workspace local; depois disso, ferramentas de arquivo e exec são executados diretamente na sandbox remota sem sincronizar alterações de volta.
Detalhes do transporte remoto
Detalhes do transporte remoto
- O OpenClaw pede ao OpenShell uma configuração SSH específica da sandbox via
openshell sandbox ssh-config <name>. - O núcleo grava essa configuração SSH em um arquivo temporário, abre a sessão SSH e reutiliza a mesma ponte de sistema de arquivos remoto usada por
backend: "ssh". - No modo
mirror, apenas o ciclo de vida difere: sincroniza o local para o remoto antes de exec e depois sincroniza de volta após exec.
Limitações atuais do OpenShell
Limitações atuais do OpenShell
- navegador em sandbox ainda não é compatível
sandbox.docker.bindsnão é compatível com o backend OpenShell- ajustes de runtime específicos do Docker em
sandbox.docker.*ainda se aplicam somente ao backend Docker
Modos de workspace
O OpenShell tem dois modelos de workspace. Esta é a parte que mais importa na prática.- mirror (local canônico)
- remote (OpenShell canonical)
Use
plugins.entries.openshell.config.mode: "mirror" quando quiser que o workspace local permaneça canônico.Comportamento:- Antes de
exec, o OpenClaw sincroniza o workspace local para o sandbox do OpenShell. - Depois de
exec, o OpenClaw sincroniza o workspace remoto de volta para o workspace local. - As ferramentas de arquivo ainda operam pela ponte do sandbox, mas o workspace local continua sendo a fonte de verdade entre turnos.
- você edita arquivos localmente fora do OpenClaw e quer que essas alterações apareçam no sandbox automaticamente
- você quer que o sandbox do OpenShell se comporte o máximo possível como o backend Docker
- você quer que o workspace do host reflita escritas do sandbox após cada turno de exec
mirror se você pensa no sandbox como um ambiente de execução temporário. Escolha remote se você pensa no sandbox como o workspace real.
Ciclo de vida do OpenShell
Sandboxes do OpenShell ainda são gerenciados pelo ciclo de vida normal do sandbox:openclaw sandbox listmostra runtimes do OpenShell e runtimes Dockeropenclaw sandbox recreateexclui o runtime atual e permite que o OpenClaw o recrie no próximo uso- a lógica de limpeza também é ciente do backend
remote, recriar é especialmente importante:
- recriar exclui o workspace remoto canônico para esse escopo
- o próximo uso inicializa um workspace remoto novo a partir do workspace local
mirror, recriar principalmente redefine o ambiente de execução remoto, porque o workspace local continua sendo canônico de qualquer forma.
Acesso ao workspace
agents.defaults.sandbox.workspaceAccess controla o que o sandbox pode ver:
- none (default)
- ro
- rw
As ferramentas veem um workspace de sandbox em
~/.openclaw/sandboxes.- o modo
mirrorainda usa o workspace local como a fonte canônica entre turnos de exec - o modo
remoteusa o workspace remoto do OpenShell como a fonte canônica após a inicialização inicial workspaceAccess: "ro"e"none"ainda restringem o comportamento de escrita da mesma forma
media/inbound/*).
Observação sobre Skills: a ferramenta
read é enraizada no sandbox. Com workspaceAccess: "none", o OpenClaw espelha Skills elegíveis no workspace do sandbox (.../skills) para que possam ser lidas. Com "rw", Skills do workspace são legíveis a partir de /workspace/skills.Montagens bind personalizadas
agents.defaults.sandbox.docker.binds monta diretórios adicionais do host no contêiner. Formato: host:container:mode (por exemplo, "/home/user/source:/source:rw").
Binds globais e por agente são mesclados (não substituídos). Em scope: "shared", binds por agente são ignorados.
agents.defaults.sandbox.browser.binds monta diretórios adicionais do host apenas no contêiner do navegador do sandbox.
- Quando definido (incluindo
[]), ele substituiagents.defaults.sandbox.docker.bindspara o contêiner do navegador. - Quando omitido, o contêiner do navegador recorre a
agents.defaults.sandbox.docker.binds(compatível com versões anteriores).
Imagens e configuração
Imagem Docker padrão:openclaw-sandbox:bookworm-slim
Checkout de código-fonte vs instalação npmOs scripts auxiliares
scripts/sandbox-setup.sh, scripts/sandbox-common-setup.sh e scripts/sandbox-browser-setup.sh só estão disponíveis ao executar a partir de um checkout de código-fonte. Eles não são incluídos no pacote npm.Se você instalou o OpenClaw via npm install -g openclaw, use os comandos inline de docker build mostrados abaixo.Build the default image
A partir de um checkout de código-fonte:A partir de uma instalação npm (sem necessidade de checkout de código-fonte):A imagem padrão não inclui Node. Se uma Skill precisar de Node (ou outros runtimes), incorpore uma imagem personalizada ou instale via
sandbox.docker.setupCommand (requer saída de rede + root gravável + usuário root).O OpenClaw não substitui silenciosamente por debian:bookworm-slim puro quando openclaw-sandbox:bookworm-slim está ausente. Execuções de sandbox que miram a imagem padrão falham rápido com uma instrução de build até que você a construa, porque a imagem empacotada carrega python3 para auxiliares de escrita/edição do sandbox.Optional: build the common image
Para uma imagem de sandbox mais funcional com ferramentas comuns (por exemplo, A partir de uma instalação npm, construa a imagem padrão primeiro (veja acima) e então construa a imagem comum por cima usando o
curl, jq, nodejs, python3, git):A partir de um checkout de código-fonte:scripts/docker/sandbox/Dockerfile.common do repositório.Então defina agents.defaults.sandbox.docker.image como openclaw-sandbox-common:bookworm-slim.Optional: build the sandbox browser image
A partir de um checkout de código-fonte:A partir de uma instalação npm, construa usando o
scripts/docker/sandbox/Dockerfile.browser do repositório.agents.defaults.sandbox.docker.network.
Sandbox browser Chromium defaults
Sandbox browser Chromium defaults
A imagem empacotada do navegador do sandbox também aplica padrões conservadores de inicialização do Chromium para cargas de trabalho em contêiner. Os padrões atuais do contêiner incluem:
--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-sandboxquandonoSandboxestá habilitado.- As três flags de endurecimento gráfico (
--disable-3d-apis,--disable-software-rasterizer,--disable-gpu) são opcionais e são úteis quando contêineres não têm suporte a GPU. DefinaOPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0se sua carga de trabalho exigir WebGL ou outros recursos 3D/do navegador. --disable-extensionsé habilitado por padrão e pode ser desabilitado comOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0para fluxos que dependem de extensões.--renderer-process-limit=2é controlado porOPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>, em que0mantém o padrão do Chromium.
browser.extraArgs para anexar flags de inicialização adicionais.Network security defaults
Network security defaults
network: "host"é bloqueado.network: "container:<id>"é bloqueado por padrão (risco de bypass por entrada no namespace).- Substituição de emergência:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true.
scripts/docker/setup.sh pode inicializar a configuração do sandbox. Defina OPENCLAW_SANDBOX=1 (ou true/yes/on) para habilitar esse caminho. Você pode sobrescrever o local do socket com OPENCLAW_DOCKER_SOCKET. Configuração completa e referência de env: Docker.
setupCommand (configuração única do contêiner)
setupCommand executa uma vez após o contêiner do sandbox ser criado (não a cada execução). Ele executa dentro do contêiner via sh -lc.
Caminhos:
- Global:
agents.defaults.sandbox.docker.setupCommand - Por agente:
agents.list[].sandbox.docker.setupCommand
Armadilhas comuns
Armadilhas comuns
- O padrão de
docker.networké"none"(sem saída), então as instalações de pacotes falharão. docker.network: "container:<id>"exigedangerouslyAllowContainerNamespaceJoin: truee deve ser usado apenas como último recurso.readOnlyRoot: trueimpede gravações; definareadOnlyRoot: falseou crie uma imagem personalizada.userdeve ser root para instalações de pacotes (omitauserou definauser: "0:0").- A execução no sandbox não herda o
process.envdo host. Useagents.defaults.sandbox.docker.env(ou uma imagem personalizada) para chaves de API de Skills.
Política de ferramentas e rotas de escape
As políticas de permissão/negação de ferramentas ainda se aplicam antes das regras do sandbox. Se uma ferramenta for negada globalmente ou por agente, o sandbox não a traz de volta.tools.elevated é uma rota de escape explícita que executa exec fora do sandbox (gateway por padrão, ou node quando o destino de execução é node). As diretivas /exec se aplicam apenas a remetentes autorizados e persistem por sessão; para desabilitar exec de forma rígida, use a negação na política de ferramentas (consulte Sandbox vs Tool Policy vs Elevated).
Depuração:
- Use
openclaw sandbox explainpara inspecionar o modo de sandbox efetivo, a política de ferramentas e as chaves de configuração de correção. - Consulte Sandbox vs Tool Policy vs Elevated para o modelo mental de “por que isto está bloqueado?”.
Substituições multiagente
Cada agente pode substituir sandbox + ferramentas:agents.list[].sandbox e agents.list[].tools (mais agents.list[].tools.sandbox.tools para a política de ferramentas do sandbox). Consulte Multi-Agent Sandbox & Tools para precedência.
Exemplo mínimo de habilitação
Relacionados
- Multi-Agent Sandbox & Tools — substituições por agente e precedência
- OpenShell — configuração do backend de sandbox gerenciado, modos de workspace e referência de configuração
- Configuração de sandbox
- Sandbox vs Tool Policy vs Elevated — depuração de “por que isto está bloqueado?”
- Segurança