DeepSeek Harness Hub
← 返回列表

无内核用户空间沙箱Snail-Turbo/dsh-android-sandbox

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

为无内核沙箱的主机补上用户空间写入拦截与只读约束

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/15 · 已提供中文文档
综合分
27.5
GitHub 分
27.5
用户评分
★ Stars
1
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Snail-Turbo/dsh-android-sandbox
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

无内核沙箱主机的 dsh 用户空间沙箱插件

DeepSeek Harness(dsh)平时靠内核级沙箱把写入限制在工作区里——Landlock / bwrap、文件系统 fence、Seatbelt、Windows ACL runner。如果你的设备内核沙箱正常,你不需要这个仓库,官方沙箱已经够了。

这个仓库面向那些 runner 跑不起来或只能部分生效的主机——最常见的是 bootloader 锁定(或不想解锁)的 Android GKI 手机,以及没有 user namespace 或 Landlock 的受限容器 / chroot 环境。这类主机上 bash 内核 runner 会 fail-closed:每个受约束的 bash 调用都被拒。(write/edit 的文件系统 fence 是进程内路径围栏,仍然工作;真正的缺口在 shell 执行。)这里的插件在工具调用层为两者补上用户空间的替代。

Android 上拿真实沙箱的两个选项

如果你的 Android 设备没有可用的内核沙箱,有两个选项。

选项 A — 解锁 bootloader,编一个配置正确的 GKI 内核(推荐)

如果能解锁 bootloader,正路是在内核配置里打开 dsh runner 需要的特性(Landlock LSM、user namespace 等),自己编一个启用了这些特性的谷歌 GKI 内核。换上之后 dsh-bash-sandbox 和 dsh-fs-sandbox 正常约束,那才是真正想要的内核级边界。

能解锁就走这条路。 本仓库的插件是用户空间策略——兜底用的,不是安全边界。

选项 B — 不能或不想解锁:用这套用户空间插件

不能或不想解锁 bootloader,就把本仓库这两个插件加进你的组合。它们一起在工具调用层恢复官方沙箱的 workspace-write / read-only 约束,不需要任何内核特性。

| 包 | 职责 |
| --- | --- |
| dsh-userspace-gate | tools/pre-execute 门卫——workspace-write 沙箱的纯用户空间替代:拒绝 write/edit 调用,以及静态可见写目标落在会话工作区和平台临时目录之外的 bash 调用;顺带为 shell 工具实施 read-only。不需要任何内核特性。 |
| dsh-userspace-bash | 面向无可用内核 runner 主机的 bash-local 孪生:对外报一个沙箱模式(好让权限预设和 sandbox_permissions 升级面继续能用),但实际上不约束——文件写入的拦截交给 userspace-gate 门卫。 |

关于所报沙箱模式的说明。 userspace-bash 报出一个沙箱模式,但没有内核级约束。这是对官方能力事实语义的刻意偏离:在无内核主机上,官方两种形态都会崩——内核 runner 对每个受约束调用 fail-closed,而诚实无约束的执行器(sandboxMode === undefined)会让 dsh-permission-presets 加载即抛。报出模式让 /permission、预设选择器和 sandbox_permissions 升级面继续可用,实际约束由 userspace-gate 门卫在工具层执行(静态扫描,非内核)。

局限

- 只能拦住静态看得见的写目标,这不是安全边界。 静态能确定的写目标会被拦(重定向目标、变更类命令的操作数、已知选项值、交给 shell 的 heredoc 正文);动态目标——变量、命令替换、xargs、嵌套的非 shell 解释器、eval、source 的脚本文件内容、通配操作数(rm -rf /etc/*)、\cp 这类转义命令名——直接放行。
- 所报沙箱模式是偏离——见上文说明;permission-presets 会把这个执行器当"会约束"的,而一次被批准的 sandbox_permissions 升级会让命令以 harness 全权限运行(执行器从不约束;门卫只做静态拦截)。
- 内核 runner 才是对不可信代码真正算数的边界。能拿到(选项 A)就用它。

平台支持

userspace-bash 的执行器行在 win32 自动禁用(bundle 补丁里的 !!js process.platform === 'win32'):dsh-base 组合在 win32 挂 pwsh-sandbox,两个 ctx.shell 提供者会让启动因重复注册而失败。本仓库面向 POSIX 主机(Android、Linux、macOS)。

仓库结构

android-sand-box/
├── userspace-gate/               # tools/pre-execute 门卫 + bash 写意图扫描器
└── userspace-bash/               # 从不约束的 bash 执行器 + read-only 门卫 + 拒绝引导

两个包都是组合包(bundle):各自在 dsh.bundle manifest 下自带 cordis.patch.yml,装一个就自动激活对应插件行——无需手动改 cordis.patch.yml。把两个都装进 profile:

dsh plugin --profile web add ./userspace-bash
dsh plugin --profile web add ./userspace-gate

dsh-userspace-bash 组合包会把内核版 bash-sandbox 换成用户空间执行器,并挂上 read-only 门卫和拒绝引导;dsh-userspace-gate 组合包挂上 workspace-write 门卫。卸载用 dsh plugin --profile web remove 。两个包都把构建好的 lib/ 提交在仓库内,git 安装无需构建步骤。

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群