第 3 课

安全审计、改配置与定时任务

用 openclaw security audit 找出小模型开着联网工具的高危项,用 config set 先 dry-run 再写入禁用规则并用 get、validate 复核,复查审计清零;用 openclaw cron 添加每小时运行的命令任务和每天 9 点的智能体任务,手动运行、查看记录后停用删除;最后按官方文档了解飞书、QQ 等渠道接入、配对码审批和命令所有者。

图文25 分钟OpenClaw 官方文档 ↗

课程目录第 3 / 3 课

学习位置仅保存在当前浏览器,有效期 180 天。

01 / 图文教材

图文教材

本课对照的官方页面:openclaw security、Running the audit、openclaw config、Cron jobs、openclaw cron、Pairing。第 1–4 步在 Linux x64(OpenClaw 2026.10.9)上实测,输出为节选;第 5 步需要真实的聊天账号,按官方文档整理,未实测。

OpenClaw 能读写文件、跑命令、上网,权限很大。这一课先用官方的安全审计找出风险并修掉,再加一个定时任务让它按时干活,最后了解怎么把它接到飞书、QQ、Telegram 等聊天软件上。

第 1 步:跑一次安全审计

openclaw security audit 会按官方的检查清单扫一遍配置,并按严重程度分级:

openclaw security audit

对照结果(节选,长行已折行):

OpenClaw security audit
Summary: 1 critical · 1 warn · 1 info

CRITICAL
models.small_params Small models require sandboxing
  and web tools disabled
- ollama/qwen3:0.6b (0.6B) @ agents.defaults.model.primary
  (unsafe; sandbox=off; web=[web_search, web_fetch, browser])
Uncontrolled input tools allowed: web_search, web_fetch,
  browser.
  Fix: ... tools.byProvider["provider/model"].deny=
  ["group:web","browser"] ...

WARN
gateway.trusted_proxies_missing Reverse proxy headers are
  not trusted

CRITICAL 这一条的意思是:小模型(300B 参数以下)更容易被网页里藏的恶意指令带偏(提示注入),却开着联网搜索、抓网页和浏览器工具。WARN 那条只在你用反向代理把控制台暴露出去时才相关,本机使用可以不管。

第 2 步:用 config set 关掉小模型的联网工具

按审计给的修复建议,给这个模型单独加一条禁用规则。先用 --dry-run 只校验不写入,确认没问题再正式写:

openclaw config set \
  'tools.byProvider["ollama/qwen3:0.6b"].deny' \
  '["group:web","browser"]' --strict-json --dry-run
openclaw config set \
  'tools.byProvider["ollama/qwen3:0.6b"].deny' \
  '["group:web","browser"]' --strict-json

对照结果:

Dry run successful: 1 update(s) validated against
  ~/.openclaw/openclaw.json.
Updated tools.byProvider["ollama/qwen3:0.6b"].deny. Change
  will apply without restarting the gateway.

读回来并校验整个配置文件:

openclaw config get tools.byProvider
openclaw config validate

对照结果:

{
  "ollama/qwen3:0.6b": {
    "deny": [
      "group:web",
      "browser"
    ]
  }
}
Config valid: ~/.openclaw/openclaw.json

第 2 课换上的 ollama/qwen3:1.7b 也是小模型,同样执行一遍,把路径里的模型名换掉即可。网关会热加载,不用重启。

第 3 步:复查审计结果

openclaw security audit

对照结果(节选):

Summary: 0 critical · 1 warn · 2 info

INFO
models.small_params Small models require sandboxing
  and web tools disabled
- ollama/qwen3:0.6b (0.6B) @ agents.defaults.model.primary
  (ok; sandbox=off; web=[off])
No web/browser tools detected for these models.

CRITICAL 清零,原来那条降为 INFO,状态从 unsafe 变成 ok、web=[off]。审计还建议再开沙箱(agents.defaults.sandbox.mode)做纵深防御,需要 Docker 等运行环境,见官方 Sandboxing 文档(https://docs.openclaw.ai/gateway/sandboxing)。另外 openclaw security audit --deep 会做更深入的检查;只读的总体检可以用 openclaw doctor --non-interactive。

第 4 步:加一个定时任务

OpenClaw 的定时任务(cron,CLI 里也叫 automation)有两类负载:给智能体发一条消息(--message),或者直接在网关上跑一条命令(--command)。先加一个每小时查一次磁盘的命令任务,--no-deliver 表示结果不往聊天渠道发:

openclaw cron add --name disk-check --every 1h \
  --command 'df -h / | tail -1' --no-deliver
openclaw cron list

对照结果(cron add 输出 JSON,这里只保留关键字段;列表有压缩):

{
  "id": "cba1dc4d-51b7-447d-9fd8-3d0235ae5b00",
  "name": "disk-check",
  "enabled": true,
  "schedule": { "kind": "every", "everyMs": 3600000 },
  "payload": { "kind": "command",
    "argv": ["sh", "-lc", "df -h / | tail -1"] },
  "delivery": { "mode": "none", "channel": "last" }
}

Name                Schedule               Status  Target
Heartbeat (main)    every 30m              idle    main
disk-check          every 1h               idle    isolated
Memory Dreaming...  cron 0 3 * * * (exact) idle    isolated

列表里另外两条是 OpenClaw 自带的:每 30 分钟一次的心跳,和每天 3 点整理记忆的任务。

不想等一小时,可以立刻手动跑一次,再看运行记录。run 和 runs 要用上面输出里的 id,用名字会报「Automation not found」:

openclaw cron run cba1dc4d-51b7-447d-9fd8-3d0235ae5b00
openclaw cron runs --id cba1dc4d-51b7-447d-9fd8-3d0235ae5b00

对照结果(节选):

{ "ok": true, "enqueued": true, ... }

"status": "ok",
"completionStatus": "succeeded",
"summary": "/dev/vdb  128G  42G  86G  33% /",
"durationMs": 31,
"nextRunAtIso": "2026-11-01T01:13:39.113+08:00"

练习完把它停掉并删除:

openclaw cron disable cba1dc4d-51b7-447d-9fd8-3d0235ae5b00
openclaw cron rm cba1dc4d-51b7-447d-9fd8-3d0235ae5b00

对照结果(disable 只保留关键字段):

"enabled": false,
"lastRunStatus": "ok",
{ "ok": true, "removed": true }

给智能体发消息的定时任务写法类似。下面这条每天早上 9 点(上海时间)让它整理待办,--disabled 表示先建好但不启用,--agent main 指定由哪个智能体执行:

openclaw cron add --name morning --agent main \
  --cron "0 9 * * *" --tz Asia/Shanghai \
  --message "整理今天的待办" --no-deliver --disabled

对照结果(只保留关键字段):

"name": "morning",
"enabled": false,
"schedule": { "kind": "cron", "expr": "0 9 * * *",
  "tz": "Asia/Shanghai" },
"payload": { "kind": "agentTurn",
  "message": "整理今天的待办", "toolsAllow": ["*"] },

实测时没带 --agent,会多一行提示「No --agent specified」,任务交给默认智能体。toolsAllow: ["*"] 表示定时运行时可用全部工具,想收紧可以看 openclaw cron add --help 里的工具相关参数。确认无误后用 openclaw cron enable <id> 启用。

第 5 步:接入聊天渠道与配对(官方文档描述,未实测)

到这里智能体只能在命令行和本机控制台里用。OpenClaw 支持把它接到聊天软件上,中文用户常用的有飞书(https://docs.openclaw.ai/channels/feishu)、QQ 机器人(https://docs.openclaw.ai/channels/qqbot)、企业微信(https://docs.openclaw.ai/channels/wecom),另有 Telegram、Discord、Slack 等。每个渠道都要先在对应平台申请机器人,再按官方页面运行 openclaw channels add 填写。

接上之后,陌生人私聊你的机器人时不会直接被处理。按官方 Pairing 页面,默认的私聊策略是「配对」:对方会收到一个 8 位配对码(1 小时内有效),你在本机批准后才放行:

openclaw pairing list telegram
openclaw pairing approve telegram <CODE>

批准也可以在 Control UI 的 Settings → Channels → DM access requests 里点 Approve。批准只开放私聊,不包括群聊。

另外,本课实跑 openclaw doctor --non-interactive 时提示还没有「命令所有者」(command owner)。它是唯一能通过聊天让 OpenClaw 升级、重启、改配置的人,接好渠道后按提示设置:

openclaw config set commands.ownerAllowFrom \
  '["telegram:123456789"]'

123456789 换成你自己在该渠道的用户 ID。最后可以用 openclaw skills list 看看自带了哪些技能(实测 55 个里有 22 个开箱可用,其余要先装对应命令行工具),按需启用。

小结

  • openclaw security audit 分级列出风险,并直接给出修复用的配置路径。
  • openclaw config set 先 --dry-run 再写入,config get、config validate 复核;网关热加载。
  • 小模型要禁用联网与浏览器工具:tools.byProvider["provider/model"].deny。
  • openclaw cron add 支持命令和智能体两类任务,run、runs、disable、rm 都用任务 id。
  • 接聊天渠道后靠配对码和命令所有者控制谁能用、谁能管,详见官方 Pairing 与 Security 文档。

本课资料

适用环境

  • 网页
  • macOS
  • Windows
  • Linux
  • iOS

官方文档

OpenClaw ↗