ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Hermes Agent 容器部署安全指南:从镜像加固到运行时防线的 4 个检查点

Hermes Agent 容器部署安全指南:从镜像加固到运行时防线的 4 个检查点 Hermes Agent 容器部署安全指南从镜像加固到运行时防线的 4 个检查点【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agentHermes Agent 容器部署的安全重点不在进程内部。本文带你读它的 Dockerfile 和 agent/file_safety.py搞清镜像怎么加固、运行时怎么限制 Agent 的写权限并给你一套可逐项打勾的检查清单。先回答一个问题为什么 AI Agent 的容器比普通应用的容器更值得加固Agent 会执行 LLM 生成的 shell 命令而不是运行一段固定业务逻辑Hermes Agent 自己的 SECURITY.md 也明说对恶意模型输入而言唯一的硬边界是操作系统隔离进程内的审批门、输出脱敏都只是启发式不算防线所以你的目标是容器逃逸难、镜像不可变、Agent 能写的位置被限制到最小。下面按镜像 → 运行时 → 上线检查的顺序展开。1. 镜像加固读 Dockerfile 的 3 个信号根目录 Dockerfile 是 Hermes Agent 官方镜像的构建入口。判断一个 AI Agent 镜像靠不靠谱重点看三个信号。1.1 所有外部构件都过 SHA256 校验Dockerfile 里下载的任何第三方构件——无论是自己编译的 SQLite 3.53.4修 Debian 13 自带版本的 WAL 损坏 bug还是 s6-overlay 进程监督层三个 tarball 分别对应 noarch、当前架构、符号链接——都在解压前执行sha256sum -c校验而且校验失败直接让构建失败。这意味着你拿到的镜像里的每个外部构件都可回溯到固定版本不存在构建时悄悄拉了最新版的灰区。1.2 基础镜像钉死版本依赖按 lock 文件冻结运行时基础镜像是debian:13.4构建阶段分别用钉死版本的 uv 镜像和node:26-bookworm-slim镜像都带sha256:摘要Python 依赖用uv sync --frozen按uv.lock精确安装且只装生产需要的 extra刻意排除了 dev 和 RL 相关的重型依赖。更新基础镜像是一行的事改 FROM 行即可但每次更新都应当重新确认校验和而不是顺手升级。1.3 构建产物尽量只读源码层用COPY --link --chmodarX,go-w一次性把权限烤死非 root 用户只有读和执行权限。配合PYTHONDONTWRITEBYTECODE1和HERMES_DISABLE_LAZY_INSTALLS1运行时的 Agent 进程无法改写自己的安装目录——镜像不可变不是口号是构建时定下的权限位。2. 运行时防线非 root、进程降权与写路径围栏镜像解决装的东西可信运行时解决跑起来的东西越不了界。这部分有三层。2.1 容器默认以非特权用户运行Dockerfile 第 150 行创建 UID 10000 的hermes用户数据目录是/opt/data唯一的VOLUME。各服务通过s6-setuidgid hermes从 root 降到该用户再启动宿主机想固定映射到某个 UID 时用启动参数覆盖即可docker run -e HERMES_UID1000 \ -e HERMES_GID1000 \ -v hermes-data:/opt/data \ ghcr.io/nousresearch/hermes-agent⚠️ 如果你经常用docker exec 容器 hermes ...进容器排查问题不用担心里面落下的文件会因 root 属主而不可读——镜像内置了一个 exec shimroot 调用会自动经s6-setuidgid降回hermes用户再执行用HERMES_DOCKER_EXEC_AS_ROOT1可显式关闭这个行为。2.2 写入围栏HERMES_WRITE_SAFE_ROOT比换用户更关键的是写路径限制。Hermes Agent 通过HERMES_WRITE_SAFE_ROOT环境变量声明Agent 允许写哪些目录官方镜像里它指向/opt/data实现逻辑在 agent/file_safety.py落在围栏外的写操作会直接被拒报错形如write denied: path is outside HERMES_WRITE_SAFE_ROOT。# 官方镜像中的两个关键 ENV见 Dockerfile ENV HERMES_HOME/opt/data ENV HERMES_WRITE_SAFE_ROOT/opt/data这条围栏的意义在于即使 Agent 被诱导执行了往系统目录写文件的指令写文件工具也到不了围栏之外。你自定义部署时建议把HERMES_WRITE_SAFE_ROOT收窄到你真正要挂载的那一两个数据卷而不是整个可写盘。2.3 进程监督谁在 PID 1镜像用 s6-overlay 的/init替代了早期的 tini 方案PID 1 负责回收僵尸进程MCP 子进程、git 等孤儿进程同时监督主 hermes 进程、dashboard 和每个 profile 的 gateway。入口是一个调度脚本——如果平台把自己的 init 放在最外层如 Fly Machines、docker run --init它会检测到不是 PID 1 并走降级路径而不是直接报错退出。3. 上线前给你的部署打一份 4 项检查清单把你实际跑的环境和下面四项逐条对照构件可回溯镜像里的 SQLite、s6-overlay、Node 是否都能对应到固定版本 校验和看构建日志里的sha256sum -c输出用户正确docker exec 容器 id应显示uid10000(hermes)而不是 root围栏生效在容器内让 Agent 写一个围栏外的路径确认拿到的是 denied 报错而不是成功懒装受控确认HERMES_DISABLE_LAZY_INSTALLS1仍生效防止运行时向只读 venv 偷偷装包失败后留下的脏状态。 下一步动作现在打开你的 Dockerfile找到ENV HERMES_WRITE_SAFE_ROOT那一行确认它的值只包含你打算挂载的数据卷路径——如果指向了比这更宽的路径今天就改掉。【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表