dsh-permission-gate:DSH 进程级访问闸门与工具制动器

前言

DeepSeek Harness (DSH) 默认不提供 HTTP 层面的认证机制。在远程运行或无人值守的场景下,这会导致浏览器页面可能被访问,同时智能体工具仍可调用。为了解决这两个问题,插件 dsh-permission-gate 提供了 UI 级别的全屏锁页,以及进程级别的工具制动。

简介

该插件由 Juntiantan 维护,开源协议为 MIT。它不替代真实的边界认证,而是作为 DSH 进程内的访问控制层,防止在未登录状态下执行敏感操作。

核心功能

1. UI 级别访问控制

插件会在每次 DSH 页面加载时注入一个全屏锁页。只有在登录状态下,页面才会解锁。这种机制防止了未授权人员直接在浏览器中查看或操作 DSH 的界面。

2. 进程级工具制动

这是该插件最关键的安全特性。当没有用户登录时,插件会通过 ctx.tools.guard 拦截所有智能体工具的调用。这意味着锁定的状态下,智能体无法读取文件、运行命令、打开网络连接或生成新的子智能体。

3. 会话与凭证管理

  • 共享会话:一次登录即可解锁所有打开的 DSH 页面。会话在内存中保持 60 分钟的严格空闲锁定,超时后所有页面将强制返回登录页。
  • 密码存储:凭证使用 scrypt 加密算法和随机盐存储在 ~/.dsh/permission-gate 目录下。会话本身仅存在于内存中,重启 DSH 进程后需要重新登录,但密码不会被重置。
  • 管理模块:DSH 原生设置模块中集成了“权限闸门”配置页面,可用于启用、禁用或修改密码。

4. 逃生通道与状态监控

  • 服务器端逃生口:提供 /gate 路径的纯 HTML 登录页,即使浏览器注入脚本失效或被缓存,仍可通过直接访问该路径登录。
  • 状态芯片:UI 右侧提供可折叠的状态芯片,实时显示剩余有效时间。

安装与启用

该插件声明了 dsh.bundle,属于 profile layer。安装过程由 DSH 自动处理,无需手动编辑补丁文件。

dsh plugin --profile web add dsh-permission-gate

安装后需要重启 DSH 一次,以便扫描客户端列表。首次访问页面时,系统会要求设置密码。

典型用法

  1. 统一登录:在任意设备登录一次,其他设备上打开的 DSH 页面会在下一次轮询时自动解锁。
  2. 配合真实边界:由于该插件不保护 HTTP API,必须将其与真实的网络边界配合使用(如 WireGuard VPN、Tailscale 或 TLS 反向代理),才能防止直接调用 API 绕过闸门。
  3. 密码管理:使用 DSH 设置模块中的“权限闸门”功能来修改密码或禁用闸门。
  4. 重置密码:忘记密码时,删除 ~/.dsh/permission-gate 文件,重启 DSH 后再次访问页面即可重新设置。

适用场景与注意

  • 不是 HTTP 认证:该插件仅保护浏览器页面和进程内的工具调用,不保护 DSH 的 HTTP API 接口。任何能够访问 DSH 端口的客户端都可以直接调用 API 绕过此插件。
  • 必须配置边界:部署时必须绑定在 loopback 地址,或通过 VPN/反向代理进行访问,否则安全性将低于未安装状态。
  • 会话内存化:会话仅存在于内存中,重启 DSH 进程会清除会话状态,需重新登录。
  • 工具豁免:为了允许锁定的智能体进行基本的状态汇报和账本维护,get_goal、update_goal 和 todo_write 三个工具在锁定状态下仍保持可调用。

总结

dsh-permission-gate 是一个针对 DeepSeek Harness 进程安全的实用插件。它通过 UI 锁页和工具制动器,解决了远程运行和无人值守场景下的基础安全风险。使用时请务必牢记其局限性,并将其部署在真实的网络边界之后。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