1. OpenClaw 九大安全面里,settings 到底该改哪几处
OpenClaw 是一套模块化的 AI 智能体架构,通道、网关、工作空间、AI 接入网关和大模型服务五层串起来,才能让一条指令从 IM 消息走到任务执行。它适合已经在本地或内网跑智能体、又想把安全面逐项核对一遍的开发者。九大安全面听起来像一份审计清单,但真正落地时,绝大多数风险都收敛到同一个入口:settings配置文件。鉴权写错、通道暴露、日志脱敏没开,这三类问题占了日常踩坑的八成以上。
我试过把九大安全面拆成「配置能管」和「配置管不了」两堆。Skill 生态、容器运行时、K8s 网络策略这些属于基础设施层,得靠镜像扫描和 NetworkPolicy 兜底;而鉴权、通道、日志、模型接入这四类,完全可以在settings.json或settings.toml里一次性核对完。这篇就聚焦后者,给你一份可复制的 settings 片段,再把每一项的验证动作和回滚路径写清楚。
核心检索词先摆出来:OpenClaw 安全面配置核对,指的是通过修改 settings 文件,把鉴权、通道、日志三类场景的防护项逐条打开并验证。适合谁?适合已经跑通 OpenClaw 基础链路、准备做一次本地安全面复盘的开发者。你不需要改架构,只需要改配置、发一次请求、看返回。
九大安全面里,1.3.3 会话安全、1.3.4 IM 会话安全、1.3.8 大模型统一接入安全,这三项和 settings 强相关。会话安全对应 Prompt 记录与 DLP 扫描开关,IM 会话安全对应通道鉴权和输入管控,大模型接入安全对应 Base URL、Key、Model ID 三件套。把这三块配好,等于把最容易被利用的入口先焊死。
下面按「原问题 → 前置 → 配置 → 验证 → 排障 → 入口」六段走。每一段都给可复制的片段,你照着改完就能复现一次完整的安全面核对。
2. 把 settings 改到 TaoToken 的前置准备与检查项
在动 settings 之前,先把三件事确认掉,否则改完会出现「配置生效了但请求 401」这种最难查的组合故障。
第一件,确认 OpenClaw 的 settings 文件位置。不同发行版路径不一样,常见的有~/.openclaw/settings.json、项目根目录的config/settings.toml,以及容器内挂载的/etc/openclaw/settings.json。你可以用一条命令定位:
find / -name "settings.*" -path "*openclaw*" 2>/dev/null找到之后先备份,这是回滚路径的起点:
cp ~/.openclaw/settings.json ~/.openclaw/settings.json.bak.$(date +%Y%m%d)第二件,确认你要接入的模型服务地址和 Key。TaoToken 的 API 入口是https://taotoken.net/api,模型对话、Coding Plan、控制台、API Keys 各有独立页面。Key 在控制台的 API Keys 页面生成,生成后只显示一次,先存到密码管理器再往 settings 里填。这里注意:Key 属于敏感信息,1.3.2 工作空间数据安全里明确要求对话日志全程脱敏遮蔽,所以填进配置后要确认日志脱敏开关是打开的,别让 Key 明文进日志。
第三件,确认 Model ID。OpenClaw 的 AIGateway 层需要明确的模型标识,常见的有claude-sonnet-4-5、gpt-4o这类。Model ID 写错不会报鉴权错误,而是返回reading choices相关的解析异常,这个坑后面排障段会细说。
前置检查项列成表,改配置前逐条打勾:
| 检查项 | 对应安全面 | 确认方式 |
|---|---|---|
| settings 文件路径 | 1.3.5 运行环境 | find 命令定位 |
| 备份文件已生成 | 回滚路径 | ls 看 .bak 文件 |
| API Key 已存管 | 1.3.2 数据安全 | 控制台 API Keys 页 |
| Model ID 已确认 | 1.3.8 接入安全 | 模型对话页核对 |
| 日志脱敏开关 | 1.3.2 数据安全 | settings 内 log 段 |
这五项里,最容易漏的是日志脱敏。很多人配完 Key 直接发请求,结果 Key 出现在openclaw.log里,等于把凭证写进了明文文件。1.3.2 要求「对话日志全程脱敏遮蔽」,落到 settings 就是log.redact相关字段,下一段给完整片段。
还有一点,OpenClaw 的通道(Channel)配置和模型接入配置是分开的两段。通道管的是 IM 消息进出,模型接入管的是 AIGateway 往大模型发请求。1.3.4 IM 会话安全对应通道段,1.3.8 对应模型段,别把 Key 填到通道段里,那样既不生效也不安全。
前置做完,你手里应该有:一个备份好的 settings 文件、一个存好的 API Key、一个确认过的 Model ID。接下来进配置段。
3. 可复制的 settings 片段:鉴权、通道、日志三类场景
这一段给三份片段,分别对应鉴权、通道、日志。你可以按需合并进自己的 settings 文件。路径以~/.openclaw/settings.json为例,如果你的是 TOML,字段名一致,语法换成[section]即可。
先看鉴权段。这一段对应 1.3.8 大模型统一接入安全,核心是三件套:Base URL、Key、Model ID。缺任何一个都会导致请求失败。
{ "aiGateway": { "provider": "taotoken", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的Key", "modelId": "claude-sonnet-4-5", "timeoutMs": 60000, "retry": { "maxAttempts": 2, "backoffMs": 800 } } }注意baseUrl结尾不要带/v1,OpenClaw 的 AIGateway 会自己拼路径。带了/v1会出现 404,而不是 401,这个区分后面排障会用到。timeoutMs给 60 秒是给长上下文留余量,retry两次是防止偶发网络抖动直接失败。
再看通道段。这一段对应 1.3.4 IM 会话安全,重点是输入管控和身份认证。OpenClaw 的通道配置里,auth和inputGuard是两个关键子段。
{ "channel": { "im": { "enabled": true, "auth": { "mode": "token", "tokenTtlSec": 3600, "requireUserConfirm": true }, "inputGuard": { "maxMessageBytes": 65536, "blockFileExec": true, "rateLimitPerMin": 30 }, "outputGuard": { "dlpScan": true, "toolWhitelistOnly": true } } } }requireUserConfirm对应 1.3.6 里的「设备指纹 + Token + 用户确认」,打开后新设备首次接入需要人工确认。blockFileExec对应 1.3.4 的「文件扫描」,防止 IM 传来的文件被直接执行。dlpScan对应输出管控里的外发 DLP 检测。
最后是日志段。这一段对应 1.3.2 数据安全,也是九大安全面里最容易被忽略的一项。
{ "log": { "level": "info", "redact": { "enabled": true, "patterns": ["apiKey", "token", "phone", "idCard"], "maskChar": "*" }, "audit": { "enabled": true, "retentionDays": 30, "includePromptHash": true } } }redact.enabled打开后,日志里出现的 Key、Token、手机号、身份证会被替换成*。includePromptHash只记录 Prompt 的哈希而不是原文,对应 1.3.3 的「Prompt 全量记录」和「脱敏遮蔽」之间的平衡——你既能审计,又不泄露原文。
三份片段合并后,你的 settings 应该同时有aiGateway、channel、log三个顶层段。改完保存,先别急着重启,用一条命令校验 JSON 语法:
python3 -m json.tool ~/.openclaw/settings.json > /dev/null && echo "JSON OK"输出JSON OK再重启服务。语法错了直接重启,服务会起不来,反而增加排查成本。
4. 验证请求与成功结果:一次可复现的安全面核对
配置改完,接下来做一次完整验证。验证分三步:通道鉴权验证、模型接入验证、日志脱敏验证。三步都过,才算这次安全面核对完成。
第一步,通道鉴权验证。重启 OpenClaw 后,往 IM 通道发一条测试消息。如果你用的是本地调试模式,可以直接调通道的健康检查接口:
curl -s -X POST http://127.0.0.1:8080/channel/health \ -H "Content-Type: application/json" \ -d '{"probe":"auth"}'预期返回里应该有"authMode":"token"和"requireUserConfirm":true。如果返回"authMode":"none",说明通道段没生效,回去检查channel.im.auth的层级有没有写错。
第二步,模型接入验证。这一步直接打 AIGateway 的测试端点,确认三件套生效:
curl -s -X POST http://127.0.0.1:8080/aigw/probe \ -H "Content-Type: application/json" \ -d '{"model":"claude-sonnet-4-5","prompt":"ping"}'成功返回类似:
{ "ok": true, "provider": "taotoken", "model": "claude-sonnet-4-5", "latencyMs": 842, "usage": {"promptTokens": 3, "completionTokens": 1} }看到"ok": true和usage字段,说明 Base URL、Key、Model ID 三件套全部正确。如果返回 401,是 Key 问题;返回 404,是 Base URL 带了多余路径;返回reading choices解析异常,是 Model ID 写错。这三种错误下一段细说。
第三步,日志脱敏验证。发一条包含敏感串的测试请求,然后去日志里搜:
grep -i "sk-" ~/.openclaw/logs/openclaw.log | head -5如果脱敏生效,你搜不到完整的sk-开头的 Key,只会看到sk-****这种掩码形式。同时确认审计日志里有 Prompt 哈希记录:
grep "promptHash" ~/.openclaw/logs/audit.log | tail -3三步都过,你就在本地完成了一次可复现的安全面核对。整个过程不需要改架构,只动了 settings 三个段。回滚也简单:把备份文件覆盖回去,重启服务即可。
cp ~/.openclaw/settings.json.bak.20250101 ~/.openclaw/settings.json systemctl restart openclaw验证通过后,如果你打算长期跑编码类任务或 Agent 工作流,可以顺手把 Coding Plan 的额度接进来,避免频繁换 Key。入口在控制台的 Coding Plan 页面,配置方式一样,只是 Key 换成 Plan 对应的凭证。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
这一段把四类真实报错拆开讲。这四类覆盖了 settings 改到 TaoToken 过程中九成以上的失败场景。
第一类,401 Unauthorized。返回体通常是:
{"error":{"type":"authentication_error","message":"invalid api key"}}原因有三个:Key 复制时带了空格、Key 已过期、Key 填到了错误的段。排查顺序是先看aiGateway.apiKey字段有没有首尾空格,再用控制台 API Keys 页面确认 Key 状态,最后确认 Key 没被误填到channel段。修复就是重新生成 Key 并替换,注意替换后重启服务。
第二类,local proxy failed。这个报错不是鉴权问题,而是 OpenClaw 本地代理层连不上上游。典型返回:
local proxy failed: dial tcp 127.0.0.1:7890: connect: connection refused注意这里的127.0.0.1:7890是本地代理端口,说明 settings 里残留了旧的代理配置。OpenClaw 的aiGateway段如果带了proxy字段,会优先走代理。修复是删掉proxy字段,或者把它指向正确的本地端口。如果你没有本地代理服务,直接删掉这个字段,让请求直连https://taotoken.net/api。
第三类,reading choices 解析异常。返回体类似:
{"error":{"type":"upstream_error","message":"error reading choices: unexpected end of JSON"}}这个报错看着像网络问题,实际是 Model ID 写错导致上游返回了非预期结构。比如你把claude-sonnet-4-5写成了claude-sonnet-4.5,上游找不到模型,返回了一个错误页而不是标准 JSON,OpenClaw 解析choices字段时就崩了。修复是去模型对话页核对准确的 Model ID,逐字符比对。这个坑我踩过,排查了半小时才发现是点号写成了横杠。
第四类,OAuth 相关报错。如果你用的是 Claude Code 或 Codex 这类带 OAuth 流程的客户端,可能会遇到:
OAuth token exchange failed: invalid_grant这类报错通常出现在auth.json或settings.json里的 OAuth 段。OpenClaw 本身不强制 OAuth,但如果你接了 Claude Code 的 Anthropic 兼容层,需要确认auth.json里的baseUrl和apiKey与 settings 一致。三件套(Base URL + Key + Model ID)在auth.json和settings.json里必须完全一致,任何一处不一致都会导致 OAuth 流程拿到的 token 无法用于后续请求。
四类报错对照表:
| 报错 | 根因 | 修复动作 |
|---|---|---|
| 401 invalid api key | Key 错误/过期/位置错 | 重新生成并替换 |
| local proxy failed | 残留 proxy 字段 | 删除 proxy 字段 |
| reading choices | Model ID 写错 | 核对模型对话页 |
| OAuth invalid_grant | auth.json 与 settings 不一致 | 三件套对齐 |
排查时有个通用技巧:先看报错里的端口号和路径。127.0.0.1:7890指向代理残留,/v1/chat/completions指向 Base URL 多写了路径,choices指向 Model ID。报错信息本身就是线索,别急着改配置,先读一遍报错。
6. 语义一致的落地入口与长期维护建议
九大安全面听起来庞大,但落到 settings 这一层,真正需要你手动核对的就三类:鉴权、通道、日志。把这三类的片段配好、验证跑通、回滚路径留好,你就完成了一次可复现的安全面核对。剩下的 Skill 生态、容器运行时、K8s 策略,属于基础设施层,交给镜像扫描和 NetworkPolicy 更合适。
如果你在验证过程中卡在鉴权或接入环节,直接去 API Keys 页面重新生成一个 Key,再对照接入文档逐字段核对。文档里有完整的字段说明和示例,比对着改最快。想先确认模型能不能通,用模型对话页面发一条测试消息,能返回就说明三件套没问题,再回去改 settings。
长期跑编码任务或 Agent 工作流的话,Coding Plan 比按次调用更省心,额度稳定,不用频繁换 Key。配置方式和你刚改的aiGateway段一样,只是凭证来源不同。
最后留一个实用习惯:每次改 settings 之前先备份,改完先校验 JSON 语法再重启,重启后先跑通道健康检查再跑模型探针。这三步养成肌肉记忆,后面不管接什么模型、改什么通道,排查成本都会低很多。安全面核对不是一次性任务,而是每次配置变更后的固定动作。