Environments & Isolation

隔离层:虚拟终端沙箱与执行环境安全边界

深度剖析 tools/environments/、本地 PTY 重定向与 Docker 卷挂载安全隔离
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 强制断开,彻底杜绝僵尸进程。
终端流PTY双向管道
📊 图 9-2:主机沙箱控制器与隔离环境(PTY主从设备)双向重定向管道图

🛡️ 3. Docker 容器隔离与安全边界 (docker.py)

对于在远程部署或者高风险(如审查第三方下载的不明脚本)场景下的命令运行,本地 PTY 会严重危害主机安全。在 tools/environments/docker.py 中,系统利用 Docker 容器搭建了完全物理隔绝的沙箱防线:

  1. 卷目录只读挂载(Read-Only Volume Mount): 系统仅将当前 Workspace 作为只读盘挂载进 Docker,限制大模型对其执行系统文件(如 /etc/lib)的篡改。
  2. Namespace 命名空间隔离: 在拉起容器时,强制启用独立的 PIDNETIPCUTS 命名空间。容器内的大模型无权探测宿主机的任何网络和进程拓扑。
  3. 安全过滤机制: 容器在启动时注入严格的 security_opts 安全属性,限制 Linux Capabilities(封杀大部分 root 系统调用),并且挂载 Seccomp 和 AppArmor 策略,确保沙箱固若金汤。

🔗 本章子任务深入剖析专栏

为深度掌握虚拟沙箱与 PTY 交互,推荐阅读以下子技术专题: