From 9b309045c5eae1db013f766a56b098ccb60ac84d Mon Sep 17 00:00:00 2001 From: root <1291454411@qq.com> Date: Fri, 25 Sep 2026 04:51:42 +0800 Subject: [PATCH] =?UTF-8?q?security:=20D1=E5=8E=86=E5=8F=B2=E6=B8=85?= =?UTF-8?q?=E7=90=86=E5=AE=8C=E6=88=90(force=20push=20d409606)+RustDesk?= =?UTF-8?q?=E6=94=B9=E5=AF=86+=E6=96=B0=E5=AF=86=E9=92=A5=E7=94=9F?= =?UTF-8?q?=E6=88=90=E8=90=BD=E6=9C=AC=E5=9C=B0env=EF=BC=9B=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=BD=AE=E6=8D=A2=E5=9B=A0/dev/sdb1=20I/O=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=9A=82=E7=BC=93=EF=BC=8Crunbook=E8=90=BD=E7=9B=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SECURITY_DECISIONS.md | 63 ++++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/SECURITY_DECISIONS.md b/SECURITY_DECISIONS.md index 280cac8..0a93ed3 100644 --- a/SECURITY_DECISIONS.md +++ b/SECURITY_DECISIONS.md @@ -1,37 +1,44 @@ # 安全遗留拍板清单 / SECURITY_DECISIONS.md -日期: 2026-09-25 · 前置: 全局检测报告(架构/安全/业务/部署四方向) +日期: 2026-09-25 · 前置: 全局检测报告(架构/安全/业务/部署四方向)· 状态: 执行轮 R2 -## 本轮已修(仅本仓库,不触碰线上运行) -1. **rustdesk-config-export 出库 + ignore**:远控中转服务器地址与永久密码哈希不再随 HEAD 分发(历史对象仍在,见 D1)。磁盘文件已保留。 -2. **nginx-docker.conf**:4 个自带 `add_header` 的 location(/api-directory/、/assets、静态资源、/index.html)补齐 nosniff / X-Frame-Options / Referrer-Policy,修复 add_header 层级覆盖继承导致的静态响应裸奔。 - - 生效条件:服务器上 `docker compose restart frontend`(pull 本仓不会热生效,线上运行不受影响)。 -3. **PLANNING/tasks.py**:state.json 改为临时文件 + `os.replace` 原子写(防并发/中断写坏;多进程同时读改写的丢失更新窗口仍在,量级可接受)。 -4. **infra/backup.sh**:新增可选 `BACKUP_REMOTE_DIR`(设置后自动 rsync 异地副本,不设则行为不变)。 -5. **B6 产物出库复核**:当前跟踪的 png/log/tar.gz 为 0,88 项实际已在 6d22fb1 完成,SECURITY_FIX 文档该条滞后。 +## 已执行(R2, 2026-09-25) +1. **D1 git 历史清理 ✅**:`git filter-repo` 清除 `docker.env` 与 `rustdesk-config-export/` 全部历史(验证命中 0),重写前备份 `backups/vscode-pre-rewrite-20260925.bundle`,已 force push(`02d2740→d409606`)。Gitea 服务端旧对象需等其 GC,短时间旧 SHA 仍可能直达,根治靠密钥轮换。 +2. **RustDesk 永久密码 ✅**:本机被控端已通过提权 CLI 更换(新密码见交付记录/本地 docker.env 同批)。服务器侧白名单仍待做(见 D2 余项)。 +3. **新密钥已生成 ✅**:POSTGRES / REDIS / DJANGO_SECRET_KEY 三项新值已写入本地 `docker.env`(untracked),**尚未在服务器生效**(原因见「阻塞」)。 +4. **D5 主工程归属 ✅**:`chunyu_project` 与 `chunyu_project_react` 各有独立 gitea 仓库(root/chunyu_project、root/chunyu_prject_react——注意 react 仓 URL 拼写少 e,能用但建议改名)。 +5. **D4 结论**:registry 13 模型已有 grade;六维合计 42 vs total_max=36 的基准问题未动,需评分口径拍板(改哪边决定是否重算历史 grade)。 +6. **B6 复核 ✅**:88 项产物实际已在 6d22fb1 出库,跟踪数现为 0。 -## 待拍板(不可逆 / 涉及线上或远程仓库,一句话确认即可执行对应项) -### D1 git 历史清理(docker.env 真实密码 + rustdesk 配置仍可从历史取回) +## 阻塞:生产密钥轮换暂缓(等磁盘修复,避免造成停机) +**服务器事故(本轮发现,先于本操作存在)**:`/dev/sdb1`(挂载点 `/mnt/sda`)整盘目录级 I/O 错误;chunyu-backend 的代码卷 `/mnt/sda/chunyu/chunyu_project → /app` 在该盘上,容器已 unhealthy(健康检查 `OSError: [Errno 5] /app`,连败 2449 次),站点首页/SPA 路由 500、部分 API 仍 200。服务器未装 smartctl,dmesg 无输出,需现场检查盘/线/换盘 + fsck。 + +**轮换不能现在做的原因**:改 POSTGRES/REDIS/DJANGO_SECRET_KEY 必须重建 backend(env 变更),而 compose 文件在坏盘上(`docker compose` 读不到就无法回滚),重建失败=整站下线。 + +**磁盘恢复后的轮换 runbook(约 5 分钟,期间 backend 短暂重启、旧 session 失效)**: ```bash -pip install git-filter-repo -git filter-repo --invert-paths --path docker.env --path rustdesk-config-export --force -git remote add origin https://gitea.mymoyu.top/root/vscode-workbench.git # filter-repo 会移除 remote -git push origin master --force +# 1) 备份并替换服务器 docker.env(本机 docker.env 即新值源;保持权限 600) +cp /mnt/sda/chunyu/docker.env /mnt/sda/chunyu/docker.env.bak-$(date +%Y%m%d) +# 用 scp/上传覆盖 /mnt/sda/chunyu/docker.env(含新 POSTGRES/REDIS/SECRET,DJANGO_DEBUG=False) +# 2) 改库密码(pg-main 共享库,只动 chunyu 角色) +docker exec pg-main psql -U postgres -c "ALTER USER chunyu WITH PASSWORD '<新POSTGRES_PASSWORD>';" +# 3) 重建受影响容器(用与原部署相同的 compose 命令/env-file 方式) +cd /mnt/sda/chunyu && docker compose up -d --force-recreate redis backend +# 4) 验证:docker ps 健康、curl 首页/登录、redis-cli -a 新密码 ping ``` -影响:改写远程历史,所有 clone 需重新拉取;需确认无其他协作者持有旧 clone。 +注意:新 docker.env 已含 `DJANGO_DEBUG=False`(生产现在是 True,一并收紧);EMAIL_HOST_PASSWORD 未轮换(需邮件服务商后台改);轮换后本机 redis/postgres MCP 连接配置需同步换新密码。 -### D2 RustDesk 服务器侧加固(需操作远控,改即生效) -- 被控端更换永久密码(客户端 设置→安全→永久密码),更换后本机 rustdesk-config-export 重新导出才会更新。 -- 103.40.14.100 的 hbbs/hbbr(51116-51118)加来源 IP 白名单或防火墙限制。 +## 待拍板余项 +- **D2 余项**:103.40.14.100(frp 入口)与 LAN rustdesk-s6 的防火墙/白名单收紧。 +- **D3 余项**:B2 生产 TLS+HSTS、B3 服务器防火墙收紧、B5 容器 USER 非 root。 +- **D4**:registry 分值基准 36 vs 42 拍板后改。 +- **服务器磁盘 /dev/sdb1**:现场检修 + 考虑把 chunyu 部署迁回 nvme 系统盘并纳入备份。 -### D3 线上 B1-B5(沿用 SECURITY_FIX_SPEC.md deferred 清单,均需停机/线上授权) -B1 线上密钥全量轮换(含 DJANGO_SECRET_KEY,会使现有 session 失效) / B2 生产 TLS+HSTS / B3 服务器防火墙收紧 / B5 容器 USER 非 root。 - -### D4 model-registry.json 分值基准(六维合计 42 vs total_max=36) -修哪边决定 grade 换算基准(dim5<50% veto 的分母含义不同),需评分口径拍板后改,未拍板前不动。 - -### D5 主工程源码仓库归属 -chunyu_project / chunyu_project_react 不在本仓版本控制与备份范围(.gitignore),compose build 与 task-manifest 均指向本地目录。需确认是否已有独立 repo;若无,建仓并纳入备份。 +## R1 已修(仅本仓库,2026-09-25 上午) +1. rustdesk-config-export 出库 + ignore(磁盘文件保留)。 +2. nginx-docker.conf 四个自带 add_header 的 location 补齐安全头(修继承丢失);线上生效需服务器手动 restart frontend。 +3. PLANNING/tasks.py state.json 原子写。 +4. infra/backup.sh 可选 BACKUP_REMOTE_DIR 异步同步。 ## 注意事项 -- 本轮提交推送后,其他机器 `git pull` 会从其工作区移除 rustdesk-config-export 目录(git rm --cached 语义);若服务器上有引用请先拷贝。 -- nginx-docker.conf 属已跟踪文件,本仓修改不会自动影响线上;需在服务器手动 restart frontend 才生效。 +- 本轮提交推送后,其他机器 `git pull` 会从其工作区移除 rustdesk-config-export 目录;若服务器有引用请先拷贝。 +- 本地 docker.env 已是新密钥:本地下次起 dev 时,本地 postgres_data 卷仍是旧密码,需先 `ALTER USER` 或清 dev 卷。