工作环境/沙箱
沙箱
更新于: 2026-06-11 20:03:42
沙箱为智能体生成的命令提供受限的执行环境,确保智能体在安全隔离的环境中运行命令,防止未经授权的文件访问。
提示
启用沙箱后,TRAE 的文件目录访问权限如下:
|
权限类型 |
目录类型 |
目录列表 |
|---|---|---|
|
只读 |
项目目录中的受保护目录 |
|
|
根目录 |
|
|
|
读写 |
项目目录 |
除 |
|
临时目录 |
|
|
|
缓存目录 |
|
|
|
通用工具依赖目录 |
|
|
|
常用语言的工具链及其依赖目录 |
Go、Java、Python、Node.js、Rust 和 C++ 等常用语言的工具链及其依赖目录。 |
使用沙箱前,需要根据你所使用的操作系统,完成相应的环境配置。
基于 macOS 的 sandbox-exec 工具,TRAE 会自动为你创建一个受限的命令执行环境。你无需进行任何额外配置。
基于自研的沙箱 SDK,TRAE 会自动为你创建一个受限的命令执行环境。你无需进行任何额外配置。
沙箱功能需通过 WSL 2 / Remote SSH 和 Bubblewrap 实现。
在远程 Linux 环境中,TRAE 基于 User Namespace 构建沙箱,并在独立的 User Namespace 中结合其他 Linux Namespace,实现对多类系统资源的隔离。
在远程环境中启用沙箱时,TRAE 会自动完成以下配置:
sysctl -w kernel.unprivileged_userns_clone=1 # 允许非特权用户(普通用户)创建 User Namespace
sysctl -w kernel.apparmor_restrict_unprivileged_userns=0 # 关闭 AppArmor 对 “非特权 User Namespace” 的额外限制
/etc/sysctl.d/trae-sandbox.conf 文件。
kernel.unprivileged_userns_clone=1
kernel.apparmor_restrict_unprivileged_userns=0
在 TRAE 中启用沙箱后,智能体将自动在沙箱中运行命令。启用沙箱的步骤如下:
通过 sandbox.json 文件,你可以为当前项目自定义沙箱内进程的文件和网络访问范围。
%USERPROFILE%\.trae-cn\sandbox.json~/.trae-cn/sandbox.jsonsandbox.json 文件,并在编辑器内打开它。{
"filesystem": {
"readWrite": [],
"readOnly": []
},
"network": {
"default": "allow",
"allow": [],
"deny": []
}
}
sandbox.json 文件中,填入你的自定义沙箱配置。filesystem 字段用于精细控制沙箱对本地文件系统的访问权限。
|
字段 |
类型 |
默认值 |
描述 |
|---|---|---|---|
|
|
|
|
读写路径列表。沙箱内进程对列表中的路径拥有读写权限(继承自当前用户)。 |
|
|
|
|
只读路径列表。沙箱内进程对列表中的路径仅有只读权限。 |
支持的路径格式:
/usr/local/bin 或 C:\Program Files;~ 表示用户主目录,如 ~/Documents;$VAR 引用环境变量,如 $HOME/.config;$WORKSPACE_FOLDER 引用当前工作区目录。针对各个操作系统的注意事项:
/usr/lib),并将 Git Bash 风格的路径(如 /c/Users)转换为标准 Windows 路径(如 C:\Users)。C:\Users)。路径匹配规则:
系统会合并你的自定义配置和系统内置的文档访问控制策略,并根据以下优先级规则确定最终生效的权限:
readWrite 和 readOnly 列表,readOnly 的优先级高于 readWrite。readWrite 和 readOnly 列表,则对其采用上文安全策略:文件访问控制中的规则。提示
仅 Windows 操作系统支持此功能。
network 字段用于管理沙箱内进程的网络请求策略,实现允许或阻止对特定网络的访问。
可配置的字段如下:
|
字段 |
类型 |
默认值 |
描述 |
|---|---|---|---|
|
|
|
|
默认的网络访问策略。可选值:
|
|
|
|
|
允许访问的网络。 |
|
|
|
|
禁止访问的网络。 |
网络目标的匹配规则如下:
allow 和 deny 列表,deny 的优先级高于 allow。allow 和 deny 列表,则对其采用 default 中设置的默认访问策略。支持的网络地址写法如下:
|
格式 |
含义 |
示例 |
|---|---|---|
|
|
单个 IP(所有端口) |
|
|
|
CIDR 子网(所有端口) |
|
|
|
CIDR 子网(所有端口) |
|
|
|
单个 IP:单个端口 |
|
|
|
单个 IP:多个端口 |
|
|
|
CIDR 子网:单个端口 |
|
|
|
域名(所有端口) |
|
|
|
域名:单个端口 |
|
|
|
通配符域名(所有端口) |
|
|
|
通配符域名:单个端口 |
|
示例 1: 仅允许访问 GitHub
此配置将禁止所有网络请求,仅放行对 GitHub (HTTPS) 的访问,避免 AI 泄露敏感信息。
{
"network": {
"default": "deny",
"allow": ["*.github.com:443"],
"deny": []
}
}
示例 2:禁止访问内部网络
此配置将放行所有网络请求,但明确禁止访问常见的内网地址段,防止 AI 访问或攻击内网服务。
{
"network": {
"default": "allow",
"allow": [],
"deny": [
"[10.0.0.0/8]",
"[172.16.0.0/12]",
"[192.168.0.0/16]"
]
}
}
启用沙箱后,系统将根据命令是否在白名单内,决定其执行方式:
为了防范系统风险,当智能体生成 rm -rf 等高风险命令时,系统会拦截该操作并向你弹出提示。你可以选择: