2026 年 Hermes Agent Mac 版安全配置最完整指南
安全指南 2026-05-23

2026 年 Hermes Agent Mac 版安全配置最完整指南:权限、密钥和文件边界怎么设?

Hermes Agent 能读文件、跑命令、调 API——安装完成后真正决定能否长期放心使用的,不是模型多强,而是权限边界。本文给出一套 Mac 版安全 baseline:最小目录、最小密钥、最小命令集,再按需扩权。

2026 年在 Mac 上安装 Hermes Agent,很多人第一步就错了:模型连上、Gateway 跑起来,就把整台机器交给了 agent。官方文档写得很清楚——对抗恶意 LLM 行为的唯一硬边界是操作系统。Hermes 提供了命令审批、容器隔离、Gateway 白名单等多层防护,但这些都是「在 OS 边界之上的纵深防御」,不能替代你自己划定的文件与密钥范围。

先行结论:Hermes Agent 不应默认获得整个用户目录和所有命令权限。先用最小工作目录、最小密钥集、approvals.mode: manual 跑通一条任务,再逐步扩权。下面按「安装后 30 分钟内就该做完」的顺序展开。

1. 为什么安装后要先设边界

Hermes 默认 terminal.backend: local,命令直接在 Mac 上以当前用户身份执行。Gateway 若未配置白名单,启动时会拒绝所有外部用户——这是 fail-closed 的好设计;但若你为了「先跑起来」打开 GATEWAY_ALLOW_ALL_USERS=true,任何能联系到 bot 的人都能触发工具调用。

风险不在「AI 会不会作恶」,而在三类可预期失误:

  • 误删/误改:递归 rm、覆盖 ~/.ssh~/.hermes/.env
  • 密钥泄露:日志、MCP 子进程或容器环境变量把 API key 带出;
  • 越权调用:未授权用户通过 Telegram/Discord 等入口触发部署、群发或支付脚本。

安全配置的目标不是关掉功能,而是让 agent 只在它需要工作的范围内行动。下面这张分层表可作为整篇的导航:

资产层 典型路径/对象 建议策略 主要风险
个人文件 ~/Documents、~/Pictures、iCloud 禁止 agent 默认访问 隐私泄露、误删照片/文稿
工作目录 ~/hermes-workspace 允许读写;设 MESSAGING_CWD 越界写入系统目录
代码仓库 ~/Projects/某仓库 询问 git push/merge;禁止直接改 main 未审查代码上线
密钥 ~/.hermes/.env 禁止 agent 读写;chmod 600 API 账单失控、账号接管
生产资源 云控制台、K8s、数据库 禁止 长周期凭据;短效 scoped token + 询问 容器隔离也挡不住高权限 key
外部消息 Telegram/Slack/Discord 询问 群发;白名单 + DM pairing 钓鱼、垃圾信息、声誉风险

2. 该用主力 macOS 用户吗?专用工作区怎么划

2.1 运行身份:主力用户 vs 专用账户

不建议让长期运行的 Gateway 直接使用你的日常 macOS 账户。日常账户通常已授权照片、邮件、浏览器密码等——agent 一旦以 local 后端执行命令,继承的是该用户的完整 TCC 权限面。

更稳妥的三档方案:

  • 本地试用(低风险):仍用主力账户,但仅 CLI 交互、local 后端、工作目录锁在专用文件夹;
  • 专用 macOS 用户(推荐):系统设置 → 用户与群组,新建标准用户 hermes,只挂载工作目录与必要 SSH key;
  • 独立机器/VM(生产 Gateway):terminal.backend: ssh 指向另一台 Mac mini 或 Linux worker,Gateway 只负责消息路由。

Hermes 官方 SECURITY.md 也强调:多用户隔离必须在 OS/主机层完成,应用内 session key 只做路由,不是授权边界。

2.2 目录分区与 MESSAGING_CWD

在专用账户下创建独立工作区,不要把 agent 默认 cwd 设在 ~

mkdir -p ~/hermes-workspace/{inbox,outbox,scratch,backups}
chmod 700 ~/hermes-workspace

~/.hermes/.env 中设置:

MESSAGING_CWD=/Users/hermes/hermes-workspace

分区建议:

  • inbox:只读或半只读——agent 可读取待处理材料;
  • scratch:可写——临时脚本、构建产物;
  • outbox:可写——输出报告,人工抽查后再外传;
  • backups:agent 无写权限——你用 Time Machine 或 rsync 单独备份。

代码仓库若必须接入,建议只 bind 单个 repo 子目录,而不是整个 ~/Projects。Docker 持久化模式下,容器内 /workspace 映射到 ~/.hermes/sandboxes/docker/——定期清理旧 sandbox,避免敏感文件长期残留。

3. 密钥与 API Key:放哪里、怎么轮换

3.1 存放位置与权限

