Sandbox vs stratégie d’outil vs Elevated
OpenClaw dispose de trois contrôles liés (mais différents) :- Sandbox (
agents.defaults.sandbox.*/agents.list[].sandbox.*) décide où les outils s’exécutent (backend sandbox vs hôte). - Stratégie d’outil (
tools.*,tools.sandbox.tools.*,agents.list[].tools.*) décide quels outils sont disponibles/autorisés. - Elevated (
tools.elevated.*,agents.list[].tools.elevated.*) est une porte de sortie réservée à exec pour s’exécuter hors du sandbox lorsque vous êtes sandboxé (gatewaypar défaut, ounodelorsque la cible exec est configurée surnode).
Débogage rapide
Utilisez l’inspecteur pour voir ce qu’OpenClaw fait réellement :- le mode/scope/accès workspace effectifs du sandbox
- si la session est actuellement sandboxée (main vs non-main)
- l’autorisation/le refus effectif des outils du sandbox (et si cela vient de l’agent/global/par défaut)
- les contrôles Elevated et les chemins de clés correctifs
Sandbox : où les outils s’exécutent
Le sandboxing est contrôlé paragents.defaults.sandbox.mode :
"off": tout s’exécute sur l’hôte."non-main": seules les sessions non principales sont sandboxées (surprise fréquente pour les groupes/canaux)."all": tout est sandboxé.
Bind mounts (contrôle de sécurité rapide)
docker.bindsperce le système de fichiers du sandbox : tout ce que vous montez est visible dans le conteneur avec le mode que vous définissez (:roou:rw).- Par défaut, c’est en lecture-écriture si vous omettez le mode ; préférez
:ropour les sources/secrets. scope: "shared"ignore les binds par agent (seuls les binds globaux s’appliquent).- OpenClaw valide deux fois les sources de bind : d’abord sur le chemin source normalisé, puis à nouveau après résolution via l’ancêtre existant le plus profond. Les échappements via parent symlink ne contournent pas les vérifications de chemin bloqué ou de racine autorisée.
- Les chemins feuilles inexistants sont quand même vérifiés en toute sécurité. Si
/workspace/alias-out/new-filese résout via un parent symlinké vers un chemin bloqué ou en dehors des racines autorisées configurées, le bind est rejeté. - Monter
/var/run/docker.sockrevient pratiquement à donner le contrôle de l’hôte au sandbox ; ne le faites qu’intentionnellement. - L’accès workspace (
workspaceAccess: "ro"/"rw") est indépendant des modes de bind.
Stratégie d’outil : quels outils existent / peuvent être appelés
Deux couches comptent :- Profil d’outils :
tools.profileetagents.list[].tools.profile(liste d’autorisation de base) - Profil d’outils provider :
tools.byProvider[provider].profileetagents.list[].tools.byProvider[provider].profile - Stratégie d’outil globale/par agent :
tools.allow/tools.denyetagents.list[].tools.allow/agents.list[].tools.deny - Stratégie d’outil provider :
tools.byProvider[provider].allow/denyetagents.list[].tools.byProvider[provider].allow/deny - Stratégie d’outil sandbox (s’applique uniquement en mode sandbox) :
tools.sandbox.tools.allow/tools.sandbox.tools.denyetagents.list[].tools.sandbox.tools.*
denyl’emporte toujours.- Si
allown’est pas vide, tout le reste est considéré comme bloqué. - La stratégie d’outil est l’arrêt strict :
/execne peut pas contourner un outilexecrefusé. /execmodifie seulement les valeurs par défaut de session pour les expéditeurs autorisés ; il n’accorde pas l’accès aux outils. Les clés d’outils provider acceptent soitprovider(par ex.google-antigravity) soitprovider/model(par ex.openai/gpt-5.4).
Groupes d’outils (raccourcis)
Les stratégies d’outils (globales, agent, sandbox) prennent en charge des entréesgroup:* qui s’étendent à plusieurs outils :
group:runtime:exec,process,code_execution(bashest accepté comme alias deexec)group:fs:read,write,edit,apply_patchgroup: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:cron,gatewaygroup:messaging:messagegroup:nodes:nodesgroup:agents:agents_listgroup:media:image,image_generate,video_generate,ttsgroup:openclaw: tous les outils intégrés d’OpenClaw (hors plugins provider)
Elevated : « exécuter sur l’hôte » réservé à exec
Elevated n’accorde pas d’outils supplémentaires ; il n’affecte queexec.
- Si vous êtes sandboxé,
/elevated on(ouexecavecelevated: true) s’exécute hors du sandbox (des approbations peuvent encore s’appliquer). - Utilisez
/elevated fullpour ignorer les approbations exec pour la session. - Si vous vous exécutez déjà directement, Elevated est en pratique sans effet (mais reste soumis à contrôle).
- Elevated n’est pas limité par Skill et ne contourne pas les règles allow/deny des outils.
- Elevated n’accorde pas de remplacements inter-hôtes arbitraires depuis
host=auto; il suit les règles normales de cible exec et ne préservenodeque lorsque la cible configurée/de session est déjànode. /execest distinct d’Elevated. Il ajuste seulement les valeurs exec par session pour les expéditeurs autorisés.
- Activation :
tools.elevated.enabled(et éventuellementagents.list[].tools.elevated.enabled) - Listes d’autorisation d’expéditeurs :
tools.elevated.allowFrom.<provider>(et éventuellementagents.list[].tools.elevated.allowFrom.<provider>)
Correctifs courants du « sandbox jail »
« Outil X bloqué par la stratégie d’outil du sandbox »
Clés correctives (choisissez-en une) :- Désactiver le sandbox :
agents.defaults.sandbox.mode=off(ou par agentagents.list[].sandbox.mode=off) - Autoriser l’outil dans le sandbox :
- le retirer de
tools.sandbox.tools.deny(ou par agentagents.list[].tools.sandbox.tools.deny) - ou l’ajouter à
tools.sandbox.tools.allow(ou à l’autorisation par agent)
- le retirer de
« Je pensais que c’était main, pourquoi est-ce sandboxé ? »
En mode"non-main", les clés de groupe/canal ne sont pas principales. Utilisez la clé de session principale (affichée par sandbox explain) ou passez le mode à "off".
Voir aussi
- Sandboxing — référence complète du sandbox (modes, scopes, backends, images)
- Sandbox & outils multi-agent — remplacements par agent et ordre de priorité
- Mode Elevated