DeepSeek Harness 沙箱基石:landlock-run 自限制启动器的设计与接入实战
人工智能AI AgentAgent 框架DeepSeek【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址https://gitcode.com/gh_mirrors/de/deepseek-harness点击查看免费下载本指南系统讲解 DeepSeek Harness 仓库中 native/landlock-run 子项目——一个基于 Linux Landlock 的 self-restrict-then-exec 子进程隔离启动器。它面向需要在文件系统白名单下运行不可信命令、同时自身不受限制的 Agent harness 与沙箱宿主以约 300 行静态链接 C11 实现并以「入口包 按平台预编译包」的 npm 形式分发。读完本文你将掌握它的安装方式、JS 侧 API 用法、完整 CLI 契约argv 文法、退出码、报告行、底层 Landlock 原理以及它在当前仓库中的打包、测试与发布模型。项目定位机制归仓库策略归消费者landlock-run 是 DeepSeek Harness 沙箱能力的一条关键底座。按 architecture.md 的表述本仓库拥有的是隔离机制mechanism而非策略policy由消费者agent harness、sandbox 能力模块决定一次运行可读/可写哪些路径由本包族提供强制这些授权的启动器以及解析它、与它对话的 JavaScript API。它的设计动机在 main.c 头部注释中写得很直白在bwrap不可用的 Linux 主机上未安装、非特权用户命名空间被禁用、或 LSM 配置禁止 mountLandlock 是一族独立系统调用不需要上述任何前提。启动器先在自身上安装 Landlock 规则集再exec被包裹的命令由于规则集会随execve继承命令及其派生的每个进程都处于受限状态而调用方进程保持不受限。整个项目遵循fail-closed失败即关闭原则内核无法执行强制时启动器直接退出且不运行被包裹的命令绝不在无隔离状态下执行。安装与发布形态入口包 按平台预编译包通过 npm 安装入口包npm install deepseek-ai/node-addon-landlock-run发布包族采用「入口包 平台可选包」的 esbuild 式布局deepseek-ai/node-addon-landlock-run deepseek-ai/node-addon-landlock-run-linux-x64 deepseek-ai/node-addon-landlock-run-linux-arm64两层包的分工见 architecture.md 与 packaging.md入口包纯 ESM JavaScript拥有 CLI 契约——路径解析launcherPath、功能探测probe、授权 argv 构造grantArgs与契约常量随包附带 C 源码便于审计把每个平台包声明为optionalDependency。平台包bin/下只含一个预编译静态二进制与声明它的prebuilds.json没有任何 JavaScript 可导入。npm 的os/cpu字段让安装器只拉取匹配的平台包入口包把平台包解析为文件路径。值得强调的刻意设计无安装期编译回退入口包没有 install 脚本绝不在消费者主机上编译。因为编译回退会要求处处具备 musl 工具链把一个干净利落的 fail-closed 降级变成依赖环境的「也许」。scripts/verify-packed-install.mjs会检查并强制禁止安装生命周期脚本。无共享 loader 包平台包没有可加载的东西不需要共享 JS。无 libc 字段二进制静态链接 muslglibc 与 musl 发行版通用因此package.json刻意不声明libc。快速上手JS API 三件套入口包暴露的 API 刻意保持最小核心用法如下取自 README.md 的示例import { grantArgs, launcherPath, probe } from deepseek-ai/node-addon-landlock-run; const launcher launcherPath(); if (probe(launcher) ! unusable) { const argv [launcher, ...grantArgs({ readOnly: [/], readWrite: [/tmp/work] }), --, bash, -c, command]; // spawn argv with your process runner of choice }三个函数分别对应 index.ts 中的实现API行为与语义launcherPath()返回本机启动器的绝对路径按deepseek-ai/node-addon-landlock-run-platform-arch解析到package/bin/landlock-run。刻意不检查文件是否存在——可用性信号统一交给probe。平台包不可解析时平台不支持、或安装时跳过了可选依赖返回一个指向本包node_modules内的确定性 fallback 路径该路径永远不存在。probe(launcher?, { timeoutMs? })功能探测返回full \| partial \| unusable。通过spawnSync执行landlock-run --probe默认超时 2000ms非零退出映射为unusablestdout 含partially enforced映射为partial否则为full。同步设计消费者运行一次并缓存结论。grantArgs({ readOnly?, readWrite? })构造启动器授权 argv--ro path排在先、--rw path排在后按调用者顺序未授予的一切默认拒绝。代码注释揭示了两个刻意的不变量不读环境变量——哪个二进制来隔离进程绝不能由环境变量决定测试注入通过函数参数完成。缺失二进制与不强制内核刻意不可区分——两者都探测为unusable消费者只有一条降级路径而不是两条。CLI 契约argv 文法、退出码与报告行启动器的外部可观察行为被 cli-contract.md 完整钉死——这是二进制与每个消费者之间的跨仓库兼容面。CLI 解析是手写的main.c 中parse函数注释直言四个 flag 不值得引入解析库。调用文法landlock-run [--ro path]... [--rw path]... -- argv... landlock-run --probe--ro path授予路径之下读 执行权限。--rw path授予路径之下完整文件系统访问协商后内核 ABI 能管辖的一切访问。一切未授予的均被拒绝——Landlock 规则集是白名单。对非目录的授权只保留文件兼容的访问位——这正是--rw /dev/null授权能工作的方式见下文add_rule的位掩码裁剪。--是强制分隔符其后全部是命令 argv经execvp执行环境原样保留。--probe与授权、命令互斥无其他 flag、无环境变量输入。退出码125LAUNCHER_FAILURE_EXIT所有启动器级失败——用法错误、内核无法执行 Landlock、授权根目录打不开、exec 失败。此时被包裹命令未运行。成功exec后子进程的每个退出状态原样透传包括 125。因此消费者判断启动器失败必须同时满足「状态 125」和一条landlock-run:致命报告行。--probe内核能执行完全或部分时返回 0否则 125。报告行探测成功恰好输出一行 stdoutlandlock: fully enforced或landlock: partially enforced (older ABI)入口包probe()据此映射为full/partial非零探测退出映射为unusable。部分 ABI 内核下的受限运行输出一行 stderrlandlock-run: partial enforcement (older Landlock ABI)后继续——凡是内核支持的访问仍全部受限。每个致命错误在退出 125 前输出一行以landlock-run:为前缀的 stderr。底层原理C11 直写 Landlock UAPImain.c 是仅约 300 行的 C11静态链接 musl除 libc 外不依赖任何库——整个审计面就是这一个文件加上内核稳定的系统调用契约。几个值得细读的实现要点自包含 UAPI 定义。内核用户空间 ABI 按契约稳定文件直接局部定义landlock_ruleset_attr、landlock_path_beneath_attr该结构在头文件中是 packed 的因此这里也必须__attribute__((packed))使构建不受工具链头文件版本影响同时这组定义本身就是「此启动器接触了哪些内核 API」的审计记录。宏MAX_ABI 5L表示本构建已知的最新 ABI。访问位按 ABI 分组。文件系统访问位被注释标注引入版本ABI 1 引入 execute/write_file/read_file/read_dir/remove/make_* 共 13 位LL_ABI1_MASKABI 2 加REFERABI 3 加TRUNCATEABI 4 仅增加 TCP 位ABI 5 加IOCTL_DEV。fs_mask_for_abi()按协商后的 ABI 裁剪规则集规模。ABI 协商与 fail-closed。restrict_self()先调用landlock_create_rulesetversion 参数探测内核 ABI返回ENOSYS内核未编译 Landlock或EOPNOTSUPP编译但被禁用都输出landlock is not enforced by this kernel并失败关闭。协商结果低于MAX_ABI时置partial标志但规则集照常按内核支持的最大能力安装。白名单与位掩码裁剪。add_rule()用open(path, O_PATH | O_CLOEXEC)打开授权根若打不开——比如授权路径不存在——直接失败关闭注释解释静默收窄授权集是安全的但带着调用方没拿到的东西运行不值得这种歧义。随后fstat判断非目录时把访问位裁剪为文件兼容位EXECUTE | WRITE_FILE | READ_FILE | TRUNCATE | IOCTL_DEV否则内核会因目录专用访问位而返回EINVAL。no_new_privs 继承语义。安装规则集前先prctl(PR_SET_NO_NEW_PRIVS, 1)——这是非特权 restrict 的前提同时中和沙箱内的 setuid/setgid 提权。随后landlock_restrict_self把规则集装到当前线程进程execvp后规则集随execve继承给命令及其全部后代进程。功能探测而非版本探测。--probe分支在一个短命子进程里真实构建并强制一个最大规则集以/为只读根因为纯版本检查会漏掉有系统调用但拒绝强制的内核——只有真正 restrict 自己才是诚实的信号。平台支持矩阵与刻意不支持按 support-matrix.md平台包构建者builder of record说明...-linux-x64ubuntu-24.04静态 musl——glibc 与 musl 发行版通用...-linux-arm64ubuntu-24.04-arm静态 musl——glibc 与 musl 发行版通用强制的先决条件是启用 Landlock 的内核5.13协商到的 ABI 级别决定探测结论本构建已知的每个访问都被管辖 →full旧 ABI 只管辖子集 →partial仍为其支持的一切受限Landlock 缺失或被禁用 →unusable启动器完全拒绝运行命令。权威是探测而非内核版本一个未编译 Landlock、或 LSM 被禁用的内核无论版本号多少都探测为unusable。刻意不支持darwinmacOS 消费者通常用随系统自带的sandbox-exec/Seatbelt没有可分发二进制、win32Windows 隔离启动器属于另一个机制、另一个仓库而非本项目的移植、以及其他 Linux 架构riscv64、s390x……——尚无原生 CI 构建者「无交叉工具链」规则意味着平台包只能与能构建并验证它的原生 runner 一起新增。不支持平台上的消费者解析到不存在的启动器路径、探测为unusable并失败关闭——这正是文档记载的降级路径。开发、测试与发布流程本地开发corepack enable pnpm install pnpm build:ts # 入口包 → lib/ pnpm build:native # 本 Linux 架构的二进制需 apt-get install musl-tools pnpm test二进制被 git 忽略按架构原生构建——本地构建给自己机器用CI 的各架构 runner 是正式构建者。测试覆盖entry.test.js 是免密钥测试任何主机可跑、不需要内核或真实二进制断言契约常量、grantArgs的 flag 拼写与顺序、launcherPath的解析契约平台包 → fallback且 fallback 必须是绝对路径、以及通过假启动器shell 脚本验证probe三态解析——包括用 200ms 超时验证挂起启动器探测为unusable。此外还有面向真实二进制的 launcher 测试。发布模型版本号在 workspace 根与三个公开包间共享release.mdpnpm --dir native/landlock-run release:bump patch # 或 minor / major / x.y.z pnpm --dir native/landlock-run release:commit patch # 一次完成 bump stage commit git tag landlock-run-vX.Y.Z发布严格从最终打包的 tarball 进行按publish-order.txt的顺序平台包先于依赖它们的入口包。两个关键细节平台包 tarball 用npm pack入口包用pnpm pack——刻意拆分因为 pnpm pack 会归一化文件权限、剥掉可执行位那样会发布一个无人能 spawn 的启动器平台包无依赖、不需要 pnpm 的 workspace 协议转换入口包则需要且不携带可执行文件。packaging.md 强调绝不要用 pnpm 手工打包平台包。三道发布门禁平台包 prepack 检查声明的每个二进制存在、可执行、ELFe_machine匹配声明的cpu入口包 prepack 检查lib/已构建verify-packed-install.mjs从打包 tarball 彩排消费者路径——载荷检查、一次性安装、安装后二进制的字节级钉住、可执行性检查、以及经由已安装启动器的真实隔离 world-proof。与 DeepSeek Harness 的协作边界最后回到它在整个仓库中的位置landlock-run 提供的是「文件系统白名单下运行不可信命令」这个隔离楔子rung策略由上层沙箱能力决定。它刻意保持零环境变量输入、单一一等可用性信号probe、以及处处失败关闭的降级路径让上层消费者拿到三种明确的状态full/partial/unusable来定义自己的模式词汇表。对任何需要在 Linux 上以允许清单方式约束子进程文件访问、又不希望自身受束缚的 Agent harness 而言这套「机制与策略分离 探测即真相 白名单即默认拒绝」的组合即是它的核心工程价值。赞分享人工智能AI AgentAgent 框架DeepSeek【免费下载链接】deepseek-harnessDeepSeek Harness: Everything is a Plugin.项目地址https://gitcode.com/gh_mirrors/de/deepseek-harness点击查看免费下载相关推荐traffic-levels-image-classification核心功能揭秘低/中/高/无交通状态智能识别traffic levels image classification核心功能揭秘低/中/高/无交通状态智能识别 traffic levels image c人工智能AI AgentAgent 框架DeepSeekdocker-ddns API详解轻松配置路由器与DDNS客户端的完整指南docker ddns API详解轻松配置路由器与DDNS客户端的完整指南 docker ddns是一个基于Docker、Go和Bind9的动态DNS解决方案人工智能AI AgentAgent 框架DeepSeekVisual-Regression-Tracker高级技巧如何使用忽略区域功能排除无关UI差异Visual Regression Tracker高级技巧如何使用忽略区域功能排除无关UI差异 Visual Regression Tracker是一款通过图人工智能AI AgentAgent 框架DeepSeek上一篇Apache RocketMQ Controller 模式设计详解基于 DLedger 的自动主从切换架构下一篇CUSE设备开发终极指南字符设备用户空间实现详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Synopsys AXI VIP环境搭建与首个验证场景实战指南

