简单了解 OpenClaw 隐私保护

10 阅读7分钟

📋 目录

  1. 概述
  2. 数据存储架构
  3. 网络暴露控制
  4. 访问控制详解
  5. 会话隔离与数据泄露防护
  6. 敏感数据处理
  7. 第三方服务数据流向
  8. 加密状态总览
  9. 潜在风险与建议
  10. 推荐配置

概述

OpenClaw 的隐私设计遵循 "本地优先" 原则:

  • 数据默认只存储在你的机器上
  • 不自动上传到任何云服务
  • 完全开源可审计

但隐私保护也取决于你的配置方式和使用习惯。


数据存储架构

OpenClaw 的数据有6个类型,全部默认本地存储

数据类型存储位置内容说明
配置文件~/.openclaw/openclaw.jsonGateway 配置、通道设置、模型配置
凭证信息~/.openclaw/credentials/OAuth token、API key、配对状态
会话数据~/.openclaw/agents/<agentId>/sessions/完整对话历史(JSONL 格式)、元数据
工作区~/.openclaw/workspace/AGENTS.md、SOUL.md、记忆文件、Skills
运行日志/tmp/openclaw/openclaw-YYYY-MM-DD.log运行日志(可自定义路径)
设备配对~/.openclaw/devices/已配对节点设备信息

重要提醒

这些数据默认不会自动上传到任何云服务,但你主动配置的云服务集成(如 Telegram/WhatsApp 云同步)除外。


网络暴露控制

OpenClaw 设计了 5 层信任边界模型:

┌─────────────────────────────────────────────────────────────┐
│  第1层:Channel Access(消息渠道)                          │
│  • TLS 加密传输                                             │
│  • AllowFrom 白名单控制                                     │
│  • 渠道特定身份验证                                         │
├─────────────────────────────────────────────────────────────┤
│  第2层:Gateway 认证                                        │
│  • Token/Password 认证                                      │
│  • Tailscale 私有网络选项                                   │
│  • 默认绑定 127.0.0.1(仅本地)                             │
├─────────────────────────────────────────────────────────────┤
│  第3层:Session 隔离                                        │
│  • 每个会话独立(sessionKey = agent:channel:peer)          │
│  • dmScope 控制 DM 隔离级别                                 │
│  • 多用户场景自动隔离                                       │
├─────────────────────────────────────────────────────────────┤
│  第4层:工具执行沙箱                                        │
│  • Docker 沙箱模式可选                                      │
│  • Exec 审批(危险命令需确认)                              │
│  • SSRF 防护(DNS 固定 + IP 拦截)                          │
├─────────────────────────────────────────────────────────────┤
│  第5层:外部内容标记                                        │
│  • 网页/邮件内容用 XML 标签包裹                             │
│  • 安全警告注入                                             │
│  • 防止提示注入攻击                                         │
└─────────────────────────────────────────────────────────────┘

默认安全配置

  • Gateway 默认绑定 127.0.0.1:18789不接受外部连接
  • WebSocket 连接需要 auth.token(如果配置了)
  • 所有外部内容(网页/邮件)被标记为不可信

访问控制详解

