feat(protocol): 添加补丁管理和行为指标协议类型 feat(client): 实现补丁管理插件采集功能 feat(server): 添加补丁管理和异常检测API feat(database): 新增补丁状态和异常检测相关表 feat(web): 添加补丁管理和异常检测前端页面 fix(security): 增强输入验证和防注入保护 refactor(auth): 重构认证检查逻辑 perf(service): 优化Windows服务恢复策略 style: 统一健康评分显示样式 docs: 更新知识库文档
47 lines
2.4 KiB
Markdown
47 lines
2.4 KiB
Markdown
# CSM 知识库
|
||
|
||
## 项目画像
|
||
|
||
CSM (Client Security Manager) — 医院终端安全管控平台,C/S + Web 三层架构。管理 11 个安全插件,覆盖上网拦截、U盘管控、打印审计、剪贴板管控、补丁管理等场景。
|
||
|
||
**关键数字**: 3 个 Rust crate + Vue 前端 | 18 个数据库迁移 | 13 个客户端插件 | ~30 个 API 端点 | 自定义 TCP 二进制协议
|
||
|
||
## 模块导航树
|
||
|
||
```
|
||
CSM
|
||
├── [[protocol]] — 二进制协议层(Frame 编解码、MessageType、payload 定义)
|
||
├── [[server]] — 服务端(HTTP API + TCP 接入 + WebSocket + SQLite)
|
||
├── [[client]] — 客户端代理(Windows 服务、插件采集、自动重连)
|
||
├── [[web-frontend]] — Web 管理面板(Vue 3 SPA)
|
||
├── [[plugins]] — 插件体系(端到端设计、新增插件清单)
|
||
└── [[database]] — 数据库层(SQLite、迁移、操作方法)
|
||
```
|
||
|
||
## 核心架构决策
|
||
|
||
### 为什么用自定义 TCP 二进制协议而不是 HTTP?
|
||
内网环境低延迟需求,二进制帧比 HTTP 更省带宽和延迟。帧头仅 10 字节(MAGIC+VERSION+TYPE+LENGTH),payload 用 JSON 保持可调试性。
|
||
|
||
### 为什么插件配置用 watch channel 而不是 HTTP 轮询?
|
||
Server 主动推送配置变更到 Client,避免轮询延迟。`tokio::watch` 保证每个插件总是读到最新配置值,配置下发 → 全链路秒级生效。
|
||
|
||
### 为什么嵌入前端而不是独立部署?
|
||
`include_dir!` 编译时打包 `web/dist/`,部署只需一个 server 二进制文件。SPA fallback 让前端路由(如 `/devices`)直接返回 `index.html`。
|
||
|
||
### 为什么 SQLite 而不是 PostgreSQL?
|
||
医院内网单机部署场景,零外部依赖。WAL 模式 + 64MB 缓存足以支撑数百台终端的并发写入。
|
||
|
||
### 为什么三级作用域推送(global/group/device)?
|
||
医院按科室分组管理设备。全局策略作为基线,科室策略覆盖特定需求,单设备策略处理例外情况。`push_to_targets()` 自动解析作用域并过滤在线设备。
|
||
|
||
## 技术栈速查
|
||
|
||
| 层 | 技术 |
|
||
|----|------|
|
||
| 服务端 | Rust + Axum + SQLx + SQLite + JWT + Rustls |
|
||
| 客户端 | Rust + Tokio + sysinfo + windows-rs |
|
||
| 协议 | 自定义 TCP 二进制(MAGIC + VERSION + TYPE + LENGTH + JSON payload) |
|
||
| 前端 | Vue 3 + TypeScript + Vite + Element Plus + Pinia + ECharts |
|
||
| 构建 | Cargo workspace + npm |
|