跳至主要内容

版本 0.9.x

概览

版本 0.9.x 是一个主要版本,引入了一个全面的 用户访问控制和安全系统。此版本将 duplistatus 从一个开放访问的应用程序转变为一个安全的、基于角色的多用户系统,具有综合的审计日志记录和企业级的安全功能。所有现有的功能现在都受到认证保护,只有授权的用户才能访问和管理备份监控。

重大变化

认证要求

  • 所有页面现在都需要认证 - 用户必须登录才能访问应用程序
  • 默认管理员帐户会自动创建:
    • 用户名: admin
    • 密码: Duplistatus09 (必须在第一次登录时更改)
  • 现有的会话将被失效 - 所有的用户必须在升级后登录
  • API 端点现在需要认证 - 外部集成必须包含会话 cookie 或使用认证请求
警告

所有用户必须在升级到版本 0.9.x 后登录。 默认管理员凭证是 admin/Duplistatus09。请立即在第一次登录后更改密码。

数据库模式迁移

  • 从 v3.1 到 v4.0 的自动迁移,适用于现有的安装
  • 添加了新表: users, sessions, audit_log
  • 在迁移前自动创建数据库备份
  • 新安装直接从模式 v4.0 开始(无需迁移)

新功能

用户访问控制和安全系统

认证系统

  • 用户登录/注销功能,具有安全的会话管理
  • 基于密码的认证,使用 bcrypt 哈希(成本因子 12)
  • 帐户锁定机制(5 次失败尝试,15 分钟锁定)
  • 强制密码更改,在第一次登录时
  • 密码策略执行:
    • 最少 8 个字符
    • 至少一个大写字母
    • 至少一个小写字母
    • 至少一个数字
    • 特殊字符可选
  • "记住我" 功能,使用用户名在 localStorage 中持久化
  • 基于会话的认证,使用数据库支持的会话(取代内存)
  • CSRF 保护,集成认证
  • HTTP-only cookie,用于会话安全
  • IP 地址和用户代理跟踪,用于安全监控

用户管理(仅管理员)

  • 用户创建,自动生成临时密码
  • 用户列表,具有搜索、分页和过滤功能
  • 用户编辑(用户名、管理员状态、密码更改要求)
  • 密码重置功能,显示临时密码
  • 用户删除,具有安全措施(防止删除最后一个管理员)
  • 基于角色的访问控制(管理员/用户角色)
  • 状态指示器(活动、锁定、必须更改密码)
  • 最后一次登录跟踪和显示

审计日志系统

  • 全面审计跟踪,用于所有系统更改和用户操作
  • 审计日志查看器,具有高级筛选功能:
    • 日期范围筛选
    • 用户筛选
    • 操作筛选
    • 类别筛选
    • 状态筛选
  • 导出功能(支持CSV和JSON格式)
  • 审计日志统计和分析
  • 可配置的保留期(30-365天,默认:90天)
  • 自动清理定时任务(每天2点UTC运行)
  • 手动清理API,支持dry-run
  • 审计日志记录以下内容:
    • 身份验证事件(登录、注销、密码更改、账户锁定)
    • 用户管理操作(创建、更新、删除、密码重置)
    • 配置更改(电子邮件、NTFY、模板、过期容忍度、备份设置)
    • 备份操作(收集、删除、清理)
    • 服务器管理(添加、更新、删除)
    • 系统操作(迁移、清理、通知)

设置页面重设计

  • 现代侧边栏导航,具有可折叠的侧边栏
  • 用户特定的侧边栏状态持久性(每个用户保存折叠/展开偏好)
  • 分组设置部分:
    • 通知:备份通知、备份监控、模板
    • 集成:NTFY、电子邮件
    • 系统:服务器、用户(仅管理员)、审计日志
  • 粘性侧边栏,在滚动时保持可见
  • 响应式设计,优化间距
  • 设置图标和“系统设置”标题,位于侧边栏头部
  • 后退按钮,集成到应用头部

用户界面增强

  • 独立登录页面,采用现代设计
  • “记住我”复选框,用于登录表单的用户名持久性
  • 显示/隐藏密码按钮,用于登录和密码更改表单
  • 更改密码模态窗口,具有实时验证清单
  • 用户指示器和注销按钮,位于应用头部
  • 基于角色的UI可见性(仅管理员可见的功能对普通用户隐藏)
  • 状态徽章和指示器,遍布整个UI
  • 用户特定的偏好,存储在localStorage中(例如,侧边栏折叠状态)

