尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Hermes Agent 容器安全加固指南:镜像与沙箱防护一次配齐

Hermes Agent 容器安全加固指南:镜像与沙箱防护一次配齐 Hermes Agent 容器安全加固指南镜像与沙箱防护一次配齐【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agentHermes Agent 是一个会自己跑 shell 命令、装依赖、操作文件的 AI 代理把它装进容器部署时你防的不是普通 web 服务而是一个会自主执行命令的进程。读完这篇你能带走两套现成的加固做法官方镜像是怎么锁死的工具执行沙箱的资源上限该怎么配。AI 代理会自己跑命令容器里要防什么先说清楚威胁模型。Hermes 支持从 Telegram、Discord 等渠道远程对话还有内置 cron 定时任务——也就是说它大量时间是无人值守在跑命令npm install、git clone、建 venv、跑脚本。这种场景下容器要防的事很具体进程提权从容器用户逃逸到 root 甚至宿主机运行时代码写坏自己的安装树比如往只该读的 venv 里塞包把整个 agent 搞挂一个死循环或大任务把 CPU、内存、磁盘吃满拖垮同宿主机邻居docker exec随手进去一条命令留下 root 属主的配置文件监督进程读不了官方镜像在 Dockerfile 里逐条回应了这些问题工具执行的沙箱则在配置层给了默认资源上限。下面照着拆。读懂官方镜像的加固手法基础镜像用 digest 钉死下载件逐个校验Dockerfile 里三个阶段的基础镜像全部带 sha256 digest不依赖 tag 可变性FROM debian:13.4 FROM ghcr.io/astral-sh/uv:0.11.6-python3.13-trixiesha256:b3c543b6... AS uv_source FROM node:26-bookworm-slimsha256:9e6f9357... AS node_source FROM debian:13.4 # ... 其余省略 ARG S6_OVERLAY_X86_64_SHA256a93f02882c... RUN sha256sum -c /tmp/s6-overlay.sha256构建期所有curl下载的 tarballs6-overlay 等都先过sha256sum -c再解压。这相当于给供应链上了两道锁tag 被篡改不影响你下载中途被投毒也会在构建期报错。锁死安装树只留数据卷可写镜像把不可变做到了权限位上而不只是文档约定RUN useradd -u 10000 -m -d /opt/data hermes COPY --link --chmodarX,go-w . . # /opt/hermes 归 roothermes 用户只有读穿越权限 ENV HERMES_HOME/opt/data ENV HERMES_WRITE_SAFE_ROOT/opt/data ENV HERMES_LAZY_INSTALL_TARGET/opt/data/lazy-packages VOLUME [ /opt/data ]/opt/hermes安装树对非 root 只读运行时的可写状态全部收敛到/opt/data数据卷。连运行时懒安装第三方 SDK这种需求也被引导到数据卷上的lazy-packages目录且该目录挂在sys.path末尾——只能新增模块不可能影子掉核心模块。别用 root 跑exec 进去也降权容器内各服务经s6-setuidgid hermes落到 UID 10000 的普通用户。更细节的坑是docker exec运维进去默认是 root随便写一个config.yaml就变成 root 属主监督进程直接读不了。镜像里放了个降权 shim/opt/hermes/bin/hermesroot 调用时透明地 re-exec 回 hermes 用户属主污染这条路径被堵死。给沙箱设上限工具执行容器的资源限制镜像管的是 Hermes 自己跑在哪还有一半是 Hermes 派工具去跑在哪。当环境类型是 docker、singularity、modal、daytona 等容器类时agent/prompt_builder.py 会为工具执行容器组装一份带默认值的限制配置container_config { container_cpu: config.get(container_cpu, 1), # 1 核 container_memory: config.get(container_memory, 5120), # MB默认 5GB container_disk: config.get(container_disk, 51200), # MB默认 50GB container_persistent: config.get(container_persistent, True), }这四个值覆盖了最典型的 DoS 路径单容器烧满 CPU、内存膨胀、磁盘写爆。如果你的宿主机会同时跑多个 agent 沙箱建议把container_disk调低50GB 的默认值对生产集群偏宽。运行时参数走配置追加不改代码容器启动的额外参数不写死全部从配置透传# ... 其余省略 docker_extra_args: config.get(docker_extra_args, []), docker_shm_size: config.get(docker_shm_size, 1g), docker_persist_across_processes: config.get(docker_persist_across_processes, True), docker_orphan_reaper: config.get(docker_orphan_reaper, True),docker_extra_args就是给你追加--security-opt no-new-privileges、--cap-drop这类参数的口子——官方默认值管通用底线环境特有的加固在这里叠加不用 fork 代码。docker_orphan_reaper保持开启避免 MCP 子进程留下的僵尸进程慢慢堆积。上线前对照打勾容器安全清单 基础镜像按 digest 固定构建脚本对下载物执行sha256sum -c容器以非 root 用户运行官方为 UID 10000 的 hermes 用户安装树只读可写区域仅限数据卷/opt/data懒安装目标重定向到数据卷不碰安装树内的 venvdocker exec走降权 shim不留 root 属主文件沙箱 CPU / 内存 / 磁盘上限按宿主机配额核过container_disk别用 50GB 默认值硬扛非必需场景关闭container_persistentdocker_extra_args里追加的每个参数都有人认领--shm-size、orphan reaper 保持默认基础镜像 digest 有定期更新与复测流程容器安全对 AI 代理来说不是可选项代理的命令面越宽镜像加固和资源上限这两道闸就越关键。把上面的清单过一遍然后动手拉代码验证一遍配置git clone https://gitcode.com/GitHub_Trending/he/hermes-agent【免费下载链接】hermes-agentThe agent that grows with you项目地址: https://gitcode.com/GitHub_Trending/he/hermes-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表