Synopsys AXI VIP环境搭建与首个验证场景实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:59:37 阅读更多 →
ccusage 社区生态指南:围绕 Claude Code 用量追踪构建的桌面应用、扩展与 Web 工具

ccusage 社区生态指南:围绕 Claude Code 用量追踪构建的桌面应用、扩展与 Web 工具

AI 应用CLI开发工具 【免费下载链接】ccusage npx ccusage 项目地址: https://gitcode.com/gh_mirrors/cc/ccusage 点击查看 免费下载 本文基于 ccusage 官方仓库中的社区项目清单(docs/guide/community-projects.md)整理而成,系…

2026/9/21 2:59:37 阅读更多 →
两台S7-1200 PLC合并为一台:PN智能IO通讯配置与UDT应用指南

两台S7-1200 PLC合并为一台:PN智能IO通讯配置与UDT应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 2:59:37 阅读更多 →

最新新闻

Vibe Coding 参考设计规范做界面:用 Apple、Material、Fluent、Atlassian 的判断标准,让 AI 生成层次清晰的页面与按钮

Vibe Coding 参考设计规范做界面:用 Apple、Material、Fluent、Atlassian 的判断标准,让 AI 生成层次清晰的页面与按钮

教程文档 【免费下载链接】easy-vibe 从 0 到 1 学会 vibe coding,项目制学习 项目地址: https://gitcode.com/datawhalechina/easy-vibe 点击查看 免费下载 在 easy-vibe 的「初中级开发」阶段(docs/zh-cn/stage-2/index.md)&am…

