配图

当开发者将本地文档接入 Agent 的 RAG(检索增强生成)流程时,常忽略一个致命问题:哪些文件绝对不该被索引?本文结合 ClawSDK 的沙箱实践,探讨文档扫描的工程红线。


风险场景:你的 Home 目录有多危险?

典型事故案例:某团队使用开源 RAG 工具链时,Agent 在回答财务问题时意外引用了用户 ~/Downloads/tax.pdf 中的敏感数据。根源在于默认配置会扫描整个 Home 目录,而开发者未设置排除规则。

高危区域清单(以 macOS/Linux 为例): 1. ~/.ssh/ - 密钥对与 known_hosts 2. ~/.config/ - 各类应用的认证缓存 3. ~/Documents/ - 用户自行存放的隐私文档 4. 挂载的外部存储(如 /mnt/backup) 5. ~/Library/(macOS)- 应用数据与缓存 6. /tmp/ - 临时文件可能含敏感片段

更隐蔽的风险: - 版本控制目录(.git/, .svn/)中的历史提交 - IDE 项目文件(如 .idea/workspace.xml 含本地路径) - 浏览器配置文件(含 cookies 和表单历史)


技术防线:沙箱 + 索引双层管控

第一层:ClawSDK 的强制访问边界

在 ClawOS 的默认配置中,Agent 工作空间被限制在 ~/ClawWorkspace/ 目录。需显式授权才能访问外部路径,具体通过:

# claw_gateway.yaml 片段
sandbox:
  base_dir: ~/ClawWorkspace
  allow_list:
    - ~/Projects/ai_docs  # 需手动添加的白名单
  deny_patterns:
    - '**/.*'  # 默认隐藏点文件

关键设计: - 使用内核级命名空间隔离(Linux cgroups) - 所有文件操作通过 ClawBridge 代理审计 - 违反边界的操作会触发 Telegram 告警

第二层:向量库的主动过滤

即使文件可访问,也需在 embedding 前过滤内容类型。推荐策略:

  • 文件扩展名拦截.key, .pem, .csv, .pdf
  • 内容嗅探:通过 libmagic 检测实际文件类型
  • 路径关键词匹配:屏蔽含 bank/medical/ 等路径
  • 文件大小限制:超过 10MB 的文档需特别授权

OpenClaw 的 rag-preprocessor 模块提供钩子函数供自定义规则:

def filter_file(path: str) -> bool:
    blacklist = {'password', 'invoice', '合同', '病历'}
    if os.path.getsize(path) > 10_000_000:
        return False
    return not any(kw in path.lower() for kw in blacklist)

敏感数据已入库怎么办?

  1. 立即下线相关索引(使用 claw-cli vector pause
  2. 审计日志定位泄露源(/var/log/claw/access.log
  3. 使用 claw-cli vector rm --id=可疑ID 删除条目
  4. 注意:多数开源向量库不支持真正的「遗忘」,需重建索引
  5. 法律合规:根据 GDPR 要求通知受影响用户

技术局限: - 已生成的模型权重可能记忆了敏感信息 - 分布式场景下存在索引同步延迟


检查清单:部署前的必验项

✅ 是否关闭了递归扫描(如 --no-recursive
✅ 是否配置了最小权限的沙箱路径
✅ 是否在 CI 流程中加入敏感词扫描(如 grep -r 'SSH PRIVATE KEY'
✅ 是否向用户告知数据流向(GDPR 合规) ✅ 是否禁用符号链接跟随(防路径穿越) ✅ 是否设置文件修改时间过滤器(避免读取陈旧数据)

自动化验证脚本

#!/bin/bash
# 检查沙箱配置
grep -q 'base_dir: ~/ClawWorkspace' /etc/claw_gateway.yaml || \
  echo "[FAIL] 沙箱路径未正确配置"

争议:该默认保守还是灵活?

  • 保守派:工具链应默认屏蔽所有非显式放行的路径,避免法律风险
  • 依据:今年年 OWASP AI 安全指南第4.1条
  • 灵活派:开发者应自行负责配置,默认全开放更方便原型开发
  • 反例:某创业公司因默认配置泄露客户数据被罚款20万欧元

ClawHub 的折中方案: 1. 首次运行时强制交互式确认扫描范围 2. 生成可审计的 consent.log 3. 提供 --paranoid-mode 一键启用所有防护


延伸思考

加密索引的可行性

  • 方案1:使用 LUKS 容器加密向量库存储目录
  • 方案2:在 embedding 前用 Age 加密文本片段
  • 性能损耗:加密会使查询延迟增加 15-30%(实测数据)

监控体系设计

  • 实时警报:检测到敏感关键词时触发 Slack 通知
  • 定期扫描:每周对索引内容运行 yara 规则检测
  • 水印追踪:在 embedding 中植入隐蔽标识符

欢迎在评论区分享你的防护策略,特别是以下场景: - 如何处理团队共享文档库的权限? - 是否遇到过误判导致的业务中断?

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