openclaw-harden

Other

OpenClaw 安全加固专家。提供基于官方 Schema 配置的一站式安全加固方案,包括 Gateway 认证、沙箱隔离、SSRF 防护、工具限制等,可通过 openclaw doctor 验证。当用户提到 OpenClaw 安全、加固、配置安全策略时使用此技能。

Install

openclaw skills install openclaw-harden

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
内存中的 TokenToken 在运行时内存中使用外部密钥管理服务
提示词注入仍可能通过内容污染结合内容过滤和人工确认
零日漏洞未知的 OpenClaw 漏洞及时更新,关注安全公告
单用户信任边界假设单用户环境多用户请分离 Gateway 实例

📁 文件位置

文件位置说明
加固脚本/root/.openclaw/skills/openclaw-harden/scripts/harden-ubuntu.shUbuntu/Debian 主脚本
使用说明/root/.openclaw/skills/openclaw-harden/README.md详细文档
分析报告/root/.openclaw/workspace/memory/openclaw-harden 脚本优化报告.md优化报告
配置文件~/.openclaw/openclaw.jsonOpenClaw 配置
备份目录~/.openclaw/backups/配置备份
日志目录~/.openclaw/logs/安全日志目录(自动创建)
环境文件~/.openclaw/.envToken 等环境变量
安全报告~/.openclaw/security-report.txt加固报告
安全日志~/.openclaw/logs/security.log安全事件日志(自动创建)
命令审计日志~/.openclaw/logs/commands.logCommand-Logger Hook 日志(启用后自动创建)
Skill Vetter~/.agents/skills/skill-vetter/技能安全审查
Security Auditor~/.agents/skills/security-auditor/代码漏洞扫描

相关资源


💡 owen 提示

  1. 官方 Schema 配置 - 所有配置符合官方标准,可通过 doctor 验证
  2. 定期安全审计 - 建议每月执行一次 openclaw security audit
  3. 保持更新 - 及时更新 OpenClaw 到最新版本
  4. 备份!备份!备份! - 重要的事情说三遍
  5. 执行后验证 - 使用 openclaw doctor 验证配置是否保留
  6. Command-Logger Hook - 启用后自动记录所有命令事件,便于审计和排查
  7. 安全技能使用
    • 安装新技能前 → 用 Skill Vetter 审查
    • 代码提交前 → 用 Security Auditor 扫描
    • 查看命令历史 → tail -f ~/.openclaw/logs/commands.log | jq .

Skill 版本:1.0.0
更新时间:2026-03-08
维护:owen