2026/9/21 3:29:57 阅读更多 →
ESP8266 Arduino Core Wi-Fi 扫描实战:scanNetworks 同步与异步模式完整指南

ESP8266 Arduino Core Wi-Fi 扫描实战:scanNetworks 同步与异步模式完整指南

ESP8266 Arduino Core Wi-Fi 扫描实战:scanNetworks 同步与异步模式完整指南 【免费下载链接】Arduino ESP8266 core for Arduino 项目地址: https://gitcode.com/gh_mirrors/ard/Arduino 本篇指南以 Arduino 官方文档 scan-examples.rst 为主线,…

2026/9/21 3:29:57 阅读更多 →
深入解析 torchvision 的 create_feature_extractor:用 FX 符号追踪提取模型任意中间层特征

深入解析 torchvision 的 create_feature_extractor:用 FX 符号追踪提取模型任意中间层特征

深入解析 torchvision 的 create_feature_extractor:用 FX 符号追踪提取模型任意中间层特征 【免费下载链接】vision Datasets, Transforms and Models specific to Computer Vision 项目地址: https://gitcode.com/gh_mirrors/vi/vision torchvision.models…

2026/9/21 3:29:57 阅读更多 →
7days-golang的Context设计之道:如何设计一个灵活易用的请求上下文(Request Context)

