# 2026-05-27 Agent os_release 上报 + 前端系统版本拆分 + 空字段隐藏 ## 变更摘要 1. Agent 心跳和 /health 端点新增 `os_release` 字段,读取 `/etc/os-release` 的 PRETTY_NAME(如 "Ubuntu 24.04 LTS") 2. servers.html 系统信息面板拆分为两卡片:「发行版」显示 os_release,「内核平台」显示 platform 3. servers.html 详情面板描述/目标路径/认证方式空值时隐藏整行,不再显示 `--` ## 动机 1. servers.html 系统版本列显示 `Linux-6.8.0-31-generic-x86_64-with-glibc2.39`(内核字符串),无法直观判断发行版 2. 运维人员需要快速识别服务器是 Ubuntu 24 还是 Debian 12 等 3. 空字段显示 `--` 无意义,应该隐藏整行不占空间 ## 涉及文件 ### Agent - `web/agent/agent.py` — 新增 `_os_release()` 函数;health 端点添加 `os_release` 字段;heartbeat payload 添加 `os_release` 字段 ### 前端 - `web/app/servers.html` — 系统信息面板拆分为「发行版」(`siOSRelease` / `os_release`) 和「内核平台」(`siPlatform` / `platform`) 两个独立卡片;描述/目标路径/认证方式空值时隐藏行(`style.display`),目标路径用 `` 标签 ## 技术细节 - `_os_release()` 读取 `/etc/os-release`,解析 `PRETTY_NAME=` 行,如文件不存在返回空字符串 - health 端点中也有内联的 os_release 检测(与 heartbeat 的 `_os_release()` 逻辑相同) - 前端拆分为两个独立卡片:发行版 (`os_release`) + 内核平台 (`platform`),各自独立赋值 ## 部署过程问题 - 机器人 (66.154.115.131) Agent 升级后因旧进程占用 8601 端口导致 crash loop - 原因:旧 Agent 进程未被 kill,新进程无法绑定端口 - 修复:`kill -9 $(lsof -t -i :8601)` 后 `systemctl restart nexus-agent` - 非代码 bug,是升级流程中端口释放竞争问题 ## 需要迁移/重启 - 是:需升级 Agent(curl 新 agent.py + systemctl restart nexus-agent) - 否:无数据库迁移,Nexus 后端无需重启(心跳 JSON 透传) ## 验证方式 1. API `/api/servers/` 返回 `system_info.os_release = "Ubuntu 24.04 LTS"` ✅ 2. 浏览器 servers.html 点击机器人 → 系统信息面板显示 "Ubuntu 24.04 LTS" ✅ 3. 冲量银海显示 "Debian GNU/Linux 12 (bookworm)" ✅ 4. 机器人 Agent 心跳正常发送 ✅ 5. 空字段(描述/目标路径)整行隐藏 ✅ 6. 目标路径编辑保存成功后正确显示 ✅ 7. 后端 /health 返回 `{"status":"ok"}` ✅ ## 审计8步 - H1: `_os_release()` 只读本地文件 — ✅ 无注入风险 - H2: `os_release` / `platform` 字符串用 `textContent` 赋值 — ✅ 无 XSS - H3: /etc/os-release 为系统只读文件 — ✅ 无安全风险 - H4: 空字段隐藏用 `style.display`,值固定为空或 none — ✅ 无注入 - H5: Agent 端口占用非代码问题 — ✅ 运维处理 - H6: 审计文件 `docs/audit/2026-05-27-servers-info-display.md` — ✅ 0 FINDING - DoD: 无明文密码/命令注入/SQL注入/静默吞错/硬编码 ✅ ## 进度条 ☑实现 ☑WSL验证 ☑审计8步 ☑部署 ☑健康检查 ☑浏览器验证 ☑changelog