前言¶
在 DeepSeek Harness(DSH)里给 Agent 开工具权限,常见做法是在工具名或权限类别上打标签。真实风险往往出在别处:一次 curl 打到云元数据地址、子代理继承比父会话更宽的权限、或者事后说不清「谁在何时因何允许了这次调用」。社区插件 dsh-baseline(维护者 bbo777,分类 admin-security)把网络出口、子代理上限和可校验审计收进同一套策略,默认倾向拒绝(fail-closed),而不是在不确定时放行。
下面按「是什么 → 能做什么 → 怎么装 → 怎么用 → 边界与注意」介绍,事实以 GitHub README 与 npm 包说明为准。
这是什么¶
dsh-baseline 是面向 DSH 的安全基线插件:策略门控的网络出口、只能收窄不能放宽的子代理权限上限,以及把每次工具判定与结果写入同一条 SHA-256 哈希链的审计。它不魔改 DSH 源码,只使用官方扩展点与事件(如 tools/pre-execute、tools/result、ctx.tools.guard()、ctx.approval、webServer.register() 等)。
与 dsh-permgate、auditrail 等相邻产品定位为互补:本插件守网络底线、子代理单调上限、凭据与破坏性操作等基线,不替代完整的权限分类或全局审计产品。
核心功能¶
网络出口¶
默认行为可概括为:公网主机名在策略允许范围内可访问;私网、回环、链路本地、CGNAT 与云元数据类地址默认阻断。配置 allowedHosts 后进入白名单模式;白名单外的公网目标在 standard 下走 DSH 标准审批,在 strict 下直接拒绝。网络相关命令与 URL 在 pre-execute 中提取,并在 ctx.tools.guard() 中二次复核。
始终阻断的内部主机名与后缀(如云元数据、.internal、.svc、.local 等)不可通过面板关闭;私网等 IP 段由 blockedCIDRs 定义,删除条目会削弱对应范围的阻断,属于操作者的显式选择。
子代理权限上限¶
沿 session.header.parentSession 回溯祖先,对同一次调用重放策略。逻辑在 ctx.tools.guard() 中执行:guard 只有「拒绝 / 不干预」,没有 allow,后注册的 listener 无法把子代理权限放宽。fork 会话不计入 lineage。
审计链¶
判定与工具结果写入本地 SQLite 哈希链;写入前脱敏。Host 提供 verifyChain() 等能力,客户端通过 HTTP API 只读查询,不直接接触数据库。链只记录本插件自身的判定与结果,不上传远端,也不保存 patch、diff、消息体等业务内容。
硬规则与策略模式¶
启用后有两类规则无条件优先于自定义配置:破坏性系统命令(如根目录递归删除、写块设备、fork bomb 等),以及对设备或内核接口的原始写入(如 /dev/sd*、/proc/self/mem、/sys/* 等)。凭据读取/外发拒绝与子代理上限默认开启,仅能通过配置文件中的 guard 开关显式关闭,面板不能关。
策略模式分为 loose、standard(默认)、strict。standard 在有明确信号时触发内置审批(例如管道进 shell、破坏性 Git/SQL、读 .env、白名单外目标等);strict 在无规则命中时对可能改状态或出网的调用更严。熔断、出口预算异常、审计库不可用等情况一律 fail-closed。
安装与启用¶
前置条件¶
- DSH 版本区间:
>=0.2.1-rc.2 <0.3.0(与peerDependencies、engines.dsh一致) - Node.js
>= 22.5,且具备node:sqlite(本包使用DatabaseSync)。22.13 起无需额外 flag;22.5–22.12 需以--experimental-sqlite启动 DSH - DSH 以 Web 模式运行(面板与 HTTP API 依赖
webServer)
当前包版本为 0.1.0,许可证 MIT。
安装命令¶
CLI Web profile 下可从目录安装:
dsh plugin --profile web add dsh-baseline
桌面版请在 Plugin Manager 中安装 npm 包 dsh-baseline。本包安装即启用;装好后重启 DSH,左侧栏出现「基线审计」即表示 Host 与客户端已挂载。
若需先审查再启用,不要在包内改文件,而在 profile 的 cordis.patch.yml 末尾覆盖:
- id: dsh-baseline
disabled: true
审查完成后改为 false 或删除该行,再重启。
配置注意¶
DSH Loader 对同一插件的 config 是整体替换,不是逐字段合并。覆盖时请一次写全需要偏离默认的字段。推荐最小启用示例:
- insert:
- id: dsh-baseline
name: dsh-baseline
disabled: false
config:
defaultMode: standard
替换已安装包后需重启 DSH 才能加载新的 JavaScript 模块。
典型用法¶
- 安装并重启后,在 Web UI 打开「基线审计」面板(主面板 key 为
baseline),只读查看判定与链上记录,必要时在 Host 侧做链校验。 - 需要收紧出网时,在配置中设置
allowedHosts白名单,并按环境选择defaultMode: standard或strict。 - 与
dsh-permgate等同装时,由 permgate 管权限类别,由 baseline 管网络底线、子代理上限与基线审计,二者可共存。
审批一律复用 DSH 标准 ctx.approval,本插件不提供自定义审批 UI。
适用场景与注意¶
适合谁:在 DSH 上跑能出网、能开子代理的 Agent,希望有一层可运营、可审计的底线,且接受「不确定就拒绝」的运维代价的团队或个人。
能力边界(README 明确列出的不覆盖项):
- 无法阻止恶意插件直接
require('child_process')等绕过 ToolRuntime 的原生调用;需要进程隔离、容器或 OS 策略。 - 不覆盖 DSH Code Mode
run_code在 worker thread 内的逃逸。 - 不解析 DNS;域名指向私网或 DNS rebinding 时,插件只能看到主机名字符串。
- 不是防火墙、完整沙箱或替代
dsh-permgate的全能力权限系统。
安装前:插件以当前 DSH 进程的权限运行,安装前应阅读源码与 MIT 许可证,确认策略默认值与 blockedCIDRs、guard 等配置符合你的环境。社区目录 skillhub.cn 插件页 与 dsh-plugin.org 列表 为独立生态站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-baseline 把网络出口、子代理单调上限和哈希链审计绑在同一套 fail-closed 策略里,适合作为 DSH 上的 admin-security 基线层。进一步细节、兼容矩阵与规则 ID 清单见仓库 README。
- 目录页:https://www.skillhub.cn/plugins/bbo777/dsh-baseline
- GitHub:https://github.com/bbo777/dsh-baseline