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_env 和 terminal.env_passthrough 会把变量注入 Docker/本地子进程。切勿把 OpenAI/Anthropic 等 provider 主密钥加入 passthrough——容器内代码可读并外传。只透传任务级 token(如受限的 GITHUB_TOKEN)。
MCP 子进程默认只接收 PATH、HOME 等安全变量;需在 MCP 配置的 env: 块里显式声明才会传入,这是有意设计。
3.3 密钥轮换 checklist
发生泄露 suspicion 或定期维护时,按顺序执行:
- 立即停止 Gateway:
launchctl unload或退出 gateway 进程; - 在云控制台吊销并重建所有可能暴露的 key(LLM provider、Telegram bot、GitHub PAT);
- 更新
~/.hermes/.env,确认旧 key 已删除; - 检查
~/.hermes/logs/与 shell 历史,确认无 key 明文; - 若 Gateway token 曾暴露,轮换 pairing 数据:
hermes pairing list/revoke; - 重启 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。生产环境避免对 rm、systemctl 等使用 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 周:CLI + manual 审批 + 专用目录 + 单 provider key;
- 第 2 周:接入 Gateway,DM pairing,仅自己 ID;
- 第 3 周:切
docker后端,绑定单个代码仓库; - 生产:独立 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 使用
docker或ssh后端,非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 关进你划定的边界里。