Gateway
Sandbox frente a política de herramientas frente a privilegios elevados
OpenClaw tiene tres controles relacionados (pero diferentes):
- Sandbox (
agents.defaults.sandbox.*/agents.list[].sandbox.*) decide dónde se ejecutan las herramientas (backend de sandbox frente al host). - Política de herramientas (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) decide qué herramientas están disponibles/permitidas. - Elevated (
tools.elevated.*,agents.list[].tools.elevated.*) es una vía de escape solo para exec para ejecutar fuera del sandbox cuando estás en sandbox (gatewayde forma predeterminada, onodecuando el destino de exec está configurado comonode).
Depuración rápida
Usa el inspector para ver qué está haciendo OpenClaw realmente:
openclaw sandbox explainopenclaw sandbox explain --session agent:main:mainopenclaw sandbox explain --agent workopenclaw sandbox explain --jsonImprime:
- modo/ámbito/acceso al espacio de trabajo efectivos del sandbox
- si la sesión está actualmente en sandbox (main frente a non-main)
- allow/deny efectivos de herramientas del sandbox (y si provienen del agente/global/predeterminado)
- compuertas de Elevated y rutas de claves de corrección
Sandbox: dónde se ejecutan las herramientas
El sandbox se controla mediante agents.defaults.sandbox.mode:
"off": todo se ejecuta en el host."non-main": solo las sesiones non-main están en sandbox (una "sorpresa" común para grupos/canales)."all": todo está en sandbox.
Consulta Sandboxing para ver la matriz completa (ámbito, montajes de espacio de trabajo, imágenes).
Montajes bind (comprobación rápida de seguridad)
docker.bindsperfora el sistema de archivos del sandbox: cualquier cosa que montes será visible dentro del contenedor con el modo que definas (:roo:rw).- El valor predeterminado es lectura-escritura si omites el modo; prefiere
:ropara código fuente/secretos. scope: "shared"ignora los binds por agente (solo se aplican los binds globales).- OpenClaw valida las fuentes de bind dos veces: primero en la ruta de origen normalizada y luego otra vez después de resolver a través del ancestro existente más profundo. Los escapes por padres con enlaces simbólicos no eluden las comprobaciones de rutas bloqueadas ni de raíces permitidas.
- Las rutas hoja inexistentes se siguen comprobando de forma segura. Si
/workspace/alias-out/new-filese resuelve a través de un padre con enlace simbólico a una ruta bloqueada o fuera de las raíces permitidas configuradas, el bind se rechaza. - Vincular
/var/run/docker.sockentrega efectivamente el control del host al sandbox; hazlo solo de forma intencional. - El acceso al espacio de trabajo (
workspaceAccess: "ro"/"rw") es independiente de los modos de bind.
Política de herramientas: qué herramientas existen/pueden invocarse
Importan dos capas:
- Perfil de herramientas:
tools.profileyagents.list[].tools.profile(lista base de permitidos) - Perfil de herramientas del proveedor:
tools.byProvider[provider].profileyagents.list[].tools.byProvider[provider].profile - Política de herramientas global/por agente:
tools.allow/tools.denyyagents.list[].tools.allow/agents.list[].tools.deny - Política de herramientas del proveedor:
tools.byProvider[provider].allow/denyyagents.list[].tools.byProvider[provider].allow/deny - Política de herramientas del sandbox (solo se aplica cuando está en sandbox):
tools.sandbox.tools.allow/tools.sandbox.tools.denyyagents.list[].tools.sandbox.tools.*
Reglas generales:
denysiempre gana.- Si
allowno está vacío, todo lo demás se trata como bloqueado. - La política de herramientas es el bloqueo definitivo:
/execno puede anular una herramientaexecdenegada. - La política de herramientas filtra la disponibilidad de herramientas por nombre; no inspecciona efectos secundarios dentro de
exec. Siexecestá permitido, denegarwrite,editoapply_patchno hace que los comandos de shell sean de solo lectura. /execsolo cambia los valores predeterminados de sesión para remitentes autorizados; no concede acceso a herramientas. Las claves de herramientas del proveedor aceptanprovider(por ejemplo,google-antigravity) oprovider/model(por ejemplo,openai/gpt-5.4).- Los registros del Gateway incluyen entradas de auditoría
agents/tool-policycuando un paso de política de herramientas elimina herramientas o una política de herramientas del sandbox bloquea una llamada. Usaopenclaw logspara ver la etiqueta de la regla, la clave de configuración y los nombres de herramientas afectados.
Grupos de herramientas (abreviaturas)
Las políticas de herramientas (globales, de agente, de sandbox) admiten entradas group:* que se expanden a varias herramientas:
{ tools: { sandbox: { tools: { allow: ["group:runtime", "group:fs", "group:sessions", "group:memory"], }, }, },}Grupos disponibles:
group:runtime:exec,process,code_execution(bashse acepta como alias deexec)group:fs:read,write,edit,apply_patchPara agentes de solo lectura, deniegagroup:runtimeademás de las herramientas de sistema de archivos que mutan, salvo que la política de sistema de archivos del sandbox o un límite de host separado imponga la restricción de solo lectura.group:sessions:sessions_list,sessions_history,sessions_send,sessions_spawn,sessions_yield,subagents,session_statusgroup:memory:memory_search,memory_getgroup:web:web_search,x_search,web_fetchgroup:ui:browser,canvasgroup:automation:heartbeat_respond,cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:agents:agents_list,update_plangroup:media:image,image_generate,music_generate,video_generate,ttsgroup:openclaw: todas las herramientas integradas de OpenClaw (excluye plugins de proveedor)group:plugins: todas las herramientas cargadas propiedad de plugins, incluidos los servidores MCP configurados expuestos mediantebundle-mcp
Para servidores MCP en sandbox, la política de herramientas del sandbox es una segunda compuerta de permiso. Si mcp.servers está configurado pero los turnos en sandbox solo muestran herramientas integradas, añade bundle-mcp, group:plugins o un nombre/glob de herramienta MCP con prefijo de servidor, como outlook__send_mail u outlook__*, a tools.sandbox.tools.alsoAllow; luego reinicia/recarga el gateway y vuelve a capturar la lista de herramientas. Los globs de servidor usan el prefijo de servidor MCP seguro para proveedores: los caracteres que no sean [A-Za-z0-9_-] se convierten en -, los nombres que no empiezan con una letra reciben el prefijo mcp-, y los prefijos largos o duplicados pueden truncarse o recibir un sufijo.
openclaw doctor actualmente comprueba esta forma para servidores administrados por OpenClaw en mcp.servers. Los servidores MCP cargados desde manifiestos de plugins incluidos o desde .mcp.json de Claude usan la misma compuerta de sandbox, pero este diagnóstico aún no enumera esas fuentes; usa las mismas entradas de lista de permitidos si sus herramientas desaparecen en turnos en sandbox.
Elevated: "ejecutar en el host" solo para exec
Elevated no concede herramientas adicionales; solo afecta a exec.
- Si estás en sandbox,
/elevated on(oexecconelevated: true) se ejecuta fuera del sandbox (es posible que aún se apliquen aprobaciones). - Usa
/elevated fullpara omitir las aprobaciones de exec en la sesión. - Si ya estás ejecutando directamente, Elevated es efectivamente un no-op (sigue estando sujeto a compuertas).
- Elevated no está limitado por Skills y no anula allow/deny de herramientas.
- Elevated no concede anulaciones arbitrarias entre hosts desde
host=auto; sigue las reglas normales de destino de exec y solo preservanodecuando el destino configurado/de sesión ya esnode. /execestá separado de Elevated. Solo ajusta los valores predeterminados de exec por sesión para remitentes autorizados.
Compuertas:
- Habilitación:
tools.elevated.enabled(y opcionalmenteagents.list[].tools.elevated.enabled) - Listas de remitentes permitidos:
tools.elevated.allowFrom.<provider>(y opcionalmenteagents.list[].tools.elevated.allowFrom.<provider>)
Consulta Modo Elevated.
Correcciones comunes de "cárcel de sandbox"
"Herramienta X bloqueada por la política de herramientas del sandbox"
Claves de corrección (elige una):
- Deshabilitar sandbox:
agents.defaults.sandbox.mode=off(o por agenteagents.list[].sandbox.mode=off) - Permitir la herramienta dentro del sandbox:
- quitarla de
tools.sandbox.tools.deny(o por agenteagents.list[].tools.sandbox.tools.deny) - o añadirla a
tools.sandbox.tools.allow(o a allow por agente)
- quitarla de
- Comprueba
openclaw logspara ver la entradaagents/tool-policy. Registra el modo de sandbox y si la regla allow o deny bloqueó la herramienta.
"Pensé que esto era main, ¿por qué está en sandbox?"
En modo "non-main", las claves de grupo/canal no son main. Usa la clave de sesión main (mostrada por sandbox explain) o cambia el modo a "off".
Relacionado
- Sandboxing -- referencia completa de sandbox (modos, ámbitos, backends, imágenes)
- Sandbox y herramientas multiagente -- anulaciones por agente y precedencia
- Modo Elevated