DeepSeek Harness 插件介绍:dsh-perm-gate

前言

在 DeepSeek Harness(DSH)的安全生态中,权限控制、自动审批和语义分类通常分散在不同的插件中(如 dsh-permission-rules、dsh-auto-mode 等)。这种拆分导致跨插件版本耦合,且审计链路不统一。

dsh-perm-gate 是一个将“门禁 + 审批 + 分类器”合并为单一包的插件。它通过统一的审计轨迹和确定性的决策优先级,解决了上述问题。

是什么

这是一个为 DeepSeek Harness 设计的、独立的、确定性优先且“失败即关闭”的权限门禁。

插件由 drscrewdriver 维护。它通过固定的优先级链决定每一个工具调用,确保高危操作无法被绕过。

核心功能

  • 命令白名单 / 黑名单:基于 argv 分解进行匹配,支持递归解析 sh -c/bash -c、检测管道、重定向目标以及递归/强制删除指令。
  • 拒绝优先:一旦匹配拒绝规则,其优先级高于任何允许规则。
  • 会话授权:提供精确的 (工具, 规范指纹) 授权,支持 TTL 和 maxUses。不同的目标无法复用授权。子代理可以继承授权,但无法自行签发。
  • 纯函数规则引擎:支持 glob/regex 编译,带有 ReDoS 边界,规则格式错误时 loud fail,并利用源码哈希进行编译缓存。
  • 审计:每个决策都记录为 {ignorable:true} 事件及其 callId,模型可见的原因与记录结果一致。
  • 自动审查 tier:包含 permissive 和 permissive-full 两种模式。这是一种独立的审批模式(介于只读和完全访问之间),前端仅显示一个开关,后端策略可组合配置。permissive-full 变体会移除内置的文件沙箱。
  • 沙箱升级自动回答:当沙箱升级请求从 shell 内部发出时,插件会自动回答,此时门禁插件本身不会看到该调用,但会记录关联的 callId。
  • 分级风险 llmAssist:使用兼容 OpenAI 格式的 LLM 对 ask 进行评级。高危类别(删除、凭证、远程、系统、批量)始终询问,中性类别进入裁决学习。
  • 裁决学习:经过人工批准并实际执行的中性风险操作,在达到阈值后,完全相同的操作(指纹匹配)将被自动允许。
  • 决策事件流:每个决策追加到 JSONL 流中,浏览器端以通知条形式展示,并在对话视图的“审批记录”标签页中按时间倒序显示。

决策流程

插件按优先级顺序对工具调用进行裁决:

阶段 决策 说明
P0 deny 确定性硬拒绝:凭证材料、受保护路径变更、危险 Shell
P1 allow 精确的、有界的 会话授权
P2 deny/allow/ask 静态规则链:先黑名单,再白名单,最后询问
P3 allow/deny/ask 可选的 LLM 语义分类器(默认关闭)
P4 ask 官方审批接口

关键点:严格“失败即关闭”。P0 的决策不会被任何后续步骤(授权、规则、分类器或人工)覆盖。

安装与启用

首先确保你的环境中已安装 DeepSeek Harness。

dsh plugin --profile web add dsh-perm-gate

安装完成后,在 cordis.yml 中添加插件配置:

- id: dsh-perm-gate
  name: dsh-perm-gate
  config:
    rulesFile: ./permissions.yaml   # 可选,默认为 $DSH_HOME/perm-gate/rules.yml
    dshHome: $DSH_HOME              # 受保护目标检查的根目录
    defaultAction: ask              # allow | ask | deny
    gatePresets: [permissive, permissive-full]   # 启用自动审查的层级
    sessionSweep: true              # 每小时清理归档/失效会话的授权数据

典型用法

插件内置了一个预设的拒绝关键词黑名单(继承自 dsh-approval-gate),包含 rm -rf、push --force、drop table、mkfs、git reset --hard、docker system prune 等。

这些关键词会不区分大小写地匹配调用文本,且在白名单、授权和 LLM 判定之前生效。你可以直接在设置卡片中编辑此列表,预设条目会被标记,点击“恢复预设”即可一键还原。

兼容性与注意

  • DSH 版本兼容性:支持 DSH 1.x(遗留分支)、2.x(主分支)和 5.x(0.2.0 线)。
  • 语言包限制:v2.0.0 版本包含 ja/ko 字典,但官方 DSH 的 LocaleRuntime 仅暴露 zh / en(LOCALE_IDS = ["zh", "en"])。在官方 DSH 上直接选择 ja/ko 会报错 locale "<id>" is not registered。如需使用日语或韩语,需要 fork DSH 更新 locale-settings.ts 和 client/index.ts 中的 LOCALES 标签,然后重新构建。
  • 沙箱升级:沙箱升级自动回答在 shell 内部运行,门禁插件本身无法直接感知该操作,但会记录 callId 以供追溯。
  • 文件沙箱移除:permissive-full 变体会移除内置的文件沙箱,这允许 git clone、Cygwin 或 ConPTY 等需要命名管道的操作通过。

结尾

dsh-perm-gate 提供了一套统一的权限门禁机制,从硬性拒绝到语义分析,再到学习型自动批准,覆盖了从安全到效率的完整需求。它不依赖复杂的跨插件版本管理,适合需要细粒度控制和可追溯审计的开发场景。

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

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

小夜