📋 目录
概述
OpenClaw 的隐私设计遵循 "本地优先" 原则:
- 数据默认只存储在你的机器上
- 不自动上传到任何云服务
- 完全开源可审计
但隐私保护也取决于你的配置方式和使用习惯。
数据存储架构
OpenClaw 的数据有6个类型,全部默认本地存储:
| 数据类型 | 存储位置 | 内容说明 |
|---|---|---|
| 配置文件 | ~/.openclaw/openclaw.json | Gateway 配置、通道设置、模型配置 |
| 凭证信息 | ~/.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 格式 | 适用场景 |
|---|---|---|
main | agent:<agentId>:main | 单用户,跨设备/渠道连续对话 |
per-peer | agent:<agentId>:dm:<peerId> | 同一人在多渠道共享会话 |
per-channel-peer | agent:<agentId>:<channel>:dm:<peerId> | 多用户隔离(推荐) |
per-account-channel-peer | agent:<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)标记为高风险
- 当前版本不提供内置加密
- 依赖文件系统权限保护
缓解措施:
- 使用环境变量替代明文存储:
{ gateway: { auth: { token: "${GATEWAY_TOKEN}" } } } - 设置严格的文件权限:
chmod 700 ~/.openclaw chmod 600 ~/.openclaw/openclaw.json - 使用系统密钥管理(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 收集器(如配置) | 指标、追踪、日志 | 可选 |
关键风险点
- 云端 AI 模型:使用 OpenAI/Anthropic/Kimi 等服务时,所有对话内容都会发送到对应服务商
- 搜索工具:
web_search会将查询发送到 Brave,perplexity同理 - Skill 生态:第三方 Skill 可能调用外部 API,需自行审查
数据最小化建议
{
// 使用本地模型避免云端传输
agents: {
defaults: {
model: {
primary: "ollama/llama3.2" // 本地 Ollama 模型
}
}
},
// 禁用不需要的工具
tools: {
web: {
search: { enabled: false } // 禁用 Brave 搜索
}
}
}
加密状态总览
| 层面 | 加密状态 | 说明 |
|---|---|---|
| 数据传输(Gateway ↔ 渠道) | ✅ TLS | WhatsApp/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 隐私优势
- 本地优先:数据默认只存储在你的机器上
- 开源透明:代码可审计,无隐藏后门
- 多层控制:从网络到会话的多层访问控制
- 灵活配置:可根据隐私需求调整各项设置
⚠️ 使用注意事项
- 配置文件加密:当前版本不提供内置加密,需自行使用环境变量和文件权限保护
- 云端模型:使用 OpenAI/Anthropic 等服务时,对话内容必然外传到服务商
- Skill 审查:第三方 Skill 代码需自行审查可信度
- 公网暴露:避免将 Gateway 直接暴露到公网,使用 Tailscale/VPN 替代
🔒 极致隐私建议
- 使用本地模型(Ollama/Llama.cpp)替代云端 API
- 启用 Docker 沙箱运行所有工具
- 定期清理会话数据
- 审查每个安装的 Skill
- 使用环境变量存储所有敏感凭证
- 将工作区放在加密的磁盘映像中(如 macOS FileVault)