docs: 初始化开发文档
This commit is contained in:
parent
a3fb674dd8
commit
801096355d
|
|
@ -21,3 +21,4 @@
|
|||
# Go workspace file
|
||||
go.work
|
||||
|
||||
sysmonitord.code-workspace
|
||||
|
|
|
|||
|
|
@ -0,0 +1,603 @@
|
|||
# SysMonitord 开发文档
|
||||
|
||||
## 一、项目概述
|
||||
|
||||
### 1.1 项目名称
|
||||
SysMonitord - Linux系统安全监控守护程序
|
||||
|
||||
### 1.2 项目目标
|
||||
开发一款适用于Linux服务器的系统监控工具,通过"纯净白名单模式"的理念,大幅降低运维人员需要关注的安全告警数量,将每日待确认事项控制在5-15个,实现高效、低介入的系统安全监控。
|
||||
|
||||
### 1.3 适用范围
|
||||
所有Linux发行版(Debian、CentOS、Ubuntu等)
|
||||
|
||||
### 1.4 核心设计理念
|
||||
- **纯净白名单模式**:初始状态建立完整的系统和文件白名单,后续仅监控增量变更
|
||||
- **智能过滤**:通过AI辅助判断,自动识别正常运维操作、代码发布、软件升级等行为
|
||||
- **低运维介入**:减少人工干预,通过CI/CD集成实现自动化确认
|
||||
|
||||
---
|
||||
|
||||
## 二、系统架构
|
||||
|
||||
### 2.1 模块划分
|
||||
|
||||
```
|
||||
SysMonitord/
|
||||
├── cmd/
|
||||
│ ├── start/ # 启动命令模块
|
||||
│ ├── status/ # 状态查询模块
|
||||
│ └── safe/ # 安全确认模块
|
||||
├── internal/
|
||||
│ ├── scanner/ # 扫描引擎
|
||||
│ │ ├── process/ # 进程扫描
|
||||
│ │ ├── file/ # 文件扫描
|
||||
│ │ └── hash/ # 哈希计算
|
||||
│ ├── monitor/ # 监控引擎
|
||||
│ │ ├── watcher/ # 文件系统监听
|
||||
│ │ ├── timer/ # 定时扫描
|
||||
│ │ └── detector/ # 异常检测
|
||||
│ ├── storage/ # 数据存储
|
||||
│ │ ├── db/ # 数据文件管理
|
||||
│ │ ├── cache/ # 缓存管理
|
||||
│ │ └── serializer/ # 序列化
|
||||
│ ├── notifier/ # 通知模块
|
||||
│ │ ├── mail/ # 邮件发送
|
||||
│ │ └── ai/ # AI判断
|
||||
│ └── config/ # 配置管理
|
||||
├── pkg/
|
||||
│ ├── utils/ # 工具函数
|
||||
│ └── logger/ # 日志记录
|
||||
├── data/ # 数据文件目录
|
||||
├── install.sh # 安装脚本
|
||||
└── config.yaml # 配置文件
|
||||
```
|
||||
|
||||
### 2.2 数据文件说明
|
||||
|
||||
| 文件名 | 用途 | 格式 |
|
||||
|--------|------|------|
|
||||
| file_system.data | 白名单文件清单 | 路径:哈希 |
|
||||
| process_system.data | 白名单进程清单 | 进程名:路径:哈希 |
|
||||
| file_dubious.data | 可疑文件清单 | 路径:哈希:发现时间 |
|
||||
| process_dubious.data | 可疑进程清单 | 进程名:路径:发现时间 |
|
||||
| file_ignore.data | 例外文件/目录 | 每行一条规则 |
|
||||
| config.yaml | 配置文件 | YAML格式 |
|
||||
|
||||
---
|
||||
|
||||
## 三、功能详细设计
|
||||
|
||||
### 3.1 SysMonitord start
|
||||
|
||||
#### 3.1.1 首次启动流程
|
||||
|
||||
```go
|
||||
func FirstStart() {
|
||||
if !fileExists("file_system.data") {
|
||||
// 1. 扫描所有进程
|
||||
processes := scanAllProcesses()
|
||||
// 2. 合并处理(去重、过滤系统进程)
|
||||
processed := mergeAndFilterProcesses(processes)
|
||||
// 3. 存储进程白名单
|
||||
saveProcessSystem(processed)
|
||||
|
||||
// 4. 遍历所有目录文件
|
||||
files := walkAllFiles()
|
||||
// 5. 批量计算哈希(带进度显示)
|
||||
for file := range files {
|
||||
hash := calculateHash(file)
|
||||
storeTemp(file, hash)
|
||||
}
|
||||
// 6. 统一存储文件白名单
|
||||
saveFileSystem()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 3.1.2 监控机制
|
||||
|
||||
**实时文件监听**(inotify/fanotify):
|
||||
- 监听目录:/etc, /usr, /opt, /var/www, /home等关键目录
|
||||
- 事件类型:create, modify, delete, move
|
||||
- 例外目录:根据file_ignore.data跳过
|
||||
|
||||
**周期进程扫描**(每30秒):
|
||||
- 获取当前所有进程
|
||||
- 与process_system.data对比
|
||||
- 新进程加入process_dubious.data
|
||||
|
||||
**防重复告警机制**:
|
||||
```go
|
||||
type DebounceAlert struct {
|
||||
timer *time.Timer
|
||||
mu sync.Mutex
|
||||
}
|
||||
|
||||
func (d *DebounceAlert) Trigger() {
|
||||
d.mu.Lock()
|
||||
defer d.mu.Unlock()
|
||||
|
||||
if d.timer != nil {
|
||||
d.timer.Stop()
|
||||
}
|
||||
d.timer = time.AfterFunc(30*time.Second, func() {
|
||||
sendAlertEmail()
|
||||
})
|
||||
}
|
||||
```
|
||||
|
||||
### 3.2 SysMonitord status
|
||||
|
||||
显示当前状态信息:
|
||||
```
|
||||
SysMonitord Status
|
||||
==================
|
||||
运行状态: 监控中
|
||||
运行时长: 15天 3小时 22分钟
|
||||
|
||||
白名单统计:
|
||||
- 文件白名单: 125,847 个
|
||||
- 进程白名单: 342 个
|
||||
|
||||
监控数据:
|
||||
- 可疑文件: 23 个
|
||||
- 可疑进程: 5 个
|
||||
|
||||
最后扫描: 2024-01-15 10:30:25
|
||||
下次扫描: 2024-01-15 10:30:55
|
||||
|
||||
配置文件: /etc/sysmonitord/config.yaml
|
||||
数据目录: /var/lib/sysmonitord/
|
||||
日志目录: /var/log/sysmonitord/
|
||||
```
|
||||
|
||||
### 3.3 SysMonitord safe
|
||||
|
||||
交互式安全确认界面:
|
||||
|
||||
```
|
||||
╔══════════════════════════════════════════════╗
|
||||
║ 可疑文件清单 (23个) ║
|
||||
╠══════════════════════════════════════════════╣
|
||||
║ 1. /opt/app/config/app.conf ║
|
||||
║ Hash: 3a7b8c9d... 发现时间: 2024-01-15 ║
|
||||
║ 2. /usr/local/bin/new-tool ║
|
||||
║ Hash: 5e6f7g8h... 发现时间: 2024-01-14 ║
|
||||
║ ... ║
|
||||
╠══════════════════════════════════════════════╣
|
||||
║ 可疑进程清单 (5个) ║
|
||||
╠══════════════════════════════════════════════╣
|
||||
║ 1. python3 /tmp/script.py ║
|
||||
║ PID: 12345 发现时间: 2024-01-15 ║
|
||||
║ 2. ./custom-agent ║
|
||||
║ PID: 12346 发现时间: 2024-01-14 ║
|
||||
╚══════════════════════════════════════════════╝
|
||||
|
||||
请选择操作:
|
||||
[1] 以上可疑文件安全 (移至白名单)
|
||||
[2] 以上可疑进程安全 (移至白名单)
|
||||
[3] 全部确认安全
|
||||
[4] 退出
|
||||
|
||||
请输入选项 (1-4):
|
||||
```
|
||||
|
||||
处理逻辑:
|
||||
```go
|
||||
func ConfirmSafe(choice int) {
|
||||
switch choice {
|
||||
case 1: // 文件安全
|
||||
appendToFileSystem(file_dubious.data)
|
||||
clearFile("file_dubious.data")
|
||||
case 2: // 进程安全
|
||||
appendToProcessSystem(process_dubious.data)
|
||||
clearFile("process_dubious.data")
|
||||
case 3: // 全部安全
|
||||
appendToFileSystem(file_dubious.data)
|
||||
appendToProcessSystem(process_dubious.data)
|
||||
clearDubiousFiles()
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3.4 配置文件设计
|
||||
|
||||
```yaml
|
||||
# /etc/sysmonitord/config.yaml
|
||||
|
||||
# 通知配置
|
||||
notification:
|
||||
email:
|
||||
enabled: true
|
||||
recipients:
|
||||
- admin@example.com
|
||||
- security@example.com
|
||||
smtp:
|
||||
server: smtp.example.com
|
||||
port: 587
|
||||
user: sysmonitord@example.com
|
||||
password: ${SMTP_PASSWORD} # 从环境变量读取
|
||||
webhook:
|
||||
enabled: false
|
||||
url: https://your-webhook.com/alert
|
||||
|
||||
# AI判断配置
|
||||
ai:
|
||||
enabled: true
|
||||
api_url: https://api.openai.com/v1/chat/completions
|
||||
model: gpt-3.5-turbo
|
||||
threshold: 0.85 # 置信度阈值
|
||||
|
||||
# 审计服务器
|
||||
audit:
|
||||
enabled: true
|
||||
product: kunas
|
||||
server: 10.2.x.x
|
||||
port: 8080
|
||||
|
||||
# 扫描配置
|
||||
scanner:
|
||||
file:
|
||||
exclude_paths:
|
||||
- /proc/
|
||||
- /sys/
|
||||
- /dev/
|
||||
- /tmp/ # 临时目录暂不监控(待优化)
|
||||
max_file_size: 100MB # 超过此大小的文件不计算hash
|
||||
hash_algorithm: sha256
|
||||
process:
|
||||
scan_interval: 30 # 秒
|
||||
exclude_processes:
|
||||
- kthreadd
|
||||
- migration
|
||||
|
||||
# 监听配置
|
||||
watcher:
|
||||
enabled: true
|
||||
paths:
|
||||
- /etc
|
||||
- /usr/local
|
||||
- /opt
|
||||
- /var/www
|
||||
recursive: true
|
||||
ignore_patterns:
|
||||
- "*.log"
|
||||
- "*.cache"
|
||||
- "*.tmp"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 四、开发计划
|
||||
|
||||
### Phase 1: 基础框架(第1-2周)
|
||||
- [ ] 项目结构搭建
|
||||
- [ ] 配置文件解析模块
|
||||
- [ ] 日志系统
|
||||
- [ ] 基础命令行框架(cobra)
|
||||
|
||||
### Phase 2: 扫描引擎(第3-4周)
|
||||
- [ ] 进程扫描模块
|
||||
- [ ] 文件遍历模块
|
||||
- [ ] 哈希计算模块(带进度)
|
||||
- [ ] 数据序列化存储
|
||||
|
||||
### Phase 3: 监控引擎(第5-6周)
|
||||
- [ ] inotify文件监听
|
||||
- [ ] 定时进程扫描
|
||||
- [ ] 异常检测算法
|
||||
- [ ] 去重告警机制
|
||||
|
||||
### Phase 4: 通知与AI(第7-8周)
|
||||
- [ ] 邮件发送模块
|
||||
- [ ] AI判断集成(OpenAI API)
|
||||
- [ ] 审计服务器上报
|
||||
- [ ] 告警模板
|
||||
|
||||
### Phase 5: 交互与安装(第9周)
|
||||
- [ ] safe命令交互界面
|
||||
- [ ] status命令状态展示
|
||||
- [ ] 安装脚本
|
||||
- [ ] systemd服务配置
|
||||
|
||||
### Phase 6: 测试与优化(第10周)
|
||||
- [ ] 单元测试
|
||||
- [ ] 集成测试
|
||||
- [ ] 性能优化
|
||||
- [ ] 文档完善
|
||||
|
||||
---
|
||||
|
||||
## 五、关键技术点
|
||||
|
||||
### 5.1 性能优化
|
||||
|
||||
**大文件处理策略**:
|
||||
```go
|
||||
func ShouldHashFile(file os.FileInfo) bool {
|
||||
// 跳过超大文件
|
||||
if file.Size() > 100*1024*1024 {
|
||||
return false
|
||||
}
|
||||
// 跳过特定类型
|
||||
ext := filepath.Ext(file.Name())
|
||||
skipExts := []string{".mp4", ".avi", ".iso", ".tar"}
|
||||
if contains(skipExts, ext) {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
```
|
||||
|
||||
**批量存储优化**:
|
||||
- 使用bufio缓冲写入
|
||||
- 分批处理,每1000条flush一次
|
||||
- 使用mmap映射大文件
|
||||
|
||||
### 5.2 AI判断集成
|
||||
|
||||
```go
|
||||
type AIAnalyzer struct {
|
||||
client *openai.Client
|
||||
model string
|
||||
}
|
||||
|
||||
func (a *AIAnalyzer) Analyze(changes []Change) (bool, string) {
|
||||
prompt := buildPrompt(changes)
|
||||
response := a.client.ChatCompletion(prompt)
|
||||
|
||||
// 解析AI响应
|
||||
if response.Confidence > 0.85 {
|
||||
return true, response.Reason
|
||||
}
|
||||
return false, response.Reason
|
||||
}
|
||||
```
|
||||
|
||||
### 5.3 自动化确认集成
|
||||
|
||||
在CI/CD脚本中集成:
|
||||
```bash
|
||||
# 部署脚本示例
|
||||
#!/bin/bash
|
||||
|
||||
# 部署新代码
|
||||
git pull
|
||||
systemctl restart myapp
|
||||
|
||||
# 自动确认文件安全
|
||||
sysmonitord safe --auto --file /opt/myapp/config/*.conf
|
||||
sysmonitord safe --auto --process myapp
|
||||
```
|
||||
|
||||
### 5.4 systemd服务配置
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=SysMonitord Security Monitor
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
ExecStart=/usr/local/bin/sysmonitord start
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
LimitNOFILE=65536
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 六、数据格式规范
|
||||
|
||||
### 6.1 file_system.data格式
|
||||
```
|
||||
# 格式: 文件路径:哈希值:修改时间
|
||||
/etc/passwd:5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8:1705315200
|
||||
/usr/bin/bash:8b7df143d91c716ecfa5fc1730022f6b421b05cedee8fd52b1fc65a96030ad52:1705315200
|
||||
```
|
||||
|
||||
### 6.2 process_system.data格式
|
||||
```
|
||||
# 格式: 进程名:可执行文件路径:哈希值
|
||||
sshd:/usr/sbin/sshd:3a7b8c9d1e2f3a4b5c6d7e8f9a0b1c2d
|
||||
nginx:/usr/sbin/nginx:4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e
|
||||
```
|
||||
|
||||
### 6.3 file_ignore.data格式
|
||||
```
|
||||
# 注释行以#开头
|
||||
/tmp/ # 忽略整个tmp目录
|
||||
/var/log/ # 忽略日志目录
|
||||
/opt/app/cache/ # 忽略缓存目录
|
||||
/etc/nginx/nginx.conf # 只忽略特定文件
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 七、安装与部署
|
||||
|
||||
### 7.1 一键安装脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# install.sh
|
||||
|
||||
set -e
|
||||
|
||||
# 检测系统
|
||||
if [[ -f /etc/debian_version ]]; then
|
||||
PKG_MANAGER="apt-get"
|
||||
elif [[ -f /etc/redhat-release ]]; then
|
||||
PKG_MANAGER="yum"
|
||||
else
|
||||
echo "Unsupported distribution"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 安装依赖
|
||||
$PKG_MANAGER update
|
||||
$PKG_MANAGER install -y golang git
|
||||
|
||||
# 下载源码
|
||||
git clone https://github.com/yourcompany/sysmonitord.git /tmp/sysmonitord
|
||||
|
||||
# 编译
|
||||
cd /tmp/sysmonitord
|
||||
make build
|
||||
|
||||
# 安装
|
||||
make install
|
||||
|
||||
# 创建必要目录
|
||||
mkdir -p /var/lib/sysmonitord
|
||||
mkdir -p /var/log/sysmonitord
|
||||
|
||||
# 安装systemd服务
|
||||
cp systemd/sysmonitord.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
|
||||
# 提示配置
|
||||
echo "SysMonitord installed successfully!"
|
||||
echo "Please edit /etc/sysmonitord/config.yaml to configure email and AI settings"
|
||||
echo "Then run: systemctl start sysmonitord"
|
||||
|
||||
# 清理
|
||||
rm -rf /tmp/sysmonitord
|
||||
```
|
||||
|
||||
### 7.2 用户安装命令
|
||||
```bash
|
||||
# 在线安装
|
||||
curl -fsSL https://yourdomain.com/install | sudo bash
|
||||
|
||||
# 离线安装
|
||||
wget https://yourdomain.com/sysmonitord.tar.gz
|
||||
tar -xzf sysmonitord.tar.gz
|
||||
cd sysmonitord
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 八、测试策略
|
||||
|
||||
### 8.1 单元测试
|
||||
- 哈希计算函数
|
||||
- 文件过滤规则
|
||||
- 配置解析
|
||||
- 数据序列化
|
||||
|
||||
### 8.2 集成测试
|
||||
- 完整扫描流程
|
||||
- 监控触发机制
|
||||
- 邮件发送
|
||||
- AI判断集成
|
||||
|
||||
### 8.3 性能测试
|
||||
- 10万文件扫描时间
|
||||
- 内存占用
|
||||
- CPU使用率
|
||||
- 磁盘I/O
|
||||
|
||||
### 8.4 稳定性测试
|
||||
- 7x24小时运行
|
||||
- 异常恢复
|
||||
- 资源泄漏检测
|
||||
|
||||
---
|
||||
|
||||
## 九、未来优化方向(Phase 2)
|
||||
|
||||
1. **存储优化**
|
||||
- 使用LevelDB替代文件存储
|
||||
- 增量哈希存储
|
||||
- 分片存储大文件清单
|
||||
|
||||
2. **性能优化**
|
||||
- 大文件跳过机制
|
||||
- 并行哈希计算
|
||||
- 增量扫描
|
||||
|
||||
3. **增强监控**
|
||||
- /tmp目录执行监控
|
||||
- 批量文件修改检测
|
||||
- Bash子进程检测
|
||||
- 系统日志关联分析
|
||||
|
||||
4. **安全增强**
|
||||
- 进程hook保障
|
||||
- 自我保护机制
|
||||
- 完整性校验
|
||||
|
||||
5. **智能告警**
|
||||
- AI模型训练(基于历史数据)
|
||||
- 异常行为模式识别
|
||||
- 自动化响应
|
||||
|
||||
---
|
||||
|
||||
## 十、开发规范
|
||||
|
||||
### 10.1 代码规范
|
||||
- 使用golangci-lint进行代码检查
|
||||
- 遵循Go官方代码规范
|
||||
- 所有导出函数必须有注释
|
||||
- 错误处理必须完整
|
||||
|
||||
### 10.2 Git规范
|
||||
- 分支策略:main(稳定版)/ develop(开发版)/ feature/*(功能分支)
|
||||
- Commit信息格式:`[模块] 简短描述`
|
||||
- 示例:`[scanner] 添加文件哈希计算并发支持`
|
||||
|
||||
### 10.3 版本规范
|
||||
- 使用语义化版本:v主版本.次版本.修订号
|
||||
- v1.0.0:首次稳定版
|
||||
- v1.x.x:功能更新
|
||||
- v1.0.x:bug修复
|
||||
|
||||
---
|
||||
|
||||
## 十一、文档清单
|
||||
|
||||
- [ ] README.md - 项目介绍
|
||||
- [ ] INSTALL.md - 安装指南
|
||||
- [ ] CONFIG.md - 配置说明
|
||||
- [ ] API.md - API文档(如有)
|
||||
- [ ] TROUBLESHOOTING.md - 故障排查
|
||||
- [ ] DEVELOPMENT.md - 开发指南
|
||||
|
||||
---
|
||||
|
||||
## 附录:命令速查
|
||||
|
||||
```bash
|
||||
# 启动监控
|
||||
sysmonitord start
|
||||
|
||||
# 查看状态
|
||||
sysmonitord status
|
||||
|
||||
# 安全确认
|
||||
sysmonitord safe
|
||||
|
||||
# 自动确认(CI/CD用)
|
||||
sysmonitord safe --auto --file /path/to/file
|
||||
sysmonitord safe --auto --process process_name
|
||||
|
||||
# 查看日志
|
||||
journalctl -u sysmonitord -f
|
||||
tail -f /var/log/sysmonitord/monitor.log
|
||||
|
||||
# 重启服务
|
||||
systemctl restart sysmonitord
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**最后更新**: 2026-03-28
|
||||
Loading…
Reference in New Issue
Block a user