Home
avatar

麒麟剑

别把家门钥匙交出去:八层安全防护与企业级加固

前面三节我们把 Agent 接进群、组了队、连了 GitHub 和数据库。能力越强,风险越大——一个能 rm -rf、能调生产库、能发微信的 Agent,要是授权和隔离没做对,就不是”数字员工”而是”数字炸弹”。

先纠正一个流传甚广的错误:Hermes 不是”六层防御”,官方文档明确是八层(eight layers)。而且 Bitwarden 凭据管理和 iron-proxy 出口防火墙是独立子系统,不在 security 主页面,容易被漏掉。本节一次讲全。

一、八层防御(记牢这个顺序)

Hermes 运行时健康面板:状态、日志与升级回滚入口 ▲ Hermes 运行时健康面板:状态、日志与升级回滚入口

┌─────────────────────────────────────────────┐
│ 1. User authorization      用户授权(白名单/配对)│
│ 2. Dangerous command approval  危险命令审批     │
│ 3. File write safety      文件写入安全          │
│ 4. Container isolation    容器隔离              │
│ 5. MCP credential filtering  MCP 凭据过滤       │
│ 6. Context file scanning  上下文文件扫描(注入检测)│
│ 7. Cross-session isolation 跨会话隔离           │
│ 8. Input sanitization     输入净化(工作目录白名单)│
└─────────────────────────────────────────────┘

每一层都补前一层的漏。下面挑最该动手的几层说。

二、命令审批:别让 Agent 删库跑路

approvals:
  mode: smart            # smart | manual | off
  timeout: 300
  cron_mode: deny        # deny | approve
  single_query_mode: deny
  mcp_reload_confirm: true
  destructive_slash_confirm: true
  deny:                  # 用户拒绝规则(fnmatch glob,先于 yolo 生效)
    - "git push --force*"
    - "*curl*|*sh*"
  • smart(默认):辅助 LLM 评估风险,该拦的拦。
  • manual:危险命令提示你确认。
  • off / --yolo:禁用审批,只在绝对可信的隔离环境用。

硬线阻止列表(永远阻止,yolo 也救不了)

  • rm -rf / 及变体
  • fork bomb(:(){ :|:& };:
  • dd if=/dev/zero of=/dev/sd*
  • 把未信任 URL 管道给 sh

也就是说,即使你开了 YOLO,这几条红线也踩不动。审批历史可挖:hermes approvals suggest --apply 1,3

⚠️ 别迷信 YOLO。它只是跳过”确认弹窗”,硬线列表照拦,但很多中等风险操作(比如改生产配置)YOLO 下不会拦——这类要靠 deny 规则补。

三、用户授权检查顺序

谁能让 Agent 干活,按这个顺序判定:

平台 allow-all
   → DM pairing(配对)
   → 平台 allowlist(如 FEISHU_ALLOWED_USERS)
   → 全局 GATEWAY_ALLOWED_USERS
   → 全局 allow-all
   → 默认拒绝

给个 env 示例:

TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=111222333444555666
GATEWAY_ALLOWED_USERS=123456789
# GATEWAY_ALLOW_ALL_USERS=true  # 极端谨慎,切勿与有终端权限的 bot 同开

DM 配对命令:hermes pairing approve telegram ABC12DEF(revoke / list / clear-pending)。

⚠️ GATEWAY_ALLOW_ALL_USERS=true 是核武器,一旦和带终端权限的 bot 同开,等于把 shell 向全网开放。永远别这么干。

四、容器隔离:把 Agent 关进沙箱

容器类后端(docker/singularity/modal/daytona/vercel_sandbox)会跳过危险命令审批——因为容器本身就是安全边界。要这么配:

# Docker 安全标志(tools/environments/docker.py)
--cap-drop ALL --cap-add DAC_OVERRIDE,CHOWN,FOWNER
--security-opt no-new-privileges --pids-limit 256
--tmpfs /tmp:rw,nosuid,size=512m --tmpfs /var/tmp:rw,noexec,nosuid,size=256m
terminal:
  backend: docker
  docker_image: "nikolaik/python-nodejs:python3.11-nodejs20"
  container_cpu: 1
  container_memory: 5120     # MB
  container_disk: 51200      # MB
  container_persistent: true

⚠️ 容器后端跳过审批 ≠ 可以放松镜像管理。务必锁定镜像版本,别用 latest 漂着,否则沙箱边界可能被人利用。

五、Bitwarden 凭据管理(hermes secrets)

API key 别散落在 .env 明文里。用 Bitwarden 集中管:

secrets:
  sources: [bitwarden]
  bitwarden:
    enabled: true
    project_id: "..."
  preserve_existing: [FEISHU_APP_SECRET, TELEGRAM_BOT_TOKEN]  # 即使 override 也保留
  • bootstrap token(BWS_ACCESS_TOKEN)存本地 .env真实密钥留 Bitwarden
  • bws CLI 懒安装;注入的凭据会标 (from Bitwarden)
  • 还支持 1Password(op://)、任意 command helper(keepassxc-cli / pass / 自定义脚本输出 KEY=VALUE)。

六、iron-proxy 出口防火墙(hermes egress)

远程终端沙箱里,Agent 要调外部 API,但不能把真实 key 带进去。iron-proxy 是单二进制 TLS 拦截代理(ironsh/iron-proxy),由 hermes egress 管理:

hermes egress install [--force]
hermes egress setup [--tunnel-port N] [--from-bitwarden|--no-bitwarden] [--rotate-tokens]
hermes egress start|stop|restart|reload|status|disable|config

核心保证:沙箱只持不透明代理令牌,真实 API key 永不离开主机。这点和 Bitwarden 思路一致——密钥集中、边缘只给令牌。

七、个人 vs 生产加固建议

场景做法
个人/开发local 后端 + approvals.mode: smart避免 off/--yolo
生产显式 allowlist(禁 GATEWAY_ALLOW_ALL_USERS);容器后端 + CPU/内存/磁盘限制
生产.envchmod 600;启用 DM 配对;非 root 运行;监控 ~/.hermes/logs/;定期 hermes update

八、避坑提示

⚠️ “六层”是过时说法,记住是八层。 写方案、跟团队对齐时用官方口径,别被旧文章带偏。

⚠️ Bitwarden / iron-proxy 不在 security 主页。 很多人配完八层就以为齐了,结果密钥还明文躺 .env。这两块单独用 hermes secrets / hermes egress 管。

⚠️ 容器后端跳过审批,必须有镜像锁 + 资源限制兜底。 否则沙箱成了无监管的执行环境。

⚠️ DM 配对比 allow-all 安全得多。 公网暴露的网关优先用 pairing approve 逐人授权,而非放开白名单。

本节能造出什么数字员工

  • 生产级客服 Bot:显式 allowlist + 容器沙箱 + 资源限额,敢放心接外部流量。
  • 带密钥隔离的研究 Agent:Bitwarden 管 key、iron-proxy 做出口,沙箱里跑也不怕 key 泄露。
  • 多租户网关:靠授权检查顺序 + 频道级配置,安全服务多个团队。

下篇预告

(本系列第 09–12 节到此收尾。回顾:网关接入→多 Agent 编排→MCP 工具生态→八层安全。后续可从”部署运维与成本优化""OpenClaw 迁移""语音模式实战”等方向继续深挖,关注公众号不迷路。)

延伸阅读

Hermes Agent 数字员工 AI智能体 自托管 Nous Research 安全 八层防御 Bitwarden iron-proxy 容器隔离