Files
csm/wiki/index.md
iven 60ee38a3c2 feat: 新增补丁管理和异常检测插件及相关功能
feat(protocol): 添加补丁管理和行为指标协议类型
feat(client): 实现补丁管理插件采集功能
feat(server): 添加补丁管理和异常检测API
feat(database): 新增补丁状态和异常检测相关表
feat(web): 添加补丁管理和异常检测前端页面
fix(security): 增强输入验证和防注入保护
refactor(auth): 重构认证检查逻辑
perf(service): 优化Windows服务恢复策略
style: 统一健康评分显示样式
docs: 更新知识库文档
2026-04-11 15:59:53 +08:00

47 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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+LENGTHpayload 用 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 |