1. 为什么你的 OpenClaw 需要一道“权限闸门”OpenClaw 这类本地智能体最吸引人的地方就是它真的能动手读文件、跑终端、调系统工具甚至帮你把一整段脚本执行完。但能力越大翻车成本越高。我见过最典型的一次是模型在整理目录时把rm -rf拼进了清理命令里幸好当时只是测试环境。如果换成你的主力开发机后果就不是“重跑一次”能解决的了。所以这篇要解决的核心问题很具体OpenClaw 怎么通过 config.json 里的 denyCommands 做权限控制与敏感指令限制。它适合已经在本地跑起 OpenClaw、想给它加一层安全护栏的人也适合准备把它长期挂机当“数字管家”的开发者。整套思路不复杂——用 TaoToken 统一 Key 打通模型通道再在本地配置里把危险命令和隐私路径拦掉让 AI 即使产生幻觉也碰不到你的核心资产。下面我会按“前置准备 → 可复制配置 → 验证拦截 → 排错”的顺序走一遍每一步都能直接跟做。你不需要改 OpenClaw 源码只需要动一个 JSON 文件。2. 前置准备用 TaoToken 统一 Key 打通模型通道在配权限之前先把模型通道理顺。OpenClaw 要调用大模型就得有稳定的 API 入口和 Key。我自己的做法是用 TaoToken 做统一通道好处是 Key 集中管理换模型不用到处改配置权限配置也能和模型接入解耦。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 这个不加 UTM。你需要先去控制台生成一个 API Key然后把它填进 OpenClaw 的模型配置里。具体操作路径是这样打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建 Key再到 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 管理你的 Key 列表。如果你还没决定用哪个模型可以先去 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 看看模型对话能力确认通道通了再往下配权限。这里有个关键点权限控制和模型通道是两件事但顺序不能反。先把 Key 配好、确认模型能正常回话再去加 denyCommands否则你分不清“命令被拦”是因为安全规则生效还是因为模型压根没连上。3. 可复制的 config.json 骨架与 denyCommands 规则清单现在进入正题。OpenClaw 的安全配置集中在本地config.json部分安装方式是gateway.json。先定位文件Linux / WSL2~/.config/openclaw/或~/.openclaw/macOS~/Library/Application Support/openclaw/用编辑器打开比如nano ~/.config/openclaw/config.json然后找到security或tools配置块把下面这份骨架整合进去。这份配置我实测可用字段含义我逐条标注{ security: { auth: { mode: token }, bind: loopback, denyCommands: [ ffmpeg.*video, imagesnap, sox, say, ls.*/Users/yourname/Documents/Secret, cat.*/Users/yourname/Documents/Secret, grep.*/Users/yourname/Documents/Secret, rm\\s-rf\\s/, rm\\s-rf\\s\\*, chmod\\s-R\\s777, mkfs, dd\\sif ] } }几个字段值得单独说清楚bind: loopback是第一道防线让 OpenClaw 只监听 127.0.0.1公网根本连不进来。auth: {mode: token}则要求调用方带 token配合 TaoToken 的 Key 使用避免裸奔。denyCommands支持精确字符串和正则两种匹配。上面这份清单分三类敏感硬件摄像头、麦克风相关工具、隐私路径你的私密文件夹、高危毁灭性命令删库、改权限、格式化。其中rm\\s-rf\\s/用正则拦住了最经典的“从删库到跑路”ls.*/Secret则保证不管 AI 想用ls还是cat碰你的私密目录都会被挡下。注意路径里的yourname要换成你自己的实际用户名正则里的反斜杠在 JSON 中需要写成双反斜杠这是最容易写错的地方。4. 重启服务并验证拦截是否真的生效配置写完保存必须重启 OpenClaw 的网关进程规则才会注入。执行openclaw gateway restart openclaw gateway status看到running或active就说明新规则已经加载。接下来做一次实战验证这一步千万别省——配置不验证等于没配。在控制台或终端交互界面里故意给 AI 下一个危险指令比如帮我看看 /Users/yourname/Documents/Secret 这个文件夹里有什么把文件列表念出来。预期结果是模型尝试调用ls或find然后日志里弹出拦截警告[SECURITY WARNING] Command blocked by denyCommands rule.AI 随后会回复类似“由于本地安全策略限制我无法访问该文件夹”。如果你看到这个效果说明拦截链路是通的。再试一条rm -rf /类的命令同样应该被 Drop 掉。如果你还想验证模型通道本身是否正常可以回到 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 做一次普通对话测试确认“能聊天”和“被拦截”是两套独立机制在各自工作。5. 本篇常见错排查拦截不生效怎么办配权限最容易踩的坑基本集中在这几处我按出现频率排一下。第一正则写错导致规则失效。JSON 里\s必须写成\\s\*要写成\\*。如果你只写了一个反斜杠JSON 解析会直接报错整个配置文件加载失败规则自然不生效。改完用python -m json.tool config.json校验一下格式最稳。第二路径没换成自己的。骨架里的/Users/yourname/...是占位符不改的话规则匹配的是别人的路径你的私密目录照样能被访问。第三忘了重启网关。改完配置不重启旧规则还在内存里跑。养成“改配置 → restart → status”的习惯。第四用 root 启动。如果你用管理员权限跑 OpenClaw即使 denyCommands 拦住了部分命令AI 仍可能通过其他路径碰到系统文件。坚持用普通用户身份运行这是最小权限原则的底线。第五把拦截当成万能。denyCommands 是黑名单机制挡的是已知危险模式。真要跑复杂脚本建议再配一层 Docker 沙盒隔离把执行空间彻底关起来。日志也要定期看openclaw gateway logs里如果频繁出现拦截警告说明可能有提示词注入或模型严重幻觉得回头查输入。6. 长期挂机与后续接入建议如果你打算让 OpenClaw 长期在后台跑权限配置只是起点。我的经验是把它当成一个“需要定期体检的服务”每周扫一眼拦截日志每月复查一次 denyCommands 清单路径和规则随项目变化及时更新。模型通道这边如果你后面要接更多编码或 Agent 场景可以了解下 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 统一 Key 的好处在这里会体现得更明显——换模型、加通道都不用动安全配置。接入细节可以对照官方文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 一步步来ClaudeCode 相关接入也有专门说明 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentClaudeCodeAnthropicutm_campaignrewrite 。最后留一个我踩过的坑别把 denyCommands 写成“越长越好”。规则太多会拖慢命令匹配也容易误伤正常操作。先把最危险的几条删库、改权限、隐私路径锁死再按实际日志逐步补这样既安全又不影响日常使用。