Hermes 要求所有 API key 和 token 只放在 ~/.hermes/.env,不要写进 config.yaml 或 git 仓库。安装后立即执行:

chmod 600 ~/.hermes/.env
chmod 700 ~/.hermes

各类存储的适用边界:

方式 适用场景 注意
~/.hermes/.env 本地 Gateway/CLI 默认方案 必须 chmod 600;勿提交 git
macOS 钥匙串 SSH 部署 key、短期人工注入 Hermes 不自动读钥匙串;需启动脚本导出
Skill 声明的 env 单个 Skill 需要的第三方 API 会进入容器 passthrough;只给最小 scope
云端 Secret Manager 团队生产、CI/CD 注入到 worker 的 .env,不经过聊天通道

3.2 不要把 provider key 透传进容器

terminal.docker_forward_envterminal.env_passthrough 会把变量注入 Docker/本地子进程。切勿把 OpenAI/Anthropic 等 provider 主密钥加入 passthrough——容器内代码可读并外传。只透传任务级 token(如受限的 GITHUB_TOKEN)。

MCP 子进程默认只接收 PATH、HOME 等安全变量;需在 MCP 配置的 env: 块里显式声明才会传入,这是有意设计。

3.3 密钥轮换 checklist

发生泄露 suspicion 或定期维护时,按顺序执行:

  1. 立即停止 Gateway:launchctl unload 或退出 gateway 进程;
  2. 在云控制台吊销并重建所有可能暴露的 key(LLM provider、Telegram bot、GitHub PAT);
  3. 更新 ~/.hermes/.env,确认旧 key 已删除;
  4. 检查 ~/.hermes/logs/ 与 shell 历史,确认无 key 明文;
  5. 若 Gateway token 曾暴露,轮换 pairing 数据:hermes pairing list / revoke
  6. 重启 Gateway,用最小任务验证后再恢复自动化。

4. 命令与文件权限:允许 / 询问 / 禁止

Hermes 内置危险命令检测(tools/approval.py)。在 ~/.hermes/config.yaml 中保持:

approvals:
  mode: manual    # manual | smart | off
  timeout: 60     # 超时默认拒绝(fail-closed)

smart 模式用辅助 LLM 评估风险——适合熟练用户;off/yolo 等同关闭审批,在 disposable 容器或 CI 中使用。硬线 blocklist(如 rm -rf /、fork bomb)无论 YOLO 与否都会拒绝。

4.1 可直接套用的策略模板

操作类型 策略 Hermes 侧设置
读工作区内文件 允许 MESSAGING_CWD + 目录隔离
递归删除、写 /etc、写 ~/.ssh 禁止/必审 manual 模式 + 勿加入 command_allowlist
brew/npm/pip 安装 询问 默认触发审批;容器内可放宽
git commit(本地) 允许 限制 repo 路径
git push / 部署 / docker push 询问 每次人工确认;禁用 always allow
对外 HTTP(公网) 询问 security.website_blocklist 拦内网/metadata
自动发送群消息/邮件 禁止自动 Gateway 回复需人工 yes/no

CLI 审批选项:once / session / always / deny。生产环境避免对 rmsystemctl 等使用 always——会写入 command_allowlist 永久放行。用 hermes config edit 定期审计该列表。

4.2 生产环境优先 Docker 隔离

terminal.backend: docker(或 modal/daytona/vercel_sandbox)时,危险命令检测会跳过——容器本身就是边界。Docker 默认 drop 全部 capability、限制 pids、tmpfs 隔离 /tmp。配置示例:

terminal:
  backend: docker
  docker_image: "nikolaik/python-nodejs:python3.11-nodejs20"
  docker_forward_env: []          # 空 = 不把主机密钥带进容器
  container_cpu: 1
  container_memory: 5120
  container_disk: 51200
  container_persistent: true

注意:容器默认仍可访问公网。若 skill 不需要联网,在 Docker 层限制 egress 或使用 --network=none 策略。

5. macOS 隐私权限:保守授权

Hermes CLI/Gateway 若需读文件、控制浏览器或截图,会触发 macOS TCC 弹窗。路径因 macOS 版本略有差异,但原则一致:只给完成功能所需的最小权限,且优先在专用用户下授权。

  • 文件与文件夹:仅添加 hermes-workspace,不要选「整个磁盘」或 Documents;
  • 自动化(Apple Events):若不用 Hermes 控制 Mail/Notes,拒绝;
  • 辅助功能 / 屏幕录制:browser 工具需要时再开;日常 CLI 可不开;
  • 完全磁盘访问:除非明确需要,否则不要授予——等同于绕过 TCC。

系统设置 → 隐私与安全性 → 对应类别,可随时撤销。升级 macOS 后建议复查一遍授权列表。

6. Gateway 用户授权与日志审计

6.1 谁可以和 bot 说话

