必须通过沙箱作用域与工作区挂载策略双重锁定:一、设mode为"all"强制所有会话进沙箱;二、设scope为"agent"使每个agent独享docker容器;三、设workspaceaccess为"ro"实现只读挂载;四、配置workspace根路径并启用restrict_to_root路径净化;五、确保elevatedtools为空数组或未定义。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你需要让OpenClaw中调用的免费模型(如Qwen2.5-VL-7B、GLM-4.7-Flash等)在执行代码或文件操作时,无法越界访问主机敏感路径,且每个Agent拥有互不干扰的专属工作空间——这不能靠勾选开关实现,必须通过配置沙箱作用域与工作区挂载策略双重锁定。
确认沙箱模式已全局启用
打开~/.openclaw/config.json,找到agents.defaults.sandbox节点。将mode字段设为"all",确保所有会话(包括主会话)均强制进入沙箱。若该字段不存在,请手动添加:{"mode": "all"}。这一步是后续隔离生效的前提,【mode: "all" 是唯一能覆盖主会话的取值,设为 "non-main" 将导致主会话直连宿主机】。
保存后执行openclaw restart重启服务。
设置每个Agent独立容器与专属工作区
仍在config.json中,定位agents.defaults.sandbox下的scope字段。将其值设为"agent"。该配置会让OpenClaw为每个Agent启动一个独立Docker容器,而非复用同一容器或按会话分配——避免不同Agent间因共享容器导致环境变量、临时文件、进程状态互相污染。
接着配置workspaceAccess为"ro"。这意味着Agent工作区将以只读方式挂载进沙箱容器的/agent路径,AI无法执行write_file、edit或apply_patch等写入操作。即使模型生成了删除命令,也会在容器内立即报错:Read-only file system。
若你使用的是config.yaml格式,对应字段为agents.defaults.sandbox.scope: agent和agents.defaults.sandbox.workspaceAccess: ro。
绑定并净化工作区路径
第一步:在config.json的sandbox对象下添加workspace字段,填入绝对路径,例如:"workspace": "/data/openclaw/agents"。该路径将成为所有Agent工作区的根目录,OpenClaw会自动为每个Agent创建子目录(如/data/openclaw/agents/agent-xyz)。
第二步:启用路径净化机制。添加restrict_to_root: true,并确保所有文件操作API(如read_file("/etc/passwd"))在执行前被校验——只要目标路径不以/data/openclaw/agents/开头,即刻拦截并抛出路径越权!禁止访问根目录外的文件!异常。
第三步:验证挂载效果。进入任一Agent沙箱容器:docker exec -it openclaw-sandbox-agent-xxx sh,执行ls /agent,应仅列出该Agent专属子目录内容;尝试cd /etc或touch /agent/../test,均应失败。
禁用提权工具链防止沙箱逃逸
方法一:检查config.json中是否存在elevatedTools字段。若存在,立即将其设为空数组:"elevatedTools": []。
方法二:若该字段未定义,【切勿手动添加】——默认状态下即为禁用,添加反而可能触发未知行为。
执行openclaw security audit --list-elevated,输出必须为No elevated tools configured。任何显示工具名称的输出都意味着沙箱已被绕过。