1. DM(私聊)访问策略

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing",    // pairing | allowlist | open | disabled
      allowFrom: ["tg:123"],  // 仅 allowlist/open 模式使用
    }
  }
}
策略说明适用场景
pairing(默认)未知发送者需配对码批准个人使用,控制谁可以访问
allowlist仅允许列表中的用户已知固定用户群体
open允许所有人(需配合 allowFrom: ["*"]公开机器人
disabled关闭私聊仅群组使用

2. 配对码安全机制

  • 格式:8 位大写字母数字(不含 0O1I 易混淆字符)
  • 有效期1 小时
  • 并发限制:每个渠道最多 3 个待处理请求
  • 存储位置~/.openclaw/credentials/<channel>-pairing.json

3. 设备配对(Node)

  • iOS/Android/macOS 节点需显式批准
  • 设备 token 存储在 ~/.openclaw/devices/paired.json
  • 本地连接(回环或本机 Tailscale 地址)可自动批准

4. Gateway 认证配置

{
  gateway: {
    bind: "127.0.0.1",      // 默认仅本地,改为 0.0.0.0 会暴露到公网
    port: 18789,
    auth: {
      token: "your-secret-token",  // WebSocket 连接需验证
      password: "optional-password",
    },
    tailscale: {
      enabled: true,        // 仅允许 Tailscale 网络访问
    }
  }
}

⚠️ 警告:将 bind 改为 0.0.0.0 且未配置强认证会让任何人都能连接你的 Gateway。


会话隔离与数据泄露防护

多用户场景的安全风险

默认风险:如果多个用户给同一个 agent 发 DM,默认共享同一个会话上下文,可能导致隐私泄露

示例场景

  • Alice 给 agent 发消息讨论私人话题
  • Bob 随后发消息问"我们刚才聊了什么?"
  • 默认配置下,agent 可能向 Bob 透露 Alice 的私人信息

dmScope 配置

{
  session: {
    // 推荐多用户场景使用:
    dmScope: "per-channel-peer",  // 按渠道+发送者隔离
    
    // 其他选项:
    // "main" - 所有 DM 共享(适合单用户)
    // "per-peer" - 按发送者隔离(跨渠道共享)
    // "per-account-channel-peer" - 多账号场景
  }
}
模式会话 Key 格式适用场景
mainagent:<agentId>:main单用户,跨设备/渠道连续对话
per-peeragent:<agentId>:dm:<peerId>同一人在多渠道共享会话
per-channel-peeragent:<agentId>:<channel>:dm:<peerId>多用户隔离(推荐)
per-account-channel-peeragent:<agentId>:<channel>:<account>:dm:<peerId>多账号管理

会话数据保留策略

{
  session: {
    maintenance: {
      mode: "enforce",              // warn(仅警告)或 enforce(执行清理)
      pruneAfter: "30d",            // 30天后清理旧会话
      maxEntries: 500,              // 最多保留 500 个会话条目
      maxDiskBytes: "2gb",          // 会话目录磁盘上限
      highWaterBytes: "1.6gb",      // 触发清理的水位线(默认 80%)
      resetArchiveRetention: "14d", // 归档文件保留 14 天
      rotateBytes: "10mb",          // sessions.json 文件大小限制
    }
  }
}

会话重置机制

  • 每日重置:默认凌晨 4:00(网关主机本地时间)
  • 空闲重置:可配置 idleMinutes,超时后创建新会话
  • 手动重置:发送 /new/reset 立即创建新会话

敏感数据处理

1. API Key 存储现状

⚠️ 当前状态:API key 以明文存储在配置文件中

{
  models: {
    providers: {
      openai: {
        apiKey: "sk-..."  // 明文存储
      }
    }
  }
}

已知限制

  • OpenClaw 威胁模型(T-ACCESS-003)标记为高风险
  • 当前版本不提供内置加密
  • 依赖文件系统权限保护

缓解措施

  1. 使用环境变量替代明文存储:
    {
      gateway: {
        auth: {
          token: "${GATEWAY_TOKEN}"
        }
      }
    }
    
  2. 设置严格的文件权限:
    chmod 700 ~/.openclaw
    chmod 600 ~/.openclaw/openclaw.json
    
  3. 使用系统密钥管理(macOS Keychain 等)存储敏感凭证

2. 日志脱敏

{
  logging: {
    level: "info",
    redactSensitive: "tools",      // 工具输出脱敏(默认)
    redactPatterns: ["sk-.*"],     // 自定义脱敏正则
  }
}

重要

  • 脱敏仅影响控制台输出
  • 文件日志保持完整(包括敏感信息)
  • 默认脱敏规则会隐藏常见 API key 格式

3. macOS 日志隐私

macOS Unified Logging 默认会隐藏敏感 payload:

# 查看日志时,敏感内容会被标记为 <private>
log show --predicate 'subsystem == "ai.openclaw.gateway"'

# 如需查看私有数据(调试时),需显式启用:
sudo defaults write /Library/Preferences/Logging/Subsystems/ai.openclaw.gateway.plist Enable-Private-Data -bool true

4. 会话历史文件

  • 存储位置:~/.openclaw/agents/<agentId>/sessions/<sessionId>.jsonl
  • 格式:明文 JSON Lines,每条记录一行
  • 内容:完整对话历史、工具调用、token 使用统计
  • 保护:依赖文件系统权限,无内置加密

第三方服务数据流向

使用以下功能时,数据会发送到外部服务:

功能数据接收方传输内容是否必需
AI 模型调用OpenAI/Anthropic/Kimi 等消息内容、工具结果、系统提示可选(可用本地模型)
Web 搜索Brave Search API搜索查询可选
Perplexity 搜索Perplexity API搜索查询可选
网页抓取目标网站URL、请求头按需
TTS 语音ElevenLabs 等转换的文本可选
浏览器自动化目标网站浏览行为、Cookie按需
频道集成WhatsApp/Telegram/Discord 等消息元数据、内容按渠道配置
诊断遥测OTLP 收集器(如配置)指标、追踪、日志可选

关键风险点

  1. 云端 AI 模型:使用 OpenAI/Anthropic/Kimi 等服务时,所有对话内容都会发送到对应服务商
  2. 搜索工具web_search 会将查询发送到 Brave,perplexity 同理
  3. Skill 生态:第三方 Skill 可能调用外部 API,需自行审查

数据最小化建议

{
  // 使用本地模型避免云端传输
  agents: {
    defaults: {
      model: {
        primary: "ollama/llama3.2"  // 本地 Ollama 模型
      }
    }
  },
  
  // 禁用不需要的工具
  tools: {
    web: {
      search: { enabled: false }  // 禁用 Brave 搜索
    }
  }
}

加密状态总览

层面加密状态说明
数据传输(Gateway ↔ 渠道)✅ TLSWhatsApp/Telegram 等使用各自协议加密
数据传输(Gateway ↔ 模型 API)✅ TLS所有模型调用使用 HTTPS
本地配置文件明文API key、token 等未加密存储
会话历史(JSONL)明文依赖文件系统权限保护
日志文件明文建议设置适当文件权限
凭证存储明文威胁模型标记为需改进(T-ACCESS-003)
WebSocket 连接⚠️ 可选 TLS本地默认不加密,远程建议启用 WSS

启用 WebSocket TLS(远程场景)

{
  gateway: {
    tls: {
      enabled: true,
      cert: "/path/to/cert.pem",
      key: "/path/to/key.pem"
    }
  }
}

潜在风险与建议

🔴 高风险

1. Token 明文存储(T-ACCESS-003)

  • 风险:恶意软件、物理访问、配置备份泄露可导致凭证被盗
  • 缓解
    • 使用环境变量 ${VAR_NAME} 替代明文
    • 设置 chmod 700 ~/.openclaw
    • 使用系统密钥管理工具

2. 恶意 Skill 供应链攻击(T-PERSIST-001)

  • 风险:ClawHub 的 Skill 审核有限,可能包含恶意代码
  • 缓解
    • 审查 Skill 代码后再安装
    • 仅从可信来源安装
    • 使用沙箱模式运行不受信 Skill

3. 提示注入攻击(T-EXEC-001/002)

  • 风险:通过消息或网页内容操控 agent 行为
  • 缓解
    • 外部内容包装机制
    • 敏感操作需 exec-approval
    • 不要在群聊中暴露敏感工具

🟡 中风险

4. Gateway 暴露公网

  • 风险:配置 bind: 0.0.0.0 且认证弱时,任何人可连接
  • 缓解
    • 使用 Tailscale 或 VPN 替代公网暴露
    • 强 token 认证
    • 防火墙限制访问 IP

5. 会话共享泄露

  • 风险:多用户场景默认共享会话上下文
  • 缓解:配置 dmScope: "per-channel-peer"

6. 浏览器 SSRF

  • 风险browser 工具可能访问内网服务
  • 缓解
    • 默认 dangerouslyAllowPrivateNetwork: true,改为 false 严格模式
    • 或使用隔离的浏览器实例

推荐配置

高隐私场景配置

// ~/.openclaw/openclaw.json
{
  // 1. 本地绑定,拒绝外部连接
  gateway: {
    bind: "127.0.0.1",
    port: 18789,
    auth: {
      token: "${GATEWAY_TOKEN}"  // 使用环境变量
    }
  },
  
  // 2. 用户隔离
  session: {
    dmScope: "per-channel-peer",  // 每个用户独立会话
    maintenance: {
      mode: "enforce",
      pruneAfter: "14d",          // 14天清理旧会话
      maxEntries: 200,
      maxDiskBytes: "500mb"
    }
  },
  
  // 3. 使用本地模型
  agents: {
    defaults: {
      model: {
        primary: "ollama/llama3.2",  // 本地模型
        fallbacks: []
      },
      sandbox: {
        mode: "non-main"  // 非主会话使用 Docker 沙箱
      },
      heartbeat: {
        every: "0m"  // 禁用自动心跳(节省 API 调用)
      }
    }
  },
  
  // 4. 禁用外部工具
  tools: {
    web: {
      search: { enabled: false },
      perplexity: { enabled: false }
    }
  },
  
  // 5. 日志脱敏
  logging: {
    level: "warn",  // 减少日志量
    redactSensitive: "tools",
    file: "/var/log/openclaw/openclaw.log"
  },
  
  // 6. 严格浏览器策略
  browser: {
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: false  // 禁止访问内网
    }
  }
}