~/.hermes/.env 配置白名单,不要在生产使用 GATEWAY_ALLOW_ALL_USERS=true

TELEGRAM_ALLOWED_USERS=你的数字ID
GATEWAY_ALLOWED_USERS=你的数字ID
# 或使用 DM pairing:未知用户收到 8 位码,CLI 执行 hermes pairing approve

授权检查顺序:平台 allow-all 标志 → pairing 已批准列表 → 平台白名单 → 全局白名单 → 默认拒绝。Pairing 码 1 小时过期、10 分钟限流、5 次失败锁定 1 小时——比硬编码 ID 更灵活。

6.2 日志应保留什么

默认日志目录:~/.hermes/logs/。建议保留并定期轮转:

  • Gateway 启动警告(如未配置白名单);
  • 危险命令审批记录(批准/拒绝/超时);
  • 未授权用户访问尝试;
  • Skill 安装与 lazy install 事件;
  • hermes doctor 输出的供应链 advisory。

日志本身可能含文件路径、命令参数和部分 prompt 片段——视为敏感数据,不要同步到公开云盘。MCP 错误返回会自动 redact ghp_sk- 等模式,但不能替代「少记密钥」的习惯。

可启用 security.website_blocklist 阻止 agent 访问内网 admin 面板;SSRF 防护默认拦截 RFC1918、metadata IP——除非你有 LAN 内 Ollama 等需求,否则保持 allow_private_urls: false

7. 从低风险到高权限的扩权流程

不要第一天就 local + yolo + allow all users。推荐阶梯:

  1. 第 1 周:CLI + manual 审批 + 专用目录 + 单 provider key;
  2. 第 2 周:接入 Gateway,DM pairing,仅自己 ID;
  3. 第 3 周:docker 后端,绑定单个代码仓库;
  4. 生产:独立 Mac mini/VM + ssh 后端 + 资源限额 + 日志告警。

每升一级,用 15 分钟跑一遍「故意触发审批」测试:删临时文件、curl 内网、尝试 push——确认该拦的仍被拦。

8. 误操作与泄露:事件响应

误删文件:若在工作区内,从 backups 或 Time Machine 恢复;若已同步 git,git checkout。然后暂停 agent,查日志定位触发 prompt。

密钥泄露:按第三节轮换 checklist 执行;若 bot token 泄露,在 Telegram @BotFather 重置并更新 .env。

越权调用:hermes pairing revoke <platform> <user_id>,检查 Gateway Webhook URL 是否被暴露,必要时加防火墙/Tailscale 仅内网访问 Gateway。

异常 API 账单:先在 provider 控制台设 spend limit,再查日志里是否有循环 tool call 或 cron 任务失控。

说明:Hermes 不保证「数据绝不离开本机」——模型 API、browser、web search 都会出站。若需纯本地,需自行选择本地模型路由并关闭相应工具。

9. 安装后 30 分钟安全检查清单

  • ☐ 创建 ~/hermes-workspace 并设置 MESSAGING_CWD
  • chmod 600 ~/.hermes/.env,确认 config.yaml 无密钥明文
  • approvals.mode: manual,未启用 YOLO
  • ☐ 审计 command_allowlist 为空或最小
  • ☐ Gateway 配置白名单或 DM pairing,未开 GATEWAY_ALLOW_ALL_USERS
  • ☐ 生产 Gateway 使用 dockerssh 后端,非 local
  • docker_forward_env: [],provider key 未透传
  • ☐ macOS 隐私权限仅覆盖工作目录
  • ☐ 运行 hermes doctor,处理供应链 advisory
  • ☐ 确认 ~/.hermes/logs/ 可写且不在云同步文件夹内

在 Mac mini 上跑 Hermes,边界更清晰

把 Hermes Gateway 放在专用 Mac mini 上,是比「主力 MacBook 全开权限」更干净的分工:日常电脑继续写代码、回消息;mini 只跑 agent、Docker sandbox 和日志,物理上与个人照片、浏览器 Cookie 隔离。Apple Silicon 统一内存让本地辅助模型(若你用 Ollama)更顺畅;macOS 的 Gatekeeper、SIP、FileVault 提供系统级完整性保护,TCC 权限面也可在专用账户上最小化。

Mac mini M4 待机功耗约 4W、无风扇静音,适合 7×24 跑 Gateway 而不扰民;配合 terminal.backend: ssh,你甚至可以把命令执行推到另一台 worker,Gateway 节点只负责消息与审批。若你正在搭建「可长期开着的 agent 主机」,Mac mini M4 是目前性价比最清晰的起点——现在即可入手,把 Hermes 关进你划定的边界里。

Mac mini M4 · 专用 Agent 节点

M4.S 7×24 静默运行

10 核 CPU 16GB 内存 权限隔离
$105.9
/ 月起
立即获取