8.1 KiB
8.1 KiB
文件管理安全功能实现总结
✅ 已完成的功能
1. 操作审计日志 (Audit Log)
实现位置: internal/filesystem/audit_log.go
功能特性:
- ✅ 记录所有文件操作(读取、写入、删除、创建等)
- ✅ 每条日志包含:时间戳、操作类型、文件路径、文件大小、操作结果
- ✅ 使用缓冲区批量写入(每100条或每5秒刷新一次)
- ✅ 按日期自动轮转日志文件(
audit_2006-01-02.log) - ✅ JSON格式存储,易于解析和分析
- ✅ 应用关闭时自动刷新缓冲区
日志存储位置:
- Windows:
%LOCALAPPDATA%\u-desk\logs\ - macOS:
~/Library/Application Support/u-desk/logs/ - Linux:
~/.config/u-desk/logs/
集成方式:
// 在main.go中初始化
logDir := filepath.Join(userDataDir, "logs")
filesystem.InitAudit(logDir)
// 在文件操作中自动记录
filesystem.ReadFile(path) // 自动记录读取操作
filesystem.WriteFile(path, content) // 自动记录写入操作
filesystem.DeletePath(path) // 自动记录删除操作
API接口:
// 获取最近的审计日志
func (a *App) GetAuditLogs(limit int) ([]map[string]interface{}, error)
2. 回收站功能 (Recycle Bin)
实现位置: internal/filesystem/recycle_bin.go
功能特性:
- ✅ 删除文件时移动到回收站而非永久删除
- ✅ 保留原始路径、删除时间、文件大小等元数据
- ✅ 支持跨设备移动(复制+删除)
- ✅ 自动清理超过30天的文件
- ✅ 支持恢复文件到原位置
- ✅ 支持永久删除(清空回收站)
- ✅ JSON元数据存储(
metadata.json)
回收站存储位置:
- Windows:
%LOCALAPPDATA%\u-desk\recycle_bin\ - macOS:
~/Library/Application Support/u-desk/recycle_bin/ - Linux:
~/.config/u-desk/recycle_bin/
文件命名规则:
20060102_150405_随机6位_原文件名.扩展名
例如: 20250127_143022_a3b4c5_config.json
使用示例:
// 删除到回收站
bin := filesystem.GetRecycleBin()
bin.MoveToRecycleBin("C:\\test.txt")
// 恢复文件
bin.RestoreFromRecycleBin("回收站路径")
// 永久删除
bin.DeletePermanently("回收站路径")
// 清空回收站
bin.Empty()
API接口:
// 获取回收站条目列表
func (a *App) GetRecycleBinEntries() ([]map[string]interface{}, error)
// 恢复文件
func (a *App) RestoreFromRecycleBin(recyclePath string) error
// 永久删除
func (a *App) DeletePermanently(recyclePath string) error
// 清空回收站
func (a *App) EmptyRecycleBin() error
3. 文件锁检查 (File Lock Checker)
实现位置: internal/filesystem/file_lock.go
功能特性:
- ✅ 检测文件是否被其他程序占用
- ✅ 尝试独占打开文件以检测锁定状态
- ✅ 提供重试机制(可配置重试次数和间隔)
- ✅ Windows平台专用实现(使用Windows API)
- ✅ 友好的错误提示信息
检查方式:
- 尝试以独占写模式打开文件
- 尝试重命名文件(更彻底的检查)
- 检查错误类型是否为锁定相关错误
- 提供占用进程信息
使用示例:
checker := filesystem.GetFileLockChecker()
// 简单检查
locked, processInfo, err := checker.IsFileLocked("C:\\test.txt")
// 带重试的检查
err := checker.CheckFileWithRetry("C:\\test.txt", 3, 1*time.Second)
// 安全删除(带锁检查)
err := checker.SafeDeleteWithLockCheck("C:\\test.txt")
错误提示示例:
无法删除文件:文件正被其他程序使用
提示:文件正被其他程序使用
请关闭相关程序后重试
📂 新增文件清单
-
internal/filesystem/audit_log.go - 审计日志实现
AuditLogger结构体AuditLogEntry日志条目- 日志记录、缓冲、轮转功能
-
internal/filesystem/recycle_bin.go - 回收站实现
RecycleBin管理器RecycleBinEntry回收站条目- 文件移动、恢复、清理功能
-
internal/filesystem/file_lock.go - 文件锁检查实现
FileLockChecker检查器- Windows API集成
- 错误检测和重试机制
🔧 修改的文件
1. main.go
- 添加
initFileSystemSecurity()初始化函数 - 添加
getUserDataDir()辅助函数 - 配置
OnShutdown回调
2. app.go
- 添加
shutdown()方法 - 添加审计日志API:
GetAuditLogs() - 添加回收站API:
GetRecycleBinEntries()RestoreFromRecycleBin()DeletePermanently()EmptyRecycleBin()
3. internal/filesystem/fs.go
- 添加全局审计日志记录器
- 添加
InitAudit()和CloseAudit()函数 - 在
ReadFile、WriteFile、DeletePath中集成审计日志
🎯 安全层级
系统现在具有多层安全防护:
第1层:前端确认
- ✅ 用户必须确认删除操作
- ✅ 红色危险按钮提醒
- ✅ 防止并发删除
第2层:后端验证
- ✅ 路径安全检查
- ✅ 敏感路径保护
- ✅ 文件大小限制
- ✅ 目录深度限制
第3层:文件锁检查
- ✅ 检测文件占用
- ✅ 防止删除正在使用的文件
- ✅ 提供重试机制
第4层:回收站
- ✅ 删除先移到回收站
- ✅ 30天恢复期
- ✅ 自动清理过期文件
第5层:审计日志
- ✅ 记录所有操作
- ✅ 便于追踪和审计
- ✅ 永久保存操作历史
📊 使用流程
删除文件流程(带所有安全措施):
用户点击删除
↓
前端确认对话框
↓
[后端] 文件锁检查 ← 文件被占用?
↓ ↓
通过 提示关闭程序
↓
[后端] 移动到回收站 ← 删除失败?
↓ ↓
成功 记录审计日志
↓
记录审计日志(成功)
↓
返回前端显示成功
🚀 前端集成建议
虽然后端API已实现,但前端仍需添加UI:
1. 回收站界面
// 获取回收站条目
const entries = await app.GetRecycleBinEntries()
// 显示列表
// - 原始路径
// - 删除时间
// - 文件大小
// - 操作按钮(恢复/永久删除)
// 清空回收站
await app.EmptyRecycleBin()
2. 审计日志界面
// 获取审计日志
const logs = await app.GetAuditLogs(100) // 最近100条
// 显示日志表格
// - 时间戳
// - 操作类型(read/write/delete)
// - 文件路径
// - 成功/失败状态
3. 文件锁错误处理
try {
await deletePathApi(path)
} catch (error) {
if (error.message.includes('文件被占用')) {
// 显示友好提示,建议用户关闭相关程序
Message.error({
content: error.message,
duration: 0, // 不自动关闭
closable: true
})
}
}
📝 配置项
所有配置都在代码中定义,可根据需要调整:
审计日志配置
const bufferSize = 100 // 缓冲区大小
const flushInterval = 5 * time.Second // 刷新间隔
回收站配置
const retentionDays = 30 // 保留天数
const autoCleanupInterval = 24 * time.Hour // 自动清理间隔
文件锁配置
const defaultMaxRetries = 3 // 默认重试次数
const defaultRetryInterval = 1 * time.Second // 默认重试间隔
🧪 测试建议
1. 审计日志测试
- 删除文件,检查日志文件是否生成
- 检查日志格式是否正确(JSON)
- 关闭应用,检查缓冲区是否正确刷新
2. 回收站测试
- 删除文件,检查回收站目录
- 恢复文件,检查原位置是否有文件
- 删除同名文件,检查是否正确处理
- 清空回收站,检查所有文件是否删除
3. 文件锁测试
- 用文本编辑器打开文件
- 尝试删除,应该提示文件被占用
- 关闭编辑器后,应该可以删除
✨ 总结
所有安全功能已成功实现并集成到应用中:
- ✅ 操作审计日志 - 完整追踪所有文件操作
- ✅ 回收站功能 - 30天恢复期,自动清理
- ✅ 文件锁检查 - 防止删除占用文件
系统现在具有企业级的安全性和可靠性,可以有效防止误删和恶意操作,同时提供完整的操作审计能力。
实现日期: 2026-01-27 版本: v0.1.0 作者: Claude Sonnet 4.5