7days-golang的Context设计之道:如何设计一个灵活易用的请求上下文(Request Context)

7days-golang的Context设计之道:如何设计一个灵活易用的请求上下文(Request Context) 【免费下载链接】7days-golang 7 days golang programs from scratch (web framework Gee, distributed cache GeeCache, object relational mapping ORM …

2026/9/21 3:29:57 阅读更多 →
kOps 版本支持策略与发布路线图深度解析:兼容性边界、发布节奏与演进方向

kOps 版本支持策略与发布路线图深度解析:兼容性边界、发布节奏与演进方向

云原生集群管理运维IaC 【免费下载链接】kops Kubernetes Operations (kOps) - Production Grade k8s Installation, Upgrades and Management 项目地址: https://gitcode.com/gh_mirrors/kop/kops 点击查看 免费下载 本文基于仓库根目录下的 ROADMAP.md 展开&…

2026/9/21 3:29:57 阅读更多 →
建站服务哪家好?揭秘致力于做服务更好的网站建设公司

建站服务哪家好?揭秘致力于做服务更好的网站建设公司

建站服务哪家好?揭秘致力于做服务更好的网站建设公司 域名解析报错,服务器SSL证书过期,后台配置一脸懵?很多老板在找网站建设公司时,最头疼的不是价格,而是“哪家好”。 你不想花大价钱,却担心网站上线后没人懂维护。你怕被割韭菜,更怕遇到那种只管建站、不管后续服务的技术外包。…

2026/9/21 3:29:45 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →