# openeuler-intelligence-sandbox **Repository Path**: openeuler/openeuler-intelligence-sandbox ## Basic Information - **Project Name**: openeuler-intelligence-sandbox - **Description**: Code execution service for openEuler Intelligence supported multiple programming languages - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-07-29 - **Last Updated**: 2025-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: sig-intelligence ## README # EulerCopilot 代码沙箱服务 一个基于FastAPI的多语言代码执行沙箱服务,支持安全的代码执行环境,具备队列管理、多种执行器和并发控制功能。 ## 功能特性 - 🚀 **多语言支持**: Python、JavaScript、Bash - 🔒 **安全隔离**: 两级安全等级(低 -> security exec、高 -> kubernetes container) - 📊 **队列管理**: 优先级队列,按安全等级分队列 - ⚙️ **多种执行器**: SecurityExec执行器和Kubernetes容器执行器 - 🔄 **任务调度**: 基于APScheduler的自动任务处理 - 📈 **并发控制**: 可配置的并发任务限制 - 🔍 **监控接口**: 完整的状态监控和队列信息API ## 架构设计 ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ FastAPI │ │ ExecutorManager │ │ QueueManager │ │ Service │───▶│ │───▶│ │ │ │ │ │ │ - LOW Queue │ └─────────────────┘ └──────────────────┘ │ │ │ │ - HIGH Queue │ │ └─────────────────┘ ▼ ┌──────────────────────┐ │ APScheduler │ │ Task Processing │ └──────────────────────┘ │ ▼ ┌──────────────────────┐ │ Executors │ │ ┌─────────────────┐ │ │ │ ExecExecutor │ │ │ └─────────────────┘ │ │ ┌─────────────────┐ │ │ │ContainerExecutor│ │ │ └─────────────────┘ │ └──────────────────────┘ ``` ## 安装和运行 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 启动服务 ```bash cd app python start_service.py ``` 服务将在 `http://localhost:8000` 启动。 ### 3. 访问API文档 - Swagger UI: `http://localhost:8000/docs` - ReDoc: `http://localhost:8000/redoc` ## API接口 ### 提交代码执行任务 ```bash POST /execute ``` 请求示例: ```json { "code": "print('Hello, World!')", "code_type": "python", "user_info": { "user_id": "user123", "username": "张三", "permissions": ["execute"] }, "security_level": "low", "timeout_seconds": 30, "memory_limit_mb": 128, "cpu_limit": 0.5 } ``` ### 获取任务状态 ```bash GET /task/{task_id}/status ``` ### 获取任务结果 ```bash GET /task/{task_id}/result ``` ### 取消任务 ```bash DELETE /task/{task_id} ``` ### 监控接口 - `GET /health` - 健康检查 - `GET /queues/info` - 队列信息 - `GET /executors/status` - 执行器状态 - `GET /system/status` - 系统整体状态 ## 安全等级说明 ### LOW (低安全等级) - 使用本地安全加固的exec执行器 - 最大并发:10个任务 - 适用场景:相对受信任的用户代码 ### HIGH (高安全等级) - 使用完全隔离的容器执行器 - 最大并发:3个任务 - 适用场景:不受信任的用户代码 ## 配置说明 ### 执行器配置 可以通过修改 `executor_manager.py` 中的 `default_configs` 来调整各安全等级的配置: ```python self.default_configs = { SecurityLevel.LOW: ExecutorConfig( max_concurrent_tasks=10, default_timeout=30, resource_limits={"memory": "512Mi", "cpu": "1"} ), # ... } ``` ### Kubernetes配置 如果需要使用Kubernetes容器执行器,请在 `service.py` 中配置 `k8s_config`: ```python k8s_config = { "namespace": "code-sandbox", "api_server": "https://your-k8s-api-server", "token": "your-service-account-token", "ca_cert": "/path/to/ca.crt" } ``` ## 开发和扩展 ### 添加新的代码类型 1. 在 `entities.py` 中的 `CodeType` 枚举添加新类型 2. 在相应执行器中添加支持配置 3. 更新容器镜像映射 ### 创建自定义执行器 继承 `BaseExecutor` 类并实现抽象方法: ```python class CustomExecutor(BaseExecutor): async def prepare_environment(self, request): # 实现环境准备逻辑 pass async def apply_security_constraints(self, request, env_info): # 实现安全约束逻辑 pass async def execute_code(self, request, env_info, security_config): # 实现代码执行逻辑 pass async def cleanup_environment(self, env_info): # 实现环境清理逻辑 pass ``` ## 监控和日志 服务使用Python标准logging模块,日志级别默认为INFO。可以通过修改 `service.py` 中的日志配置来调整: ```python logging.basicConfig( level=logging.DEBUG, # 调整日志级别 format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) ``` ## 测试 ### 运行测试任务 ```bash curl -X POST "http://localhost:8000/debug/submit-test-task?security_level=low" ``` ### 单元测试 ```bash pytest tests/ ``` ## 生产部署建议 1. **使用HTTPS**: 在生产环境中启用SSL/TLS 2. **限制CORS**: 配置具体的允许域名 3. **监控**: 集成Prometheus、Grafana等监控工具 4. **日志**: 使用结构化日志和日志聚合工具 5. **容器化**: 使用Docker进行容器化部署 6. **负载均衡**: 在多实例前使用负载均衡器 7. **持久化**: 考虑将任务结果持久化到数据库 ## 安全加固设计 ### 1. 代码级别安全控制 #### Python 安全包装器 - **模块导入限制**:禁用危险模块(os, sys, subprocess, socket, urllib等) - **内置函数限制**:禁用 exec(), eval(), compile(), open() 等危险函数 - **自定义 __import__**:拦截并阻止危险模块的导入 - **文件操作禁用**:完全禁用文件读写操作 #### JavaScript 安全包装器 - **require() 禁用**:阻止Node.js模块导入 - **process对象移除**:禁用进程控制相关功能 - **全局对象清理**:移除危险的全局变量和函数 - **eval禁用**:阻止动态代码执行 #### Bash 命令过滤 - **危险命令黑名单**:自动替换rm, wget, curl, ssh等危险命令 - **命令执行限制**:只允许基本的输出和计算命令 ### 2. 系统级别资源限制 #### 内存限制 - **最大内存**:64MB(可配置) - **内存炸弹防护**:防止恶意代码消耗大量内存 #### CPU限制 - **执行时间**:最大10秒硬限制 - **CPU核心数**:限制可使用的CPU资源 - **无限循环防护**:自动终止长时间运行的进程 #### 文件系统限制 - **文件大小**:单个文件最大1MB - **文件描述符**:限制可打开的文件数量 - **临时目录隔离**:每个任务使用独立的临时目录 ### 3. 进程隔离与控制 #### 进程管理 - **新进程组**:每个任务创建独立的进程组 - **进程数量限制**:最多允许1个子进程 - **会话隔离**:创建新的会话防止影响主进程 #### 权限控制 - **环境变量清理**:只保留安全的环境变量 - **工作目录隔离**:限制在临时工作目录内 - **PATH限制**:只允许访问基本的系统命令 ### 4. 网络隔离(可选) #### iptables规则(需要root权限) - **出站连接阻止**:禁用所有网络连接 - **端口扫描防护**:阻止端口探测行为 - **DNS请求限制**:防止DNS泄漏 ### 5. 测试策略 #### 🔴 恶意代码(应被阻止) - **文件系统攻击**:读取/etc/passwd、写入恶意文件 - **网络攻击**:HTTP请求、Socket连接 - **系统命令执行**:os.system()、subprocess调用 - **模块导入攻击**:导入危险模块 - **资源耗尽攻击**:内存炸弹、无限循环 - **代码注入**:eval()、exec()执行 #### ✅ 正常代码(应正常执行) - **基本计算**:数学运算、字符串处理 - **控制流**:条件判断、循环 - **数据结构**:列表、字典操作 - **输出功能**:print()、console.log() ### 预期安全等级 - **🟢 优秀**:阻止率 ≥ 95%,误杀率 ≤ 10% - **🟡 良好**:阻止率 ≥ 80%,误杀率 ≤ 20% - **🟠 中等**:阻止率 ≥ 60%,误杀率 ≤ 30% - **🔴 危险**:阻止率 < 60% 或误杀率 > 30% ## 故障排除 ### 常见问题 1. **任务执行超时** - 检查超时配置 - 查看资源使用情况 2. **容器执行器无法使用** - 检查Kubernetes配置 - 验证服务账户权限 3. **队列积压** - 调整并发配置 - 检查执行器状态 ### 日志查看 重要的日志信息会输出到控制台,包括: - 任务提交和完成状态 - 执行器启动和配置信息 - 错误和异常信息 ## 许可证 本项目采用MulanPSL2许可证。