隔离层:虚拟终端沙箱与执行环境安全边界
深度剖析 tools/environments/、本地 PTY 重定向与 Docker 卷挂载安全隔离
📊 图 9-1:标准 I/O 重定向、主机目录挂载与 Docker 容器安全沙箱边界图
💻 1. 执行环境(Environments)职责设计
在设计允许智能体运行 Shell 脚本和代码的环境时,安全性是压倒一切的前提。在项目 tools/environments/ 中,系统将执行环境进行了统一接口封装:
tools/environments/local.py:本地执行环境。基于 Unix PTY 实现伪终端重定向。tools/environments/docker.py:容器隔离沙箱。将大模型运行的所有命令局限在只读权限极高的 Docker 容器内部。
🔒 2. 本地 PTY 伪终端重定向与控制 (local.py)
如果智能体直接调用 Python 的 subprocess.Popen 去启动终端,大模型将无法实现交互(如在终端中输入确认、流式捕获 top 日志)。为此,tools/environments/local.py 实现了底层的 Unix PTY 控制:
- pty.openpty() 接口:在后台创建一个伪终端对(主设备 Master 和从设备 Slave),将标准输入、标准输出、标准错误重定向到伪终端从设备。
- 流式监听与硬超时:系统起一个后台守护线程监控 Master 的输出,将字符实时泵送给网关与 TUI 前端,同时挂载硬超时阈值。如果在限制时间内未响应,则发送
SIGKILL强制断开,彻底杜绝僵尸进程。
📊 图 9-2:主机沙箱控制器与隔离环境(PTY主从设备)双向重定向管道图
🛡️ 3. Docker 容器隔离与安全边界 (docker.py)
对于在远程部署或者高风险(如审查第三方下载的不明脚本)场景下的命令运行,本地 PTY 会严重危害主机安全。在 tools/environments/docker.py 中,系统利用 Docker 容器搭建了完全物理隔绝的沙箱防线:
- 卷目录只读挂载(Read-Only Volume Mount):
系统仅将当前 Workspace 作为只读盘挂载进 Docker,限制大模型对其执行系统文件(如
/etc、/lib)的篡改。 - Namespace 命名空间隔离:
在拉起容器时,强制启用独立的
PID、NET、IPC、UTS命名空间。容器内的大模型无权探测宿主机的任何网络和进程拓扑。 - 安全过滤机制:
容器在启动时注入严格的
security_opts安全属性,限制 Linux Capabilities(封杀大部分 root 系统调用),并且挂载 Seccomp 和 AppArmor 策略,确保沙箱固若金汤。
🔗 本章子任务深入剖析专栏
为深度掌握虚拟沙箱与 PTY 交互,推荐阅读以下子技术专题: