OpenClaw 安全加固专家
你是 OpenClaw 安全加固专家,帮助用户在几分钟内完成一站式安全加固,大幅提升 OpenClaw 的安全性。所有配置均使用官方 Schema,可通过 openclaw doctor 验证。
核心安全原则
| 原则 | 说明 | |---|---| | 最小权限 | 只给 AI 必需的最小访问权限 | | 纵深防御 | 多层防护,一层失效还有其他层 | | 默认拒绝 | 不明确允许的,一律禁止 | | 审计可追溯 | 所有操作都有日志记录 | | 官方 Schema | 所有配置符合官方标准,可通过 doctor 验证 |
10 步加固流程
第 1 步:检查依赖
# 检查必需工具
command -v jq && command -v openssl
依赖说明:
jq- JSON 处理工具,用于智能合并配置openssl- 生成强随机 Token
第 2 步:检查 Gateway 状态
pgrep -f "openclaw.*gateway"
自动检测 Gateway 是否运行,决定是否重启。
第 3 步:创建备份
cp ~/.openclaw/openclaw.json ~/.openclaw/backups/openclaw.json.bak.$(date +%Y%m%d_%H%M%S)
# 分段备份关键配置
jq '.models' ~/.openclaw/openclaw.json > backups/models.bak.json
jq '.channels' ~/.openclaw/openclaw.json > backups/channels.bak.json
jq '.agents' ~/.openclaw/openclaw.json > backups/agents.bak.json
增强功能: 分段备份 models/channels/agents,支持精确回滚
第 4 步:生成强随机 Token
GATEWAY_TOKEN=$(openssl rand -hex 32)
为什么重要:
- OpenClaw 的 MCP Gateway 默认可能没有认证或弱认证
- 64 位随机字符串,暴力破解需要数亿年
改进: Token 自动保存到 ~/.openclaw/.env
第 5 步:生成安全配置(官方 Schema)
生成符合官方 Schema 的安全配置:
{
"gateway": {
"bind": "loopback",
"auth": {
"mode": "token",
"token": "${GATEWAY_TOKEN}",
"rateLimit": {
"enabled": true,
"maxAttempts": 60,
"windowMs": 60000
}
},
"controlUi": {
"enabled": true,
"allowInsecureAuth": false,
"dangerouslyAllowHostHeaderOriginFallback": false,
"dangerouslyDisableDeviceAuth": false
}
},
"agents": {
"defaults": {
"sandbox": {
"mode": "required"
}
}
},
"tools": {
"profile": "coding",
"elevated": {
"enabled": false
},
"exec": {
"allow_background": false,
"allow_pty": false,
"timeout": 30,
"deny": [
"rm",
"mkfs",
"dd",
"wget",
"curl"
]
},
"web": {
"fetch": {
"blockedHosts": [
"169.254.169.254",
"metadata.google.internal",
"169.254.169.253"
]
}
}
},
"browser": {
"ssrfPolicy": {
"dangerouslyAllowPrivateNetwork": false,
"hostnameAllowlist": [
"*.github.com",
"*.stackoverflow.com",
"*.npmjs.com",
"*.openclaw.ai"
]
}
},
"logging": {
"level": "info",
"redactSensitive": "tools"
}
}
关键安全配置(官方 Schema):
- ✅
gateway.bind: "loopback"- 仅本地访问 - ✅
gateway.auth.mode: "token"- Token 认证 - ✅
gateway.auth.rateLimit- 速率限制 - ✅
controlUi.allowInsecureAuth: false- 禁用不安全认证 - ✅
tools.elevated.enabled: false- 禁止提权执行 - ✅
agents.defaults.sandbox.mode: "required"- 强制沙箱模式 - ✅
tools.exec.deny- 危险命令拒绝列表 - ✅
browser.ssrfPolicy- SSRF 防护策略 - ✅
tools.web.fetch.blockedHosts- blocked 主机列表 - ✅
hooks.internal.entries.command-logger.enabled: true- 命令审计日志 - ✅
logging.redactSensitive: "tools"- 敏感信息脱敏
第 6 步:合并配置
# 使用 jq 智能合并而非覆盖
jq -s '.[0] * .[1]' existing.json security-patch.json > merged.json
关键改进:
- ✅ 保留现有 models/channels/agents 配置
- ✅ 仅更新安全相关字段
- ✅ 自动验证配置有效性
第 7 步:验证配置
# 验证 JSON 格式和官方 Schema 配置
# 脚本自动验证以下配置是否存在:
# - tools.elevated.enabled
# - agents.defaults.sandbox.mode
# - browser.ssrfPolicy
# - tools.web.fetch.blockedHosts
新增: 配置验证,失败自动回滚
第 8 步:配置环境变量
# 安全存储 Token
echo "OPENCLAW_GATEWAY_TOKEN=$GATEWAY_TOKEN" >> ~/.openclaw/.env
chmod 600 ~/.openclaw/.env
第 9 步:设置文件权限
chmod 600 ~/.openclaw/openclaw.json
第 10 步:重启 Gateway
# 自动检测并重启
if pgrep -f "openclaw.*gateway" > /dev/null; then
openclaw gateway restart
fi
第 11 步:安装安全技能(新增)
# 自动安装两个核心安全技能
# 仅支持 ClawHub 官方包,安装失败或已有时自动跳过!
自动安装的技能:
- ✅ Skill Vetter - 在安装任何技能前进行安全审查
- ✅ Security Auditor - 扫描代码中的 OWASP Top 10 漏洞
安装方式:
# 仅使用 ClawHub 官方包(无需认证)
npx skills add @openclaw/skill-vetter -g -y
npx skills add @openclaw/security-auditor -g -y
优势:
- 🚫 无需 GitHub 认证 - 不要求输入 username 或配置 SSH key
- ⚡ 快速安装 - 使用官方 ClawHub 源
- ⏭️ 失败跳过 - 安装失败或已有时自动跳过,不影响脚本运行
- 🛡️ 仅官方包 - 只信任 ClawHub 官方技能,确保安全性
第 12 步:启用 Command-Logger Hook(新增)
# 自动配置 hooks.internal.entries.command-logger.enabled: true
# 所有命令事件记录到 ~/.openclaw/logs/commands.log
Command-Logger Hook 功能:
- ✅ 命令审计 - 记录所有
/new、/reset、/stop等命令事件 - ✅ JSONL 格式 - 便于日志分析和审计
- ✅ 静默运行 - 后台自动记录,不影响性能
- ✅ 追溯能力 - 支持安全事件回溯和故障排查
日志位置: ~/.openclaw/logs/commands.log
查看日志:
# 查看最近 20 条命令
tail -n 20 ~/.openclaw/logs/commands.log
# 格式化查看
cat ~/.openclaw/logs/commands.log | jq .
# 实时监控
tail -f ~/.openclaw/logs/commands.log | jq .
🚀 快速执行脚本
执行加固
# 运行加固脚本
bash /root/.openclaw/skills/openclaw-harden/scripts/harden-ubuntu.sh
# 查看生成的报告
cat ~/.openclaw/security-report.txt
# Gateway 会自动重启(如果需要)
执行流程
[1/12] 检查依赖 ✓
[2/12] 检查 Gateway 状态 ✓
[3/12] 创建备份 ✓
[4/12] 生成 Token ✓
[5/12] 生成安全配置 ✓
[6/12] 合并配置 ✓
[7/12] 验证配置 ✓
[8/12] 配置环境变量 ✓
[9/12] 设置文件权限 ✓
[10/12] 重启 Gateway ✓
[11/12] 安装安全技能 ✓
[12/12] 启用 Command-Logger Hook ✓
[13/12] 生成报告 ✓
验证加固效果
# 测试 1: 检查 Gateway 监听地址
netstat -tlnp | grep 18789
# 期望输出:127.0.0.1:18789(不是 0.0.0.0:18789)
# 测试 2: 尝试提权执行(应该失败)
openclaw run --tool exec --params '{"command":"whoami","elevated":true}'
# 测试 3: 尝试读取敏感文件(应该失败)
openclaw run --tool read --params '{"file_path":"~/.ssh/id_rsa"}'
# 测试 4: 安全审计
openclaw security audit
openclaw security audit --deep
# 测试 5: 健康检查
openclaw health
openclaw doctor
# 测试 6: 验证官方 Schema 配置(应该保留)
jq '.tools.elevated, .agents.defaults.sandbox, .browser.ssrfPolicy' ~/.openclaw/openclaw.json
# 测试 7: 验证安全技能已安装
ls -la ~/.agents/skills/ | grep -E "(skill-vetter|security-auditor)"
# 测试 8: 验证 Command-Logger Hook 已启用
jq '.hooks.internal.entries.command-logger.enabled' ~/.openclaw/openclaw.json
# 期望输出:true
# 测试 9: 查看命令审计日志
tail -n 10 ~/.openclaw/logs/commands.log
# 期望输出:JSONL 格式的命令事件日志
攻击场景防护对比
| 攻击类型 | 加固前 | 加固后 | 防护机制 | |---|---|---|---| | RCE 远程代码执行 | ✅ 反弹 shell 成功 | ❌ 失败 | 禁止提权 + 沙箱隔离 | | 文件系统遍历窃取凭证 | ✅ 读取 SSH 私钥 | ❌ 失败 | 路径白名单 + 沙箱 | | SSRF 攻击云服务 | ✅ 获取 AWS 凭证 | ❌ 失败 | browser.ssrfPolicy | | 浏览器会话劫持 | ✅ 获取网站 cookies | ❌ 失败 | SSRF 策略 + 白名单 | | 配置被 doctor 删除 | ✅ 可删除 | ❌ 不会删除 | 官方 Schema 配置 |
🔄 回滚方法
如果加固后出现问题,可以快速回滚:
# 方法 1:使用完整备份
cp ~/.openclaw/backups/openclaw.json.bak.YYYYMMDD_HHMMSS ~/.openclaw/openclaw.json
openclaw gateway restart
# 方法 2:使用分段备份恢复
cp ~/.openclaw/backups/models.bak.json ~/.openclaw/openclaw.json
jq --slurpfile channels ~/.openclaw/backups/channels.bak.json \
--slurpfile agents ~/.openclaw/backups/agents.bak.json \
'.channels = $channels[0] | .agents = $agents[0]' \
~/.openclaw/openclaw.json > temp.json && mv temp.json ~/.openclaw/openclaw.json
openclaw gateway restart
优势: 自动回滚机制,失败时立即恢复
进阶方案
方案 A:Docker 完全隔离
参考 references/docker-isolation.md 获取 Docker 部署方案。
方案 B:Systemd 服务托管
参考 references/systemd-service.md 获取 Systemd 配置。
方案 C:实时监控告警
参考 references/monitoring-alert.md 获取监控告警配置。
已知限制
| 限制 | 说明 | 缓解方案 |
|---|---|---|
| 配置可被编辑 | AI 可能尝试编辑 openclaw.json | 设置文件只读:chattr +i openclaw.json |
| 内存中的 Token | Token 在运行时内存中 | 使用外部密钥管理服务 |
| 提示词注入 | 仍可能通过内容污染 | 结合内容过滤和人工确认 |
| 零日漏洞 | 未知的 OpenClaw 漏洞 | 及时更新,关注安全公告 |
| 单用户信任边界 | 假设单用户环境 | 多用户请分离 Gateway 实例 |
📁 文件位置
| 文件 | 位置 | 说明 |
|------|------|------|
| 加固脚本 | /root/.openclaw/skills/openclaw-harden/scripts/harden-ubuntu.sh | Ubuntu/Debian 主脚本 |
| 使用说明 | /root/.openclaw/skills/openclaw-harden/README.md | 详细文档 |
| 分析报告 | /root/.openclaw/workspace/memory/openclaw-harden 脚本优化报告.md | 优化报告 |
| 配置文件 | ~/.openclaw/openclaw.json | OpenClaw 配置 |
| 备份目录 | ~/.openclaw/backups/ | 配置备份 |
| 日志目录 | ~/.openclaw/logs/ | 安全日志目录(自动创建) |
| 环境文件 | ~/.openclaw/.env | Token 等环境变量 |
| 安全报告 | ~/.openclaw/security-report.txt | 加固报告 |
| 安全日志 | ~/.openclaw/logs/security.log | 安全事件日志(自动创建) |
| 命令审计日志 | ~/.openclaw/logs/commands.log | Command-Logger Hook 日志(启用后自动创建) |
| Skill Vetter | ~/.agents/skills/skill-vetter/ | 技能安全审查 |
| Security Auditor | ~/.agents/skills/security-auditor/ | 代码漏洞扫描 |
相关资源
- OpenClaw 官方文档:https://docs.openclaw.ai
- 官方安全文档:https://docs.openclaw.ai/gateway/security
- MCP 安全最佳实践:https://modelcontextprotocol.io/security
- 运维知识笔记:
/root/.openclaw/workspace/memory/openclaw-运维笔记.md - 官方 Schema 配置:
/root/.openclaw/workspace/memory/openclaw-官方 Schema 配置对照表.md
💡 owen 提示
- 官方 Schema 配置 - 所有配置符合官方标准,可通过 doctor 验证
- 定期安全审计 - 建议每月执行一次
openclaw security audit - 保持更新 - 及时更新 OpenClaw 到最新版本
- 备份!备份!备份! - 重要的事情说三遍
- 执行后验证 - 使用
openclaw doctor验证配置是否保留 - Command-Logger Hook - 启用后自动记录所有命令事件,便于审计和排查
- 安全技能使用:
- 安装新技能前 → 用 Skill Vetter 审查
- 代码提交前 → 用 Security Auditor 扫描
- 查看命令历史 →
tail -f ~/.openclaw/logs/commands.log | jq .
Skill 版本:1.0.0
更新时间:2026-03-08
维护:owen
微信扫一扫