
前言这篇我把自己踩了N个坑总结的OpenClaw安全管控方案全分享 容器化部署隔离权限、IP白名单控制面板访问、token用量告警、 行为日志全追溯所有配置代码直接复制就能用自托管玩家必看权限问题1openclaw可以修改主机上的文件拿笔者的环境来说一台debian 13的操作系统上安装的openclaw安装完成之后它可以随意修改操作系统的文件要是别有用心之人能与openclaw对话直接给你来个rm -rf /*2可以修改自己的配置文件配置文件也只不过是操作系统上的一个普通文件而已3重启某些服务该服务并不是systemctl托管的它自己去ps去查找相关信息并且完成了重启迁移至容器刚才的演示中已经暴露了openclaw的权限问题如果不加以控制那openclaw有可能成为潜在的风险损害电脑上的重要资料那怎么解决这个问题呢将openclaw限制在容器当中可执行的命令、可以修改的文件都受到了限制将本机的~/.openclaw全部复制到新的路径为docker启动作为数据目录也是将原有的配置全部迁移到docker中cp-rf~/.openclaw /data/openclaw_dockerdocker启动脚本dockerrun--nameopenclaw\-p18789:18789\-u1000:1000\-v./openclaw_docker:/home/node/.openclaw\ghcr.io/openclaw/openclaw:latest迁移完成之后验证dockerexec-itopenclaw openclaw tui修改web访问catopenclaw.json|jq.gateway.bindlan# 原为localhost改了之后要小心了整个lan都可以访问gateway页面还是很危险的明确指定哪些地址可以访问 Web 控制台。这提供了最好的安全性gateway:{port:18789,mode:local,bind:lan,controlUi:{allowedOrigins:[http://localhost:18789,http://127.0.0.1:18789]},...}笔者配置了只允许127.0.0.1来访问gateway页面token限制多模型接入之后最容易踩的坑就是token超量笔者之前开着verbose模式跑了个文档梳理任务一晚上刷了几十万token账单直接起飞所以一定要加限制。1会话级token上限防止单次对话无限生成、或者反复调用工具刷token直接在配置里加会话token阈值{ agents: { defaults: { compaction: { reserveTokensFloor: 20000, // 上下文窗口剩余20k token时自动压缩 maxSessionTokens: 100000 // 单个会话最多累计10万token超过自动重置 } } } }超过阈值之后会话会自动触发压缩或者直接重置避免无限累加。2单模型每日配额限制如果你用的是收费模型可以给每个模型加单日最大token限制超了自动切到备用模型{ models: { providers: { litellm: { api: openai-completions, baseUrl: http://localhost:4000/v1, apiKey: xxx, maxTokensPerDay: 500000, // 单日最多用50万token fallbackModel: litellm/qwen-plus // 超量自动切到通义千问 } } } }笔者亲测这个配置救了好多次再也不用担心跑任务跑超支了。3litellm跟踪token如果是通过litellm来管理大模型key那使用litellm来跟踪token是最好的首先是观察整体的token消耗以及不同模型的情况其次是查看每一次会话的token消耗跟踪openclaw行为可以查看~/.openclaw/agents/id/sessions/*.jsonl日志Agent 做了什么调了哪些工具传了什么参数都可以在该文件中找到。笔者习惯加个定时任务每天把日志导出一份到备份目录万一出了问题直接回溯连操作时间点都对得上非常方便。缩减memory避免过度联想记忆多了也有副作用笔者之前遇到过给A项目配置的服务器地址过了半个月问B项目的配置助手直接把A项目的地址搬出来了还说得有鼻子有眼差点踩了线上事故。就是因为记忆库里的内容太多语义检索的时候把相关的内 容都拉出来了导致回答串了。所以一定要限制记忆的范围避免过度联想1限制自动加载的记忆天数默认启动会加载今天昨天的记忆可以改成只加载今天的或者完全不自动加载历史记忆{ agents: { defaults: { memory: { loadRecentDays: 1 // 只加载当天的记忆历史记忆需要手动查询 } } } }如果你的场景不需要长期记忆直接设成0启动完全不加载历史记录最清爽。2关闭会话历史索引默认记忆搜索会把所有历史会话记录都索引进去不想让旧会话的内容被检索到可以关闭{ agents: { defaults: { memorySearch: { sources: [memory] // 只索引MEMORY.md和memory/下的文件不索引会话日志 } } } }改完之后只有你手动写到记忆文件里的内容才会被检索会话里的临时内容不会进索引避免串扰。3定期清理过期记忆写个脚本定时删除超过30天的记忆文件还有清理向量索引#!/bin/bash# 清理30天以上的记忆find~/.openclaw/workspace/memory/-name*.md-mtime30-delete# 重建向量索引sqlite3 ~/.openclaw/memory/main.sqliteVACUUM;加个cron每周跑一次记忆库永远都是最新的内容不会有陈年旧料出来捣乱。4按项目拆分记忆不同项目的记忆不要都堆在根MEMORY.md里新建子目录拆分memory/ ├── project-a/ │ └── config.md ├── project-b/ │ └── config.md └── 2026-03-17.md查询的时候指定路径就不会把两个项目的配置搞混了。联系我联系我做深入的交流至此本文结束在下才疏学浅有撒汤漏水的请各位不吝赐教…