概述
Hawa Code 提供原生沙箱功能,为 Agent 执行提供更安全的环境,同时减少频繁的权限提示。沙箱机制预先定义边界,让 Hawa Code 能够在降低风险的前提下更自由地工作,而无需为每个 bash 命令请求权限。
沙箱化的 bash 工具使用操作系统级别的原语来强制执行文件系统和网络隔离。
工作原理
文件系统隔离
沙箱化的 bash 工具将文件系统访问限制在特定目录:
- 默认写入行为:对当前工作目录及其子目录具有读写权限
- 默认读取行为:可以读取整个计算机,但某些目录除外
- 阻止访问:未经明确许可无法修改当前工作目录之外的文件
- 可配置:通过设置定义自定义的允许和拒绝路径
你可以使用设置中的 sandbox.filesystem.allowWrite 授予对额外路径的写入权限。这些限制在操作系统级别强制执行(macOS 上使用 Seatbelt,Linux 上使用 bubblewrap),因此它们适用于所有子进程命令,包括 kubectl、terraform 和 npm 等工具,而不仅仅是 Hawa Code 的文件工具。
网络隔离
网络访问通过运行在沙箱外部的代理服务器进行控制:
- 域名限制:只能访问已批准的域名
- 用户确认:新的域名请求会触发权限提示(除非启用了
allowManagedDomainsOnly,它会自动阻止非允许的域名) - 自定义代理支持:高级用户可以对外出流量实施自定义规则
- 全面覆盖:限制适用于命令生成的所有脚本、程序和子进程
操作系统级强制执行
沙箱化的 bash 工具利用操作系统安全原语:
- macOS:使用 Seatbelt 进行沙箱强制执行
- Linux:使用 bubblewrap 进行隔离
- WSL2:使用 bubblewrap,与 Linux 相同
WSL1 不受支持,因为 bubblewrap 需要仅在 WSL2 中可用的内核功能。
这些操作系统级限制确保 Hawa Code 命令生成的所有子进程都继承相同的安全边界。
开始使用
前置条件
在 macOS 上,沙箱功能开箱即用,使用内置的 Seatbelt 框架。
在 Linux 和 WSL2 上,需要先安装必需的软件包:
Ubuntu/Debian
sudo apt-get install bubblewrap socat |
Fedora
sudo dnf install bubblewrap socat |
启用沙箱
你可以通过运行 /sandbox 命令来启用沙箱:
/sandbox |
这将打开一个菜单,你可以在其中选择沙箱模式。如果缺少必需的依赖项(例如 Linux 上的 bubblewrap 或 socat),菜单将显示适用于你平台的安装说明。