应使用Python venv、Docker容器、RestrictedPython和subprocess四层隔离:一、venv创建独立虚拟环境;二、Docker以非root用户运行并禁用网络;三、RestrictedPython拦截危险语法;四、subprocess设超时与资源限制。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望在本地Python环境中安全执行HermesAgent生成的代码,同时避免对系统环境造成影响,则需要构建一个隔离的沙箱运行环境。以下是实现该目标的具体操作路径:
一、使用Python内置venv创建独立虚拟环境
通过venv模块可快速建立与系统Python分离的轻量级环境,确保依赖包和执行上下文完全隔离,防止代码意外修改全局安装的库或配置。
1、打开终端,进入项目根目录。
2、执行命令:python -m venv hermes_sandbox,创建名为hermes_sandbox的虚拟环境目录。
立即学习“Python免费学习笔记(深入)”;
3、激活虚拟环境:Windows下运行hermes_sandbox\Scripts\activate.bat;macOS/Linux下运行source hermes_sandbox/bin/activate。
4、在激活状态下,执行pip install --upgrade pip更新包管理器。
5、仅安装HermesAgent明确声明的依赖项,例如:pip install numpy pandas requests(依据实际agent需求调整)。
二、借助Docker构建容器化沙箱
Docker提供进程级隔离与文件系统只读控制,能有效限制代码访问宿主机路径、网络及系统调用,适用于高风险代码片段的验证。
1、编写Dockerfile,基础镜像选用python:3.11-slim以减小攻击面。
2、在Dockerfile中添加指令:COPY requirements.txt . && pip install --no-cache-dir -r requirements.txt,仅安装最小必要依赖。
3、设置工作目录为/app,并使用USER 1001切换至非root用户运行。
4、构建镜像:docker build -t hermes-sandbox .
5、运行容器时挂载代码文件为只读卷,并禁用网络:docker run --rm -v $(pwd)/code.py:/app/code.py:ro --network none -w /app hermes-sandbox python code.py。
三、启用RestrictedPython进行语法级沙箱控制
RestrictedPython是一个专用于代码求值安全的库,它在AST解析阶段拦截危险操作(如import、exec、open等),适合嵌入式代码解释器场景。
1、在虚拟环境中安装:pip install RestrictedPython。
2、定义白名单函数,例如允许使用的内置函数:allowed_builtins = {"len", "range", "print", "int", "float", "str"}。
3、编写执行封装函数,调用compile_restricted编译源码,并传入自定义
4、捕获编译异常,若检测到非法节点(如Import、Call含危险函数名),立即终止并返回错误提示。
5、执行编译后的代码对象时,确保全局命名空间仅包含预设变量与白名单函数,不继承__builtins__。
四、利用subprocess配合timeout与resource限制运行子进程
通过操作系统级子进程启动,结合超时机制与资源配额,可强制中断长时间运行或内存溢出的代码,防止沙箱失控。
1、在主程序中构造subprocess.Popen调用,指定python -c "exec(compile(...))"方式执行代码字符串。
2、设置参数timeout=30,超过30秒自动终止进程。
3、Linux下使用prlimit --as=1073741824 --cpu=10限制地址空间为1GB、CPU时间为10秒后再调用Python。
4、捕获subprocess.TimeoutExpired异常,并调用proc.kill()确保进程彻底退出。
5、检查返回码与stderr输出,若出现MemoryError或Killed字样,判定为资源越界行为。


















