README
¶
sandbox
项目概述
sandbox 是一个基于 Go 语言开发的轻量级沙箱环境,用于安全地执行代码,支持 Python 和 Node.js 等运行时。该项目主要用于低代码框架的测试和验证,提供了网络访问控制、资源限制等安全特性。
功能特点
- 多语言支持:内置支持 Python 和 Node.js 运行时,其他运行时可以通过 RegisterRuntime 注册。
- 网络控制:
- 支持允许/阻止互联网访问
- 支持允许特定端口监听
- 支持 IP 白名单和黑名单
- 资源限制:
- CPU 使用率限制
- 内存使用限制
- SWAP 限制
- /dev/shm 和 /tmp 大小限制
- 环境配置:支持自定义环境变量
- 安全隔离:提供安全的执行环境,防止恶意代码影响系统
- 跨平台支持:支持 Linux 和 macOS 操作系统
- 状态管理:支持沙箱状态持久化和恢复
项目架构
核心代码结构
sandbox/
├── plugin.go # 插件入口,注册 sandbox 模块到 gojs 框架
├── sandbox.go # 定义沙箱的核心结构和配置
├── master.go # 管理沙箱的生命周期和状态
├── runtime.go # 运行时管理
├── sandbox_linux.go # Linux 平台实现
├── sandbox_darwin.go # macOS 平台实现
├── pythonRuntime.go # Python 运行时实现
├── nodejsRuntime.go # Node.js 运行时实现
├── util.go # 工具函数
├── base_test.js # 测试入口文件
├── testcase/ # 测试用例目录
│ ├── base_allow.py # 允许模式测试
│ ├── base_deny.py # 拒绝模式测试
│ ├── secret.py # 敏感信息测试
│ └── base_allow.js # Node.js 环境测试
└── README.md # 项目说明文档
核心组件
-
Plugin 模块:
- 注册 sandbox 模块到 gojs 框架
- 提供 Start、Fetch、Query 等 API 接口
- 管理沙箱的启动和恢复
-
Sandbox 核心:
- 定义沙箱的配置结构(Config)
- 管理沙箱的状态和生命周期
- 提供资源限制和网络控制功能
-
运行时管理:
- 支持 Python 和 Node.js 运行时
- 处理不同运行时的启动和配置
-
平台适配:
- Linux 平台实现(sandbox_linux.go)
- macOS 平台实现(sandbox_darwin.go)
技术实现
沙箱隔离机制
- 文件系统隔离:使用挂载点和只读挂载
- 网络隔离:通过 namespace 机制控制网络访问