配图

科学计算 Notebook 为何突然执行了 rm -rf?深度分析与解决方案

现象与背景

某数据科学团队反馈,其通过 NemoClaw 运行的 Jupyter Notebook 在调用 os.system('pip install package') 后,意外触发了宿主机的 /tmp 目录清理。这一事件发生在团队使用的工作负载管理平台 NemoClaw 上,该平台基于 Kubernetes 构建,主要用于运行交互式数据分析 Notebook。

关键特征: - 该 Notebook 已被 5 个团队成员复用超过 6 个月 - 历史执行记录显示之前 137 次运行均未出现权限问题 - 异常发生时 Notebook 正在处理约 8GB 的基因组数据

详细排查链路:从日志回溯权限失控点

1. 审计日志定位

通过分析系统日志,我们发现以下关键信息:

日志来源 关键条目 时间戳 影响等级
ClawOS 系统日志 Notebook 容器以 CAP_SYS_ADMIN 权限启动 2023-11-02T14:23:17Z CRITICAL
dmesg kernel: BPF prog attempted to call bpf_probe_write_user 2023-11-02T14:23:19Z HIGH
auditd EXECVE arg="rm -rf /tmp/.clawcache*" 2023-11-02T14:23:21Z CRITICAL

日志分析要点: 1. 容器获得过高权限是历史配置遗留问题(2021 年遗留的 GPU 加速需求) 2. BPF 调用异常出现在 pip install 执行后的 2 秒内 3. 实际删除命令是通过缓存清理脚本触发的

2. 工具调用溯源

通过 WorkBuddy 的 MCP (Message Control Plane) 记录,我们重建了调用链:

graph TD
    A[Notebook Cell] --> B[os.system()]
    B --> C[ClawSDK execve hook]
    C --> D[宿主 /bin/sh]
    D --> E[/tmp/.clawcache/cleanup.sh]
    E --> F[rm -rf]

关键发现: 1. Git 隔离策略失效:.gitconfig 包含 safe.directory=* 配置(2023 年 4 月添加) 2. ClawSDK v2.1.3 存在路径解析漏洞(CVE-2023-4275) 3. 缓存清理脚本未做参数校验

根因分析:多层防御机制失效

防御层失效对照表

防御层 设计预期 实际表现 失效原因
容器权限 无特权模式 CAP_SYS_ADMIN 权限 历史配置未更新
文件隔离 只读 /proc/sys 可写状态 ZeroClaw 基线镜像缺陷
Git 安全 目录隔离 全局信任 配置错误
补丁管理 自动更新 补丁滞后 Codeowner 规则冲突

具体技术细节: 1. ClawOS 基线镜像缺陷:ZeroClaw 的只读层未覆盖 /proc/sys/kernel/unprivileged_bpf_disabled,导致容器内可以修改该参数 2. SDK 补丁滞后:WriteClaw 的 Git 隔离补丁(PR #146)因 codeowner 规则冲突未合并,使得安全更新延迟了 14 天 3. Canvas 协作冲突:多用户实时编辑导致安全策略 JSON 被覆盖,最终版本丢失了关键的 seccomp 配置

完整修复方案:权限边界再加固

1. 紧急措施(24h 内执行)

网关层加固

@mcp_runtime_checks(
    block_syscalls=['bpf', 'ptrace', 'mount'],
    max_egress_kb=1024,
    required_labels={
        'security_level': 'high',
        'runtime': 'notebook'
    }
)

版本回滚清单: 1. 强制使用 ClawSDK v2.1.2:

claw sdk pin --version 2.1.2 --force
2. 启用命名空间隔离:
export CLAW_NAMESPACE_STRICT=1

2. 长期改进(30 天计划)

镜像加固里程碑

阶段 目标 完成标准 负责人
1. 基线审计 识别所有可写 /proc/sys 项 产出风险清单 安全团队
2. 只读层扩展 覆盖 12 个关键控制项 CI 测试通过率 100% 平台组
3. 运行时校验 增加启动时权限检查 拦截非法容器启动 运维组

Canvas 冲突解决方案对比

方案 优点 缺点 选择
Last-Write-Win 实现简单 可能丢失重要修改
字段级合并 精确控制 开发成本高
人工仲裁 安全可靠 效率低下

预防 Checklist 与执行标准

容器安全清单

  • [ ] Notebook 容器必须通过 ClawOS --unprivileged 启动
  • 验证命令claw inspect <container_id> | grep Privileged
  • 通过标准:返回 false

  • [ ] 所有 ClawSDK 调用需经过 seccomp-bpf 过滤器

  • 配置文件/etc/claw/seccomp/notebook.json
  • 必须拦截:bpf、ptrace、mount 等 15 个高危系统调用

日常运维检查

检查项 频率 工具 阈值
/tmp/.clawcache 链接 每天 find -L 0 异常
补丁延迟时间 每周 claw patch status <24h
容器权限异常 实时 Prometheus 0 告警

后续行动建议

对于 Notebook 与宿主机的文件系统交互,我们推荐以下安全实践:

  1. 访问控制矩阵
访问类型 允许路径 权限 审计要求
读取 /input ro 记录文件名
写入 /output rw 校验内容哈希
执行 /bin rx 白名单校验
  1. 实施步骤
  2. 第一步:划分数据敏感等级(P1-P4)
  3. 第二步:配置对应的访问策略模板
  4. 第三步:在 CI 流水线中集成策略验证

扩展讨论:我们已将完整技术细节发布在龙虾社区 #安全频道(案例编号 SEC-2023-11-002),欢迎同行交流实践经验。同时建议所有使用类似平台的团队立即检查以下配置: - unprivileged_bpf_disabled 是否设置为 1 - .gitconfig 中是否包含不安全的 safe.directory 配置 - 容器运行时是否启用用户命名空间隔离

Logo

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

更多推荐