dsh-sentinel:DSH 工具调用审计与安全拦截

前言

在 DeepSeek Harness(DSH)里跑 Agent 时,工具调用会落到本机 shell、文件写入和各类 Host 工具上。任务一长、人不在电脑前,事后很难回答两件事:Agent 到底调用了什么,有没有碰到不该碰的路径或命令。社区里已有记忆钉、任务板、侧边栏等插件,各自管偏好、调度或界面;工具管线的审计与按规则拦截,需要单独挂一层 guard。下面介绍维护者 yanliao66 的 dsh-sentinel(工具哨兵),分类为 admin-security,仓库 yanliao66/dsh-sentinel,目录页见 SkillHub 插件页。DSH 生态是「一切皆插件」;SkillHub 为社区目录,与 DeepSeek / 幻方无官方从属关系。

这是什么

dsh-sentinel 是挂在 Host 工具管线上的插件:在调用真正执行前评估「这次要做什么」,结果写入本地审计日志,并在输入框工具行用盾牌徽标与展开面板展示。在拦截模式下,灾难性 shell 与受保护路径写入会被拒绝,模型收到可解释的拒绝理由。它不存笔记、不调度任务、不统计 token,也不与同类插件共用数据文件。

三种模式

模式属于用户权限:只能在面板里切换,或改 settings.json;Agent 侧的 sentinel 工具不能改模式。切换即时生效,只影响之后的调用。

模式 行为 适用
audit 审计 全部记录,从不阻止 先观察 Agent 工作方式,收集自己的规则
enforce 拦截(默认) 阻止高危命中 日常默认值
strict 严格 在高危之外再阻止中危命中 无人值守长任务

enforce 起会拦例如根目录删除、--no-preserve-root、fork bomb、磁盘格式化、关机重启、curl \| sh 类远程直执行、关闭安全防护、写入 .ssh / .aws / ~/.dsh/credentials、.git/ 内部及插件自身数据目录等。strict 额外拦递归删除、git reset --hard、强制推送、提权、强杀进程、DROP TABLE 等。规则为大小写不敏感的正则启发式匹配;内置规则可逐条关闭,面板可添加自定义规则(≤40 条,单条最长 200 字符)。

面板与 Agent 工具

输入框工具行有盾牌按钮:徽标显示今日拦截数(无拦截时显示高危数),颜色随模式变化。面板内可切换模式、看今日调用 / 高危 / 已拦截 / 失败统计、浏览并筛选审计事件、管理规则、对 shell 命令或写入路径做试运行检测(只匹配规则,不执行)。

Agent 只读工具 sentinel 支持 status、check、events、rules。被拦截时,模型会看到类似:

Blocked by dsh-sentinel (mode=enforce): shell.disk-format [high] 格式化或重写磁盘.
Target: mkfs.ext4 /dev/sda1. Nothing was executed. Do not retry this call ...

在 enforce / strict 下,插件还会向系统提示贡献一小段说明,要求被拦时不要重试、不要绕开监视器;audit 下不占 token。

数据与隐私

数据目录默认 $DSH_HOME/dsh-sentinel/,可用 cordis.patch.yml 里 dataDir 改。settings.json 存模式与规则;events-YYYY-MM-DD.jsonl 按日追加每次已结算的工具调用。日志不写 write/edit 的文件内容,凭据类片段会打码后落盘;规则匹配仍用原始命令。HTTP API 只接受本机回环请求;插件不发起外网请求。日志为本地明文,保留期默认 30 天。

安装与配置

官方 README 给出的安装方式是 clone 后通过 GUI 安装 bundle,不是凭名称拼接 dsh plugin add。

git clone https://github.com/yanliao66/dsh-sentinel.git

在 DSH GUI「插件」页用 install_bundle,target 填 clone 目录的绝对路径。装好后应看到 工具哨兵 / Tool Sentinel,输入框出现盾牌按钮。运行测试需 Node ≥22:

cd dsh-sentinel
node --test test/

部署默认值写在 cordis.patch.yml;面板保存的用户选择优先:

- id: dsh-sentinel
  config:
    mode: enforce          # audit | enforce | strict
    retentionDays: 30
    captureArgs: true
    maxMemoryEvents: 2000

卸载:GUI 移除插件,或删掉 profile package.json 里对应依赖与 bundles 后重装;数据目录可手工删除。许可为 MIT,当前 package 版本为 1.0.0。

适用场景与注意

适合需要留痕、并在默认下拦「明显不该由 Agent 自己做」操作的 DSH 用户。插件以当前 DSH 进程权限运行,安装前应自行查看源码与许可证;它是一道保险丝,不替代沙箱、审批策略或 OS 权限。README 如实列出的限制包括:启发式可能误报/漏报;只检查经 Host 管线的那条命令文本,不逐条检查 shell 内派生命令;相对路径写保护有限;guard 同步且 fail-open(插件自身出错时放行并记 warn)。

结尾

dsh-sentinel 让每次工具调用有据可查,并在 enforce / strict 下为高危与中危操作按下保险丝。更多信息见 GitHub README 与 SkillHub 目录页。

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

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

小夜