# 安全日志记录 ## 概述 知识库系统实现了全面的安全日志记录功能,用于记录所有未授权访问尝试和安全相关事件。 ## 功能特性 ### 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 配置