# srg-agent **Repository Path**: aurawing/srg-agent ## Basic Information - **Project Name**: srg-agent - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-17 - **Last Updated**: 2026-06-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # srg-agent *sursen-ransom-guard* 的**测试用策略 daemon**。它基于 `srg-client-go` 连接适配器 (Linux 的 `srg-fanotify` / Windows 的 `srg-minifilter`),跑一条极简的前缀策略—— 路径落在受保护前缀下就 **DENY**,其余 **ALLOW**——并打印每条裁决。 它的用途是**端到端打通内核/适配器 ↔ daemon 全链路**,**不是生产策略引擎**(生产由 `ar-verdictd` 承担)。 ## 它做什么 - 用 `srg-client-go`:`Dial` → `Run(Dispatcher)`,实现全部 10 个 `PolicyEngine` 方法。 - 策略极简:对 `--protect ` 列表下的路径 DENY,其余 ALLOW。 - 集成 `ObjectIndex`(Open/Create 兜底)+ `ProcCache`(进程身份缓存),与生产 daemon 同款热路径组件。 - 跨平台:路径前缀比较统一按 `/` 处理;Windows 上先把 minifilter 上报的 NT 设备路径 (`\Device\HarddiskVolumeN\...`)经 `QueryDosDevice` 归一化成盘符(见 `pathnorm_windows.go`)。 ## 命令行参数 | 参数 | 默认 | 说明 | |---|---|---| | `--socket ` | 空(库默认) | 适配器控制 socket(仅 Linux);空则用 `/run/srg-fanotify/adapter.sock` | | `--protect ` | 无 | 受保护路径前缀,可重复,亦可逗号分隔(如 `--protect /tmp/srgtest/locked`) | | `--allow-all` | false | 忽略 `--protect`,一律放行(纯观测模式) | | `--workers ` | 4 | 并发判定 worker 数 | | `--verbose` | true | 打印每条裁决 | | `--no-objindex` | false | 关闭 Open/Create 对象索引重分类(信任适配器基于 btime 的 action) | ## 构建 ```bash # Linux go build -o bin/srg-agent . ``` ```powershell # Windows go build -o bin\srg-agent.exe . ``` > `go.mod` 通过 `replace github.com/yottachain/srg-client-go => ../srg-client-go` > 引用本地库。若把本项目拆为独立仓库,需改为正常的 `require ...@version` 版本依赖。 ## 运行 ### Linux(需 root,fanotify 许可事件要求 `CAP_SYS_ADMIN`) ```bash # 1. 起适配器 sudo ../srg-fanotify/bin/srg-fanotify --watch-path /tmp/srgtest --sock /tmp/srg.sock & # 2. 起 agent sudo ./bin/srg-agent --socket /tmp/srg.sock --protect /tmp/srgtest/locked # 此后 /tmp/srgtest/locked 下的读/打开会以 EPERM 失败 ``` ### Windows(需管理员 + 已加载 SrgFilter 驱动) ```powershell # 先按 srg-minifilter/scripts/install.ps1 加载驱动,再: .\bin\srg-agent.exe --protect C:\srgtest\locked ``` ## 测试脚本(`test/`) | 脚本 | 平台 | 说明 | |---|---|---| | `run_e2e.sh` | Linux/WSL(root) | 基础冒烟:受保护/非保护路径的 open 行为 | | `run_e2e2.sh` | Linux/WSL(root) | 增强:Open/Create 区分、受保护路径 DENY,并验证 fanotify **不**拦截 rename/unlink | | `run_objidx_cmp.sh` | Linux/WSL(root) | 对比开/关 `--no-objindex` 时旧文件 open 的分类(验证对象索引兜底逻辑) | | `run_e2e_win.ps1` | Windows(管理员) | 全 10 接口 e2e:open/create/mkdir/rename/unlink/setattr/getattr 均应 DENY,非保护路径 ALLOW | > WSL 上脚本如报 `$'\r'` 错误,先 `sed -i 's/\r$//' test/*.sh` 去掉 CRLF。 ## 相关 - daemon 客户端库:`../srg-client-go/`(含完整 API 文档) - 总体设计:`../DESIGN.md`