案例07:数据安全与卸载
📑 目录
第一部分:OpenClaw 数据存储位置
查看数据存储结构
# 查看 OpenClaw 主要数据目录
ls -la ~/.openclaw/
主要目录说明:
~/.openclaw/
├── openclaw.json ← 配置文件(含模型配置、API Key 引用)
├── workspace/ ← 默认工作区(文件、记忆、技能)
│ ├── MEMORY.md ← 长期记忆
│ ├── SOUL.md ← 行为准则
│ ├── IDENTITY.md ← 身份定义
│ ├── TOOLS.md ← 工具备忘
│ ├── skills/ ← 技能文件
│ ├── memory/ ← 每日笔记
│ └── ... ← 用户创建的文件
├── workspace-tardis/ ← tardis Agent 的工作区
├── workspace-clara/ ← clara Agent 的工作区(如有)
├── sessions/ ← 会话记录
├── skills/ ← 系统级技能
└── logs/ ← 运行日志
# 查看各目录占用空间
du -sh ~/.openclaw/
du -sh ~/.openclaw/workspace/
du -sh ~/.openclaw/sessions/
自定义工作区位置
# 如果需要将数据存储到特定位置(如加密磁盘)
# 方法1:在 openclaw.json 中配置 workspace 路径
"workspace": "/path/to/encrypted/disk/workspace"
# 方法2:使用符号链接
ln -s /path/to/encrypted/disk/workspace ~/.openclaw/workspace
# 加密磁盘建议:
# - Linux: LUKS 加密分区
# - 或使用 encfs/cryptomator 加密目录
# - 确保 OpenClaw 运行前磁盘已挂载
📌 说明:了解数据存在哪里是保障安全的第一步。OpenClaw 的所有数据都在本地文件系统,不依赖云端存储。
第二部分:使用中的数据安全
哪些数据会发送到外部
# OpenClaw 只在以下情况使用外部网络:
1. web_search — 发送搜索关键词到搜索引擎提供商
发送内容:搜索关键词
不发送:对话内容、文件内容、个人信息
2. web_fetch — 发送 HTTP 请求到目标网站
发送内容:URL 地址
不发送:对话内容、文件内容
3. 大模型 API 调用 — 发送 prompt 到模型提供商
发送内容:对话 prompt(包含你输入的内容和系统指令)
不发送:本地文件(除非你在 prompt 中引用了文件内容)
4. 视频/图片生成 API
发送内容:提示词文本,可能包含参考图片
不发送:本地文件内容
# 安全建议:
# - 不要在对话中粘贴敏感信息(密码、身份证号、银行信息等)
# - 敏感数据存储在本地文件中,不要在对话中引用
# - 如需要处理敏感数据,使用本地模型(离线运行)
敏感数据处理规范
# 在 OpenClaw 中处理敏感数据时的操作规范
# ❌ 不要做:
- 在对话中粘贴密码、Token、身份证号
- 在 MEMORY.md 中明文存储 API Key
- 在 workspace 文件中存储未加密的敏感数据
- 让 AI 在 prompt 中包含敏感信息发送给外部 API
# ✅ 应该做:
- 敏感数据使用环境变量存储
- 在 openclaw.json 中引用环境变量而非明文
- 敏感文件存储在加密目录中
- 使用本地模型处理敏感数据(不经过外部 API)
- 在对话中使用脱敏数据做演示
# 环境变量方式:
export SENSITIVE_DATA="实际值"
# 在对话中:
"请读取环境变量 SENSITIVE_DATA 的值并处理"
# OpenClaw 支持在配置中引用环境变量:
"apiKey": "${DASHSCOPE_API_KEY}"
文件权限设置
# 确保 OpenClaw 数据目录的权限正确
# 检查当前权限
ls -la ~/.openclaw/
# 设置为仅所有者可读写
chmod -R 700 ~/.openclaw/
# 检查配置文件中的 API Key 是否明文存储
grep -n "apiKey\|token\|secret" ~/.openclaw/openclaw.json
# 如果是明文,改为环境变量引用:
# 原:
"apiKey": "sk-xxxxx"
# 改为:
"apiKey": "${DASHSCOPE_API_KEY}"
# 然后在 ~/.bashrc 或 ~/.zshrc 中设置环境变量:
export DASHSCOPE_API_KEY="sk-xxxxx"
会话数据安全
# OpenClaw 的会话记录存储在本地
# 查看会话记录
ls -la ~/.openclaw/sessions/
# 如需清除历史会话记录
rm -rf ~/.openclaw/sessions/*
# 如需定期自动清理,创建定时任务:
"请创建一个定时任务:
- 时间:每周一凌晨3点
- 任务:清除 ~/.openclaw/sessions/ 目录下超过30天的会话记录"
# 注意:清除会话记录后,AI 将不再能访问这些历史对话。
# 重要的对话内容应该提前保存到 MEMORY.md 或工作区文件中。
第三部分:API Key 安全管理
检查当前 API Key 存储方式
# 检查配置文件中 API Key 的存储方式
cat ~/.openclaw/openclaw.json | grep -A2 -B2 "apiKey\|api_key"
# 安全等级判断:
# ❌ 明文存储 — Key 直接写在配置文件中
# ⚠️ 环境变量引用 — 使用 ${ENV_VAR} 方式引用
# ✅ 外部密钥管理 — 使用 vault/密钥管理服务
# 如果是明文存储,立即修改:
# 1. 将 Key 值移到环境变量
# 2. 配置文件中改为环境变量引用
# 3. 重新配置环境变量:
export DASHSCOPE_API_KEY="sk-新的key"
# 4. 测试配置是否生效
openclaw status
API Key 轮换
# 定期更换 API Key 是最佳安全实践
# 轮换步骤:
# 1. 在模型提供商控制台生成新 Key
# 2. 更新环境变量:
export DASHSCOPE_API_KEY="sk-新key"
# 3. 删除旧 Key(在提供商控制台中禁用)
# 4. 重启 OpenClaw 使配置生效
openclaw gateway restart
# 建议:
# - 每 3-6 个月轮换一次 API Key
# - 设置 API Key 使用配额限制
# - 启用 Key 使用告警(异常用量通知)
# - 不同用途使用不同的 Key(隔离风险)
API Key 泄露应急处理
# 如果怀疑 API Key 泄露,立即执行:
# 1. 立即在提供商控制台禁用/删除泄露的 Key
# 2. 生成新的 Key
# 3. 更新环境变量
export DASHSCOPE_API_KEY="sk-新key"
# 4. 重启 OpenClaw
openclaw gateway restart
# 5. 检查是否有异常使用记录
# - 查看提供商控制台的使用量统计
# - 检查是否有未知 IP 的调用
# - 检查费用是否异常
# 6. 检查泄露途径
# - 是否在不安全的对话中粘贴过 Key
# - 是否在日志中明文输出过
# - 是否在不安全的文件中存储过
# 修复泄露途径,防止再次发生
第四部分:网络隔离与离线运行
配置本地模型实现完全离线
# 安装 Ollama 运行本地模型
# 安装
curl -fsSL https://ollama.com/install.sh | sh
# 拉取模型(选择一个适合的)
ollama pull qwen2.5:7b # 7B 参数,8GB 内存即可运行
ollama pull qwen2.5:14b # 14B 参数,需要 16GB 内存
ollama pull llama3.1:8b # Llama 3.1,8B 参数
# 验证本地模型可用
ollama run qwen2.5:7b "你好"
# 在 openclaw.json 中配置本地模型:
{
"model": {
"provider": "ollama",
"modelId": "qwen2.5:7b",
"apiKey": "",
"baseUrl": "http://localhost:11434"
}
}
# 重启 OpenClaw
openclaw gateway restart
# 验证使用本地模型
openclaw status
断网运行功能限制
防火墙规则配置
# 如果需要限制 OpenClaw 的网络访问
# 仅允许必要的出站连接:
# 1. 本地模型:localhost:11434
# 2. 消息平台:钉钉/微信等服务的域名
# 3. 其他:全部禁止
# iptables 示例(仅允许本地 Ollama):
iptables -A OUTPUT -d 127.0.0.1 -p tcp --dport 11434 -j ACCEPT
iptables -A OUTPUT -j DROP
# firewalld 示例:
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" destination address="127.0.0.1" port port="11434" protocol="tcp" accept'
firewall-cmd --reload
# 使用本地模型 + 防火墙限制后,
# OpenClaw 完全在本地运行,数据不会外传。
第五部分:审计与日志
查看运行日志
# 查看 OpenClaw 运行日志
ls -la ~/.openclaw/logs/
# 查看最近的日志
tail -100 ~/.openclaw/logs/openclaw.log
# 查看工具调用日志
tail -100 ~/.openclaw/logs/tools.log
# 搜索特定操作
grep "web_search\|web_fetch\|exec" ~/.openclaw/logs/tools.log
# 日志中会记录:
# - 每次工具调用的时间和参数
# - 文件读写操作
# - 命令执行记录
# - API 调用记录
定期审计
# 创建定期审计任务
请创建一个定时任务:
- 名称:安全审计-每周
- 时间:每周五下午5点
- 任务内容:
1. 检查 ~/.openclaw/ 目录下是否有明文 API Key
2. 检查文件权限是否正确
3. 检查是否有异常的工具调用记录
4. 检查 API 用量是否正常
5. 检查会话记录是否需要清理
6. 生成审计报告保存到 workspace/security-audit/
审计报告模板:
# 安全审计报告
日期:[日期]
## API Key 安全
- [ ] 配置文件中无明文 Key
- [ ] 环境变量已设置
## 文件权限
- [ ] ~/.openclaw/ 权限 700
- [ ] 无异常文件
## 工具调用
- 本周 web_search 调用次数:[N]
- 本周 web_fetch 调用次数:[N]
- 本周 exec 调用次数:[N]
- 异常调用:[有/无]
## API 用量
- 本周 Token 用量:[N]
- 费用:[金额]
- 异常:[有/无]
## 建议
[审计建议]
第六部分:彻底卸载 OpenClaw
备份数据(卸载前必须执行)
# 卸载前备份所有需要保留的数据
# 1. 备份工作区文件(对话记录、记忆、技能文件等)
cp -r ~/.openclaw/workspace/ ~/backup/openclaw-workspace/
cp -r ~/.openclaw/workspace-tardis/ ~/backup/openclaw-workspace-tardis/
# 2. 备份配置文件(模型配置等,注意去除 API Key)
cp ~/.openclaw/openclaw.json ~/backup/openclaw-config.json
# 3. 备份会话记录(如需保留)
cp -r ~/.openclaw/sessions/ ~/backup/openclaw-sessions/
# 4. 备份技能文件
cp -r ~/.openclaw/skills/ ~/backup/openclaw-skills/
# 5. 备份日志(如需审计保留)
cp -r ~/.openclaw/logs/ ~/backup/openclaw-logs/
# 6. 检查环境变量中的 API Key(记录下来以便重新设置)
echo $DASHSCOPE_API_KEY
echo $OPENAI_API_KEY
# 验证备份完整
ls -la ~/backup/
du -sh ~/backup/
停止服务
# 停止 OpenClaw Gateway 服务
# 方法1:使用 CLI 命令
openclaw gateway stop
# 方法2:如果作为 systemd 服务运行
systemctl stop openclaw
systemctl disable openclaw
# 方法3:如果是 PM2 管理
pm2 stop openclaw
pm2 delete openclaw
# 确认服务已停止
openclaw status
# 应该显示服务未运行
# 确认没有残留进程
ps aux | grep openclaw
ps aux | grep node | grep openclaw
删除 OpenClaw 本体
# 删除 OpenClaw 安装目录
# 查看安装位置
which openclaw
# 通常输出:/usr/local/bin/openclaw 或 ~/.nvm/.../bin/openclaw
# 如果是 npm 全局安装
npm uninstall -g openclaw
# 删除安装目录(npm 卸载可能不彻底,手动清理)
rm -rf ~/.openclaw/
# 如果是通过安装包安装
rm -rf /opt/openclaw/
# 删除 Node.js 依赖(如不再需要)
# 先确认没有其他 Node.js 项目在用
ls ~/.nvm/versions/node/
# 如果只用于 OpenClaw,可以删除
rm -rf ~/.nvm/
清理环境变量和配置
# 清理 shell 配置文件中的 OpenClaw 相关设置
# 检查 ~/.bashrc, ~/.zshrc, ~/.profile 等文件
grep -n "openclaw\|OPENCLAW\|DASHSCOPE\|OPENAI" ~/.bashrc ~/.zshrc ~/.profile
# 删除或注释掉相关行
# 使用编辑器打开文件,删除:
# export OPENCLAW_HOME=...
# export DASHSCOPE_API_KEY=...
# export OPENAI_API_KEY=...
# 使修改生效
source ~/.bashrc # 或 source ~/.zshrc
# 验证环境变量已清除
echo $DASHSCOPE_API_KEY
# 应该输出空
# 清理 crontab 中的 OpenClaw 相关任务
crontab -l | grep openclaw
# 如果有,编辑 crontab 删除相关行
crontab -e
清理 systemd 服务(如有)
# 如果配置了 systemd 服务
# 停止并禁用服务
systemctl stop openclaw
systemctl disable openclaw
# 删除服务文件
rm /etc/systemd/system/openclaw.service
# 或
rm /usr/lib/systemd/system/openclaw.service
# 重新加载 systemd
systemctl daemon-reload
# 确认服务已移除
systemctl list-units | grep openclaw
# 应该没有输出
验证卸载完成
# 全面验证是否彻底卸载
# 1. 检查命令是否还存在
which openclaw
# 应该没有输出
# 2. 检查目录是否已删除
ls -la ~/.openclaw/
# 应该报错:No such file or directory
# 3. 检查进程是否还在运行
ps aux | grep openclaw
# 应该没有输出
# 4. 检查服务是否存在
systemctl status openclaw
# 应该报错:Unit openclaw.service not found
# 5. 检查 crontab
crontab -l | grep openclaw
# 应该没有输出
# 6. 检查端口是否还在监听
ss -tlnp | grep 3000
# 如果 3000 端口不再被 OpenClaw 占用,说明已停止
# 以上全部通过后,卸载完成。
清理模型和依赖(可选)
# 如果安装了本地模型(Ollama),可以选择保留或删除
# 保留模型(其他程序可能也在用):
ollama list
# 不删除,留给其他项目使用
# 删除模型(不再需要):
ollama rm qwen2.5:7b
ollama rm qwen2.5:14b
# 删除 Ollama 本身:
# 根据安装方式卸载
# 通常:rm -rf /usr/local/bin/ollama
# rm -rf /usr/share/ollama/
# 检查磁盘空间释放
df -h
du -sh ~/.ollama/ # 确认已清理
⚠️ 警告:卸载将删除所有数据和配置。操作前请确认已备份需要保留的文件。
第七部分:安全检查清单
日常使用安全检查
# 将以下清单保存到 workspace/security-checklist.md
# 建议每周检查一次
# OpenClaw 安全检查清单
## API Key 安全
- [ ] 配置文件中无明文 API Key
- [ ] 环境变量正确设置
- [ ] API Key 未超过轮换周期(3-6个月)
- [ ] 未在不安全的对话中粘贴过 Key
- [ ] API 用量正常,无异常调用
## 文件安全
- [ ] ~/.openclaw/ 目录权限为 700
- [ ] 无敏感信息明文存储
- [ ] 敏感数据使用加密或环境变量
- [ ] 备份正常执行
## 网络安全
- [ ] 仅必要的出站连接被允许
- [ ] 防火墙规则正确配置
- [ ] 离线运行时完全断网
## 数据安全
- [ ] 不在对话中粘贴敏感信息
- [ ] 会话记录定期清理
- [ ] 日志定期审计
- [ ] 备份数据加密存储
## 卸载时
- [ ] 数据已备份
- [ ] 服务已停止
- [ ] 安装目录已删除
- [ ] 环境变量已清理
- [ ] systemd 服务已移除
- [ ] crontab 任务已清理
- [ ] 端口已释放
- [ ] 模型已清理(如不需要保留)