团队里如何做 per-agent 执行白名单治理
结合最新官方 approvals CLI 与 Exec Approvals 文档,整理一套更稳的 per-agent allowlist 管理方法,避免一个 agent 的执行权限外溢到整个团队。
AI 摘要
这页重点
结合最新官方 approvals CLI 与 Exec Approvals 文档,整理一套更稳的 per-agent allowlist 管理方法,避免一个 agent 的执行权限外溢到整个团队。
安全治理
approvals / allowlist / exec / security / governance
最后更新 2026-03-24,来源 OpenClaw Docs
团队里如何做 per-agent 执行白名单治理
官方最近把 Exec Approvals 的 per-agent allowlist、safe bins 和 approvals CLI 都补得更具体了。
这背后的信号很明确:
- 执行白名单不该再按“整台机放开多少”来理解
而更应该按:
- 哪个 agent 需要什么执行面
来治理。
第一原则:权限跟 agent 走,不跟团队口头约定走
如果一条命令只是某个内容 agent、运维 agent 或代码 agent 会用到,就不该默认变成所有 agent 的通行证。
更稳的做法通常是:
main只保留最小通用能力- 专门 agent 再单独加路径 allowlist
第二原则:先分 Gateway 和 Node,再谈统一策略
官方当前明确说明 approvals 是按执行宿主分别存储的。
这意味着:
- Gateway 一套
- 每个 Node 可能又是一套
如果你还没先把宿主边界分清,后面的 allowlist 审计会非常乱。
第三原则:解释器和脚本入口优先保守
最新官方文档特别强调了:
node -epython -cosascript -e
这类 inline eval 即便解释器本身 allowlisted,也仍应尽量保留显式审批。
这说明更稳的治理方式不是:
- “放开
node就都方便了”
而是:
- “路径能放开的放路径,解释器代码执行继续走审批”
第四原则:safeBins 只给窄场景,不给泛化能力
官方把 safe bins 定位得很窄:
- stdin-only
- 文本过滤
- 不是通用执行通道
所以更稳的用法是:
- 给
head、tail、tr、wc这类轻过滤器
而不是:
- 把
bash、node、python、jq全部塞进去当快捷白名单
第五原则:审批日志要能追溯到 agent
官方文档已经把 allowlist 条目的最近使用信息、最近命中命令和解析路径都做出来了。
这意味着团队运维时不该只问:
- “这条命令有人批过吗”
更该问:
- “哪个 agent 在什么宿主上频繁用这条命令”
一个更稳的默认策略
对多数团队,一个实用的起点通常是:
defaults.security=deny- 核心 agent 用
allowlist ask=on-missaskFallback=deny- inline eval 保留显式审批
这样既不会把整个执行面一次性放开,也不会让值守团队被每次低风险命令都反复打断。
推荐的落地分层
main
只放:
- 常规只读诊断
- 少量稳定工具路径
ops
放:
- 运维巡检
- 服务状态检查
- 有明确宿主边界的固定命令
content / research
尽量少放,必要时更多依赖:
- safe bins
- allow-once
- 审批转发
最容易踩的三个坑
1. 直接给 "*" 放宽路径
后面几乎一定会出现权限外溢。
2. 把 allowlist 当成完整身份控制
官方已经明确提醒它不是 per-user auth boundary。
3. 只顾效率,不看漂移风险
解释器、wrapper、runtime file 这些地方最容易让“原本以为允许的是 A,最后跑的是 B”。
一条实用的审计顺序
每次审 approvals,可以按这条线走:
- 先看宿主是 Gateway 还是 Node
- 再看命中的是哪个 agent
- 再看是 allowlist、safe bins 还是 ask 放行
- 最后再决定是否继续长期保留