Files
KnowledgeBase/docs/security-logging.md
Knowledge Base System acf549c43c feat: 初始化知识库系统项目
- 实现基于 Laravel 11 和 Filament 3.X 的文档管理系统
- 添加用户认证和分组管理功能
- 实现文档上传、分类和权限控制
- 集成 Word 文档自动转换为 Markdown
- 集成 Meilisearch 全文搜索引擎
- 实现文档在线预览功能
- 添加安全日志和审计功能
- 完整的简体中文界面
- 包含完整的项目文档和部署指南

技术栈:
- Laravel 11.x
- Filament 3.X
- Meilisearch 1.5+
- Pandoc 文档转换
- Redis 队列系统
- Pest PHP 测试框架
2025-12-05 14:44:44 +08:00

190 lines
4.8 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.

# 安全日志记录
## 概述
知识库系统实现了全面的安全日志记录功能,用于记录所有未授权访问尝试和安全相关事件。
## 功能特性
### 1. 自动记录未授权访问
系统会自动记录以下未授权访问尝试:
- **查看文档** (view):用户尝试查看无权访问的专用文档
- **下载文档** (download):用户尝试下载无权访问的文档
- **更新文档** (update):用户尝试更新不属于自己的文档
- **删除文档** (delete):用户尝试删除不属于自己的文档
- **恢复文档** (restore):用户尝试恢复不属于自己的文档
- **永久删除** (forceDelete):用户尝试永久删除不属于自己的文档
### 2. 记录的信息
每条安全日志包含以下信息:
- **事件类型** (event)unauthorized_access
- **操作类型** (action)view, download, update, delete 等
- **用户信息**
- 用户 ID (user_id)
- 用户名 (user_name)
- 用户邮箱 (user_email)
- **文档信息**
- 文档 ID (document_id)
- 文档标题 (document_title)
- 文档类型 (document_type)
- 文档分组 ID (document_group_id)
- **请求信息**
- IP 地址 (ip_address)
- 时间戳 (timestamp)
- 用户代理 (user_agent)
## 日志配置
### 日志通道
安全日志使用独立的 `security` 通道,配置在 `config/logging.php` 中:
```php
'security' => [
'driver' => 'daily',
'path' => storage_path('logs/security.log'),
'level' => env('LOG_LEVEL', 'info'),
'days' => env('LOG_SECURITY_DAYS', 90),
'replace_placeholders' => true,
],
```
### 日志保留期
默认情况下,安全日志保留 90 天。可以通过环境变量 `LOG_SECURITY_DAYS` 调整:
```env
LOG_SECURITY_DAYS=90
```
## 查看日志
### 日志文件位置
安全日志存储在:`storage/logs/security.log`
每天会自动创建新的日志文件,格式为:`security-YYYY-MM-DD.log`
### 日志格式示例
```
[2024-12-04 10:30:45] local.WARNING: 未授权访问尝试 {"event":"unauthorized_access","action":"view","user_id":2,"user_name":"张三","user_email":"zhangsan@example.com","document_id":5,"document_title":"机密文档","document_type":"dedicated","document_group_id":3,"ip_address":"192.168.1.100","timestamp":"2024-12-04T10:30:45+08:00","user_agent":"Mozilla/5.0..."}
```
### 使用命令行查看日志
查看最新的安全日志:
```bash
tail -f storage/logs/security.log
```
查看今天的安全日志:
```bash
cat storage/logs/security-$(date +%Y-%m-%d).log
```
搜索特定用户的未授权访问:
```bash
grep "user_id\":2" storage/logs/security.log
```
搜索特定文档的访问尝试:
```bash
grep "document_id\":5" storage/logs/security.log
```
## 安全监控建议
### 1. 定期审查
建议定期审查安全日志,特别关注:
- 频繁的未授权访问尝试
- 来自异常 IP 地址的访问
- 针对敏感文档的访问尝试
- 同一用户的大量失败尝试
### 2. 告警设置
可以配置日志监控工具(如 ELK Stack、Graylog 等)来:
- 实时监控安全日志
- 设置告警规则
- 生成安全报告
- 可视化安全事件
### 3. 日志分析
使用日志分析工具可以:
- 识别攻击模式
- 发现潜在的安全威胁
- 追踪用户行为
- 生成合规报告
## 扩展功能
### SecurityLogger 服务
系统提供了 `SecurityLogger` 服务类,可以用于记录其他安全事件:
```php
use App\Services\SecurityLogger;
// 记录未授权访问
$securityLogger->logUnauthorizedAccess($user, $document, 'view');
// 记录权限验证失败
$securityLogger->logAuthorizationFailure($user, 'Document', $documentId, 'view', '用户不在分组中');
// 记录可疑活动
$securityLogger->logSuspiciousActivity($user, '短时间内大量下载尝试', [
'attempts' => 50,
'timeframe' => '5分钟'
]);
```
## 合规性
安全日志记录有助于满足以下合规要求:
- **数据保护法规**:记录数据访问和使用情况
- **审计要求**:提供完整的访问审计轨迹
- **安全标准**:符合 ISO 27001 等安全标准
- **内部政策**:支持组织的安全政策执行
## 注意事项
1. **隐私保护**:日志中包含用户信息,需要妥善保管
2. **存储空间**:定期清理旧日志以节省存储空间
3. **性能影响**:日志记录对性能影响很小,但在高并发场景下需要监控
4. **日志轮转**:使用 daily 驱动自动进行日志轮转
## 故障排查
### 日志未生成
1. 检查 `storage/logs` 目录权限
2. 确认日志配置正确
3. 检查 `LOG_CHANNEL` 环境变量
### 日志文件过大
1. 调整 `LOG_SECURITY_DAYS` 减少保留天数
2. 配置日志轮转策略
3. 使用外部日志管理系统
### 无法写入日志
1. 检查文件系统权限
2. 确认磁盘空间充足
3. 检查 SELinux 或 AppArmor 配置