第18讲 · Landlock 沙箱与进程隔离

《DeepSeek Harness 从上手到精通》系列 · 第六阶 安全与沙箱篇

🎯 目标:理解并配置 dsh 的纵深防御第一层 难度 ★★☆ ⏱ 约 25 分钟 前置:第 10 讲已配好审批策略

系列基于 deepseek-ai/deepseek-harness0.1.0-rc.5,MIT)。本讲进入安全篇:agent 会动真格地读写文件、跑命令,得有「笼子」关住它。dsh 的纵深防御第一层就是 Landlock 沙箱。preview 阶段接口可能微调,认准「最小权限 / 平台差异」两件核心,以官方文档为准。


一、Landlock 原理一分钟

Landlock 是 Linux 内核提供的沙箱机制。它的思路很妙:进程在启动子进程(exec)之前,先给自己套上「文件系统访问限制」——规定「只允许读这些目录、只允许写那些目录」,之后即便进程被攻破或出错,也越不出这道墙。dsh 用 Rust 实现了这一层「自限制后 exec」。

为什么叫「纵深防御第一层」?因为审批(第 10 讲)是逻辑层的「问你同不同意」,而 Landlock 是内核层的「物理封死」——即便 agent 想乱写、或工具被绕过,操作系统层面也根本不让它碰授权目录之外的东西。

Landlock沙箱与进程隔离
图 1 Landlock 在 exec 前给进程套上文件访问限制,内核层封死越权路径。

二、路径授权:哪些目录可读 / 可写

Landlock 的核心是路径授权白名单。你显式声明:

  • 可读目录:agent 能读哪些路径(如项目目录、只读数据);
  • 可写目录:agent 只能往这些目录落盘(如 /tmp/output)。

遵循最小权限原则:只开必须开的目录,绝不图省事把整个根目录放开。配置思路(字段为示意,以官方为准):

sandbox: landlock: read: ["/home/user/project"] write: ["/tmp/output"] # 只许写这个输出目录

三、平台差异:Landlock 仅 Linux

重要前提:Landlock 是 Linux 内核特性,只在 Linux 上生效。在 macOS / Windows 上,dsh 无法用内核级沙箱,会退回到行为降级:

平台沙箱能力建议
LinuxLandlock 内核级沙箱可用生产首选,开启路径授权
macOS无 Landlock,退回逻辑层限制靠审批 + 路径约定兜底
Windows无 Landlock,退回逻辑层限制开发可跑,生产建议Linux

别在 macOS/Windows 上误以为有内核沙箱。 那里的防护只剩审批与约定,真要跑不可信任务,请上 Linux 或下文的远程沙箱。

四、E2B 远程沙箱(POC):把执行世界搬上云

当你本地平台不支持沙箱,或想彻底隔离风险时,可以用 E2B 远程沙箱(当前为 POC / 实验性):把整个「执行世界」(文件系统 + 子进程)搬到云端的一次性沙箱里跑,本地只收发结果。这正好呼应第 7 讲说的「换一处、Bash/PTY/LSP 全搬家」——E2B 就是 ctx.fsctx.subprocess 的一个远程 Provider。

实验性提示: E2B 集成仍属 POC,接口与稳定性可能变化,不作为主线必需。生产落地优先用 Linux + Landlock。

五、动手练习:最小权限会话

配置一个「只许写 /tmp/output 输出目录」的最小权限会话,然后验证越权被拒

  • 在 Linux 上配置 Landlock 只授权 /tmp/output 可写;
  • 让 agent 尝试往 /tmp/output 写——应成功;
  • 再让它往其他目录(如 /home 下的非授权路径)写——应被内核拒绝。

若越权写入没被拦,说明沙箱未生效(常见于非 Linux 平台或配置未加载),回到第三节核对平台与配置。

六、常见坑

  • 误以为 macOS/Windows 有沙箱:那里只靠逻辑层,生产请上 Linux;
  • 授权目录开太大:图省事放开根目录,等于没沙箱,坚持最小权限;
  • 子进程继承不到限制:确认沙箱在 exec 前套上,子进程才受约束;
  • 内核太旧不支持:Landlock 需要较新的 Linux 内核,老旧环境会静默降级;
  • 把 E2B 当稳定方案:它是 POC,别在生产强依赖,先盯官方更新。

七、官方文档对应章节

  • docs/ 中 sandbox / landlock / e2b 相关章节
  • 第 7 讲能力 Seam(ctx.fs / ctx.subprocess Provider 替换)
  • 第 10 讲权限预设(逻辑层审批与沙箱互补)

本讲内容基于 DeepSeek Harness 官方文档与项目源码整理,仅供学习参考,具体命令与配置请以官方最新版本为准。系列文章配合源码仓库食用效果更佳:https://github.com/deepseek-ai/deepseek-harness

咨询 DeepSeek Harness 相关问题,请加微信:A0qingfengyuan_01

个人观点,仅供参考,如有不对之处,请多包涵,欢迎指出。本文由 AI 协助完成!