Linux 工具执行沙箱
配置 bwrap 或 Landlock,核对文件系统、网络、支持工具与验证边界。
Linux 工具沙箱将 CLI、模型传输、认证和会话存储保留在主机上,对支持的工具执行施加同一策略。它与运行整个 CLI 的 Docker、Podman、Seatbelt 模式不同。
启用
官方支持的 bwrap 系统路径是 /usr/bin/bwrap。在用户 ~/.qwen/settings.json(或 QWEN_HOME 选择的目录)或管理员系统设置中配置:
{
"tools": {
"executionSandbox": {
"backend": "auto",
"filesystem": "workspace-write",
"network": "closed"
}
}
}filesystem 与 network 必填;backend 默认 auto,先尝试 bwrap。filesystem 为 read-only 时禁止工作区写入,为 workspace-write 时允许规范化后的当前工作区写入。每条命令另有私有临时空间;includeDirectories 不授予写权限。
auto 仅在 bwrap 不可用、network 为 open、内核 Landlock ABI 至少 3 且其余策略可满足时回退 Landlock。可显式指定 bwrap 或 landlock。Landlock 无法实现 closed 网络或隐藏显式 masked paths,有这些要求会在执行前拒绝,不会静默丢弃限制。
策略来源
System 高于 User 高于 SystemDefaults,整套选择一个策略对象。工作区即使受信任也不能启用、关闭或修改它。值必须为字面量,未知字段、环境替换和不完整对象会被拒绝,修改需新运行时。
--bare 与 --safe-mode 保留操作者设置的隔离。系统默认、用户或系统设置文件损坏或不可读时启动失败,退出码 52;按错误指出的路径修复,原文件不会被自动清空。关联或硬链接的工作区配置损坏也要求手工修复。
bwrap 与 Landlock 的边界
bwrap 的 closed 阻止命令通常的主机/外部 IP 连接;open 共享主机网络。文件读取仍较广,不承诺隐藏主机秘密、路径名 Unix socket 或主机服务。审批与 YOLO 不会扩大文件系统或网络权限。
Landlock 报告 partial:限制路径读写和目录变更,但没有 PID/网络 namespace,也不能全面限制 chmod、chown、扩展属性和时间戳。子进程仍可看见主机进程;脱离的后代保留文件限制,但没有 bwrap 的 PID namespace 生命周期边界。
Landlock 可写设备更少,允许 /dev/null,但不能新建 bwrap 式的私有 /dev、/proc;写 /dev/full、/dev/tty 或 /dev/shm 可能失败。临时文件应使用 TMPDIR、TMP、TEMP 指向的私有空间。启动探测还要求 /usr/bin/true。
标准输入输出
已连接 socket、TTY 或字符设备是调用者传入的既有能力,closed 网络不会撤销它们。避免将不希望暴露的主机服务连接作为 stdin 传入。
主机普通文件与命名 FIFO 输入由 Linux x64/arm64 helper 转入私有只读 socket。读取 fd 0,不应重新打开 /dev/stdin 或 /proc/self/fd/0;SIGINT/SIGTERM 取消时仍排空已接受输出,关闭的输出流以 141 停止,另一有效输出继续排空。
支持范围
普通 headless CLI 和两种终端 UI 支持;ACP、qwen serve 和 Web 终端拒绝此模式。Shell、终端 !、提示 shell 插值、Monitor、Read/Write/Edit,以及受支持的同工作区进程内 Agent/Code Mode 使用该策略。
MCP/LSP、可执行 Hooks/扩展、worktree/arena 管理、外部 agent、推测执行、文件 checkpoint、自动 skill/memory 维护及未迁移工具被禁用或拒绝。还包括自定义状态命令、外部 Markdown/图片渲染器、IDE 连接、文件恢复和主机 Git diff 预览;仅会话内容的 rewind 仍可用。
/doctor、通过 /memory 打开编辑文件、通过 /skills 修改设置属于操作者的主机管理操作,不提供给模型调用。选择 Skill 只填入输入框,提交 /skill-name 当前会在准备参数前报不支持;不能因设置已保存就认为 Skill 执行或自动维护已受隔离支持。
验证
qwen sandbox
qwen sandbox --verify
qwen sandbox -- sh -c 'printf "confined command\n"'报告给出后端、强制等级、Landlock ABI、工作区、文件系统与命令网络策略。verify 检查工作区写入、主机可写文件拒绝、PID 和网络 namespace;通过表示后端可接纳,仍需普通任务验证所需工具和服务。
后端建立失败不会在主机重新执行命令。单命令入口原样传递字面参数及 stdin/stdout/stderr,交互 PTY 使用终端 !。外部 Git common-directory 与 worktree 元数据保持只读,因此 linked worktree 内的某些 Git 写操作可能被拒绝。
从旧 bwrap 迁移
移除 --sandbox bwrap、tools.sandbox: "bwrap"、QWEN_SANDBOX=bwrap、QWEN_SANDBOX_NET 和 QWEN_SANDBOX_PROXY_COMMAND,换为 executionSandbox 并从旧沙箱外的 shell 重启。继承的 SANDBOX=bwrap 会被拒绝,proxied 不是此模式的网络策略。
不要与 Docker、Podman、Seatbelt 或其他整进程沙箱标记混用。