安全功能

  • 密码哈希,使用bcrypt(行业标准)
  • 敏感数据清理,在审计日志中(密码、令牌、密钥永远不会记录)
  • 登录尝试速率限制
  • 会话过期(24小时)
  • CSRF令牌验证,用于所有状态更改操作
  • 管理员恢复CLI工具,用于密码重置(如果被锁定)

开发者工具

  • 管理员恢复CLI脚本admin-recovery),适用于Docker容器中的易用执行
  • 支持本地和Docker,具有自动路径检测
  • 全面TypeScript接口(无any类型)
  • 身份验证中间件,用于路由保护
  • 审计日志记录器实用程序类,具有便捷方法

🚀 迁移说明

从版本 0.8.x

此版本引入了身份验证,并要求所有用户登录。当从版本 0.8.x 升级时:

  1. 自动数据库迁移:应用程序将自动将您的数据库模式从 v3.1 迁移到 v4.0
  2. 数据库备份:在迁移之前创建自动备份
  3. 默认管理员帐户:创建一个默认管理员帐户:
    • 用户名: admin
    • 密码: Duplistatus09
    • 您必须在第一次登录时更改此密码
  4. 会话失效:所有现有的会话都将失效
  5. 用户登录所需:所有用户必须在升级后登录
  6. API 身份验证:外部集成必须更新以包含身份验证

安全考虑

  • 更改默认密码:在第一次登录后立即更改默认管理员密码
  • 创建用户帐户:为每个需要访问的人创建单独的用户帐户
  • 审查审计日志:定期检查审计日志以进行安全监控
  • 配置保留期:根据您的合规性要求设置适当的审计日志保留期
  • 备份主密钥:如果从 0.8.x 升级,请确保 .duplistatus.key 文件已备份

首次登录步骤

  1. 使用默认凭据登录 (admin / Duplistatus09)
  2. 当提示时更改密码 (强制在第一次登录时)
  3. 为其他用户创建用户帐户 (设置 → 用户)
  4. 根据需要配置审计日志保留期 (设置 → 审计日志)
  5. 审查审计日志以验证系统是否正常工作

🐛 错误修复

  • 修复了服务器重启时会话持久性问题
  • 改进了身份验证失败的错误处理
  • 增强了密码验证反馈
  • 修复了设置页面中的 UI 不一致性
  • 改进了审计日志过滤性能

API 端点

身份验证端点

  • POST /api/auth/login - 用户身份验证
  • POST /api/auth/logout - 会话终止
  • GET /api/auth/me - 当前用户信息
  • POST /api/auth/change-password - 密码更改

用户管理端点 (仅管理员)

  • GET /api/users - 列出用户
  • POST /api/users - 创建用户
  • PATCH /api/users/{id} - 更新用户
  • DELETE /api/users/{id} - 删除用户

审计日志端点

  • GET /api/audit-log - 查询审计日志
  • GET /api/audit-log/download - 导出审计日志
  • GET /api/audit-log/stats - 审计统计信息
  • POST /api/audit-log/cleanup - 手动清理 (仅管理员)
  • GET /api/audit-log/retention - 获取保留设置
  • PATCH /api/audit-log/retention - 更新保留 (仅管理员)
注释

所有 API 端点现在需要身份验证。请参阅 API 参考 以获取有关身份验证的详细信息。


支持

获取帮助

报告错误

报告错误时,请包括:

  • 版本: 0.9.x
  • 操作系统和版本
  • Docker 版本
  • 错误消息和日志
  • 重现步骤
  • 用户角色 (管理员/用户) 如果相关

更新日志

详细更改

  • 添加: 完整的身份验证和授权系统
  • 添加: 基于角色的用户管理
  • 添加: 全面的审计日志系统
  • 添加: 设置页面重新设计,带有可折叠的侧边栏
  • 添加: 管理员恢复 CLI 工具
  • 添加: 密码策略强制执行
  • 添加: 账户锁定机制
  • 添加: 会话管理,带有数据库持久性
  • 更改: 所有页面现在需要身份验证
  • 更改: 数据库模式从 v3.1 到 v4.0
  • 更改: 会话存储从内存到数据库支持
  • 更改: 设置页面布局和导航
  • 修复: 会话持久性在服务器重启时
  • 修复: 各种 UI 不一致性
  • 改进: 安全态势,带有全面的审计日志
  • 改进: 用户体验,带有现代登录和设置页面
  • 改进: 代码质量,带有 TypeScript 接口和 DRY 原则

许可

该项目在 Apache License 2.0 下许可。

Copyright 2025 Waldemar Scudeller Jr.