单用户简化配置

{
  gateway: {
    bind: "127.0.0.1",
    auth: { token: "${GATEWAY_TOKEN}" }
  },
  channels: {
    whatsapp: {
      allowFrom: ["+15555550123"]  // 仅允许你的号码
    }
  },
  session: {
    dmScope: "main"  // 单用户不需要隔离
  }
}

远程访问安全配置(Tailscale)

{
  gateway: {
    bind: "100.x.x.x",  // Tailscale IP
    port: 18789,
    auth: {
      token: "${GATEWAY_TOKEN}"
    },
    tailscale: {
      enabled: true  // 仅接受 Tailscale 网络连接
    }
  }
}

总结

✅ OpenClaw 隐私优势

  1. 本地优先:数据默认只存储在你的机器上
  2. 开源透明:代码可审计,无隐藏后门
  3. 多层控制:从网络到会话的多层访问控制
  4. 灵活配置:可根据隐私需求调整各项设置

⚠️ 使用注意事项

  1. 配置文件加密:当前版本不提供内置加密,需自行使用环境变量和文件权限保护
  2. 云端模型:使用 OpenAI/Anthropic 等服务时,对话内容必然外传到服务商
  3. Skill 审查:第三方 Skill 代码需自行审查可信度
  4. 公网暴露:避免将 Gateway 直接暴露到公网,使用 Tailscale/VPN 替代

🔒 极致隐私建议

  • 使用本地模型(Ollama/Llama.cpp)替代云端 API
  • 启用 Docker 沙箱运行所有工具
  • 定期清理会话数据
  • 审查每个安装的 Skill
  • 使用环境变量存储所有敏感凭证
  • 将工作区放在加密的磁盘映像中(如 macOS FileVault)

参考文档