Timikana/rootwarden

GitHub: Timikana/rootwarden

基于 Docker 部署的 Linux 服务器 DevSecOps 集中管理平台,集成了系统运维、安全审计与 CVE 漏洞扫描功能。

Stars: 1 | Forks: 0

[🇬🇧 English version](README.en.md) # 🔐 RootWarden v1.13.0 ## 功能特性 ### 服务器管理 - **SSH 密钥** — 批量部署、密钥时效追踪(超过 90 天告警) - **Linux 更新** — 实时流式 APT update/upgrade,如无 sudo 则回退到 `su -c` - **iptables 防火墙** — 从数据库查看、编辑、备份/恢复规则 - **Fail2ban** — 服务检测(SSH/FTP/Apache/Nginx/Mail)、启用 jails、封禁/解封 IP、自动安装 - **systemd 服务** — 启动、停止、重启 Linux 服务。journalctl 日志、自动分类、受保护服务 - **SSH 审计** — 扫描 sshd_config、安全评分(A-F)、一键修复、配置编辑器、备份/恢复、指令 ON/OFF 切换、重载 sshd - **多代理监控** — 通过 SSH 部署和配置监控代理。支持 Zabbix Agent 2、Centreon Monitoring Agent、Prometheus Node Exporter 和 Telegraf。按平台进行全局配置、按服务器进行覆盖、远程配置编辑器、备份/恢复、多代理徽章、一键扫描所有代理 - **自定义标签** — 为服务器打标签(web、数据库、生产、dmz 等)并按标签过滤 ### CVE 漏洞扫描 - **OpenCVE** — 支持 cloud(app.opencve.io)和 on-prem v2(Bearer token) - **实时流式处理** — JSON-lines、逐包进度显示 - **过滤器** — 按严重程度(CRITICAL/HIGH/MEDIUM)和年份过滤 - **CSV 导出** — 每台服务器一键下载 - **全局概览** — 页面顶部显示整体状态 ### 安全与合规 - **Ed25519 平台密钥对** — 无密码 SSH 认证、渐进式迁移、删除数据库中的机密信息 - **rootwarden 服务账户** — 专用的 Linux 用户,配置 sudoers NOPASSWD:ALL,无需密码 - **邮件重置密码** — 登录页提供“忘记密码”链接、1 小时有效期 token、PHPMailer - **安全启动(start.sh)** — 自动对 .env 执行 chmod 600、检测默认机密、在 Docker 日志中隐藏密码 - **force_password_change** — 首次登录时强制修改密码(superadmin 和新用户) - **首次启动安全加固** — install.sh 生成密码,而非在数据库中硬编码 - **双重加密** — libsodium (sodium:) + AES-256-CBC (aes:),PHP ↔ Python 兼容 - **HKDF 密钥派生** — 为密码(rootwarden-aes)和 TOTP 机密(rootwarden-totp)派生不同的密钥 - **数据库中 TOTP 加密** — 2FA 机密加密(Sodium/AES),向后兼容纯文本 - **2FA TOTP** — 强制多因素身份认证 - **RBAC** — 3 种角色(user、admin、superadmin)+ 14 个细粒度权限 - **DB-verified 认证** — checkAuth/checkPermission 在每次请求时查询数据库,session 仅作为 UI 缓存 - **防提权** — 所有管理端点上的自我编辑保护,SA 不可修改,最后一个 SA 受保护 - **统一的 CSRF** — checkCsrfToken() 支持 POST body、header X-CSRF-TOKEN、body JSON(时序安全) - **SSH 双重认证** — 密钥对模式(sudo NOPASSWD)+ 密码模式(通过临时脚本 su -c),自动检测 - **密码过期** — 按用户可配置(Global/Exempt/30-365天) - **会话超时** — 不活动后自动注销(可配置) - **审计日志** — 记录所有管理操作,支持 CSV 导出和筛选 - **登录历史** — 追踪所有尝试(IP、user-agent、状态) - **合规报告** — 可打印 HTML + 带 SHA-256 哈希的 CSV - **条款与隐私** — 包含 GDPR(访问/更正/删除/可携带权)的专业页面 - **自动数据库备份** — 压缩 mysqldump,可配置保留策略 - **本地编译 Tailwind** — 无 unsafe-eval 的 CSP,不使用外部 CDN - **Docker 隔离网络** — 数据库仅位于内部网络,无互联网访问 - **MySQL 权限受限** — 应用程序用户不使用 ALL PRIVILEGES(SELECT/INSERT/UPDATE/DELETE + 迁移) - **修复 28+ 安全漏洞(3 次审计)** — SQLi、CSRF、XSS、时序攻击等 ### 通知 - **Webhooks** — Slack、Teams、Discord、通用(严重 CVE、服务器离线、部署) - **邮件** — CVE 报告 HTML、用户欢迎邮件(SMTP) ### 仪表盘 - **安全告警** — 未启用 2FA 的用户、旧 SSH 密钥、离线服务器、严重 CVE - **服务器状态** — 每台服务器的 OS 版本、状态、CVE、最近检查时间 - **快捷方式** — 根据权限快速访问模块 ## 技术栈 | 组件 | 技术 | |-----------|------------| | Frontend | PHP 8.2 + Apache, Tailwind CSS (本地编译), htmx 2.0.4, vanilla JS | | Backend API | Python 3.11, Flask, Hypercorn (ASGI) | | Base de données | MySQL 9.1 | | Conteneurisation | Docker Compose | | Reseau Docker | Dual (内部 + 外部) | | Chiffrement | libsodium (PyNaCl) + AES-256-CBC | | Proxy API | PHP → Python (消除 CORS,隐藏 API_KEY) | | i18n | 1424 个 FR/EN 键值,每种语言 19 个模块 | | Tests | pytest (139 个测试), ruff (Python linter), php -l (PHP lint) | | CI/CD | GitHub Actions (lint → test → build Docker) | ## 安装 ### 前置条件 - Docker + Docker Compose ### 快速开始 ``` git clone https://github.com/Timikana/rootwarden.git cd rootwarden cp srv-docker.env.example srv-docker.env # 编辑 srv-docker.env :生成唯一密钥 (openssl rand -hex 32) chmod 600 srv-docker.env ./start.sh -d ``` ### 访问 - 界面:**https://localhost:8443** - superadmin 账户:首次启动时自动生成密码。 请查看:`docker exec cat /var/www/html/.first_run_credentials` 首次登录时必须更改密码。 ### 预生产环境(可选) ``` # 添加一个 Debian 测试服务器 + mock OpenCVE docker-compose --profile preprod up -d ``` ### 关键环境变量 | 变量 | 描述 | |----------|------------| | `SECRET_KEY` | AES/Sodium 加密密钥(64 字符 hex) | | `API_KEY` | frontend → backend 认证 | | `OPENCVE_URL` | OpenCVE URL(cloud 或 on-prem) | | `OPENCVE_TOKEN` | OpenCVE v2 on-prem 的 Bearer token | | `WEBHOOK_URL` | Slack/Teams/Discord Webhook URL | | `SESSION_TIMEOUT` | 会话超时(分钟,默认 30) | | `SSL_MODE` | auto / custom / disabled | | `INIT_SUPERADMIN_PASSWORD` | superadmin 初始密码(空 = 自动生成,推荐) | 完整列表请参见 `srv-docker.env.example`。 ## 迁移 ``` # 检查迁移状态 docker exec gestion_ssh_key_python python /app/db_migrate.py --status # 应用待处理的迁移 docker exec gestion_ssh_key_python python /app/db_migrate.py ``` ## 文档 完整的技术文档可在应用内访问:**https://localhost:8443/documentation.php** 参考文件: - `ARCHITECTURE.md` — 所有文件、数据库表、数据流的图谱 - `CHANGELOG.md` — 版本历史(语义化版本控制) ## 生产环境安全加固 ### 部署前检查清单 1. **唯一机密** — 使用 `openssl rand -hex 32` 生成所有密钥 2. **start.sh** — 使用 `./start.sh` 代替 `docker-compose up`(自动 chmod + 机密验证) 3. **文件权限** — `chmod 600 srv-docker.env`(在 Linux 上通过 start.sh 自动完成) 4. **删除初始凭据** — 首次登录后: docker exec rm /var/www/html/.first_run_credentials 5. **清空 INIT_SUPERADMIN_PASSWORD** — 安装后在 srv-docker.env 中删除该值 6. **SSL** — 使用 SSL_MODE=custom 并提供您自己的证书(Let's Encrypt、企业证书) 7. **主机访问** — 将 Docker 服务器的 SSH 访问权限限制为仅限基础架构管理员 8. **备份** — 启用 BACKUP_ENABLED=true 并设置适当的保留策略 9. **监控** — 配置 webhooks(Slack/Teams)以接收 CVE 和服务器离线告警 ## 常见问题 / 故障排除 ### 在 `docker-compose down -v` 后无法登录 `down -v` 会删除卷(数据库)。重新启动时,`init.sql` 会使用无效的占位符创建账户。 必须运行 `install.sh` 来生成真正的密码。如果 `www/.installed` 标志仍然存在(bind mount),请将其删除: ``` rm -f www/.installed ./start.sh -d docker exec cat /var/www/html/.first_run_credentials ``` 凭据将位于 `.first_run_credentials` 文件中。如果您在 `srv-docker.env` 中定义了 `INIT_SUPERADMIN_PASSWORD`,则以该密码为准。 始终使用 `start.sh` 代替 `docker-compose up` 以利用安全检查。 ### Python 容器无法启动(unhealthy / FileNotFoundError SSL) 后端 SSL 证书在启动时自动生成。如果在 `git pull` 后错误仍然存在,则 Docker 镜像缓存了旧代码: ``` docker compose down docker compose build --no-cache python docker compose up -d ``` ### Python 容器在 `git pull` / `git reset --hard` 后崩溃 在历史记录重写(`filter-repo`、`rebase`)之后,本地 Docker 镜像已过时。必须 **rebuild**: ``` docker compose build --no-cache docker compose up -d ``` 简单的 `up -d` 会重用缓存的镜像 — 它不会检测到复制文件(Dockerfile 中的 `COPY`)中的更改。 ### 默认密码不起作用 密码不再在 `init.sql` 中硬编码。它们在首次启动时由 `install.sh` 生成。使用 `start.sh` 启动并查看初始凭据: ``` docker exec cat /var/www/html/.first_run_credentials ``` 如果文件不存在,则 `install.sh` 未运行(存在 `.installed` 标志或数据库连接错误)。删除标志并重新启动: ``` rm -f www/.installed docker compose restart php ``` ### 在 CVE 扫描/更新期间导航被阻塞 此问题已在 v1.9.1 中修复(`api_proxy.php` 中的 `session_write_close()`)。 如果您使用的是较早的版本,请更新。 ### CVE 扫描返回 0 个漏洞,但实际上存在 检查 **CVSS 阈值**:每台服务器的下拉菜单(Scanner 按钮旁边)可能与全局阈值不同。阈值 `9+`(CRITICAL)会过滤掉所有 HIGH 和 MEDIUM 的 CVE。将其降低到 `0+` 以查看所有内容。 还要检查您的浏览器是否未使用缓存的 JS(Ctrl+Shift+R)。 ### `docker compose down -v` — 会发生什么? | 标志 `-v` | 数据库数据 | SSH 密钥对 | 会话 | 密码 | |-----------|-------------|-------------|----------|-----------| | 不带 `-v` | 保留 | 保留 | 保留 | 保留 | | 带 `-v` | **删除** | **删除** | 删除 | 由 install.sh 通过 start.sh 重新生成 | **切勿在生产环境中使用 `-v`**,除非您想从头开始。 在 `down -v` 之后,使用 `./start.sh -d` 重新启动以重新生成凭据。 ## 许可证 MIT *RootWarden v1.12.0 — 2026-04-11*
标签:Centreon, CISA项目, DevSecOps, Docker, Fail2ban, ffuf, iptables, IT资产管理, libpcap, Linux管理, OpenCVE, PE 加载器, PHP8.2, Python3.11, sshd_config, SSH管理, systemd, Telegraf, Zabbix, 上游代理, 动态API解析, 安全合规, 安全防御评估, 容器化部署, 批量部署, 服务器管理, 服务编排, 监控部署, 系统加固, 网络代理, 自动化运维, 请求拦截, 防火墙管理