0100ab2582
Move line-walk/delta/phase2/frontend audits and legacy memory into docs/archive/, add functional development SSOT, thin AGENTS/CLAUDE stubs, and regenerate changelog/audit indexes via consolidate_docs.py.
3.2 KiB
3.2 KiB
Phase 2 深审 — Wave P2-4(servers.py 全文)
日期: 2026-06-04
范围: 服务器 CRUD/Agent/导入/批量 SSH 全文 + 凭据加密/文件能力探测
标准: standards/line-walk-audit-standard-v2.md 8 步
登记
| # | 文件 | 语言 | 行数 N | Read 范围 |
|---|---|---|---|---|
| 1 | server/api/servers.py |
Python | 1742 | 1–1742 全文(分段 Read 至 EOF) |
| 2 | server/infrastructure/database/crypto.py |
Python | 54 | 1–54 全文 |
| 3 | server/infrastructure/ssh/files_capability.py |
Python | 63 | 1–63 全文 |
| 4 | server/utils/files_elevation.py |
Python | 55 | 1–55 全文(P2-1 已读,本波交叉验证) |
| 5 | server/infrastructure/ssh/remote_shell.py |
Python | 63 | 1–63 全文(P2-1 已读,setup-files-sudo 关联) |
入口表(servers.py 26 路由)
| 类别 | 路由数 | 鉴权 |
|---|---|---|
| CRUD / 列表 / stats | GET/POST/PUT/DELETE | 全部 JWT |
| CSV import | POST /import |
JWT + 1MB/500行 |
| 批量 Agent | POST /batch/* |
JWT + Semaphore(5) |
| Agent 单台 | POST `/{id}/install | uninstall |
| 敏感 reveal | POST /{id}/agent-key, agent-install-cmd |
JWT + bcrypt re-auth |
| files | GET/POST files-capability, setup-files-sudo |
JWT |
| health | POST /check |
JWT |
Closure 表
| H | 文件:行号 | 判定 | 理由 |
|---|---|---|---|
| H-Auth | servers.py:26×路由 | SAFE | 26 端点均 get_current_admin |
| H-Mask | servers.py:1692-1698 | SAFE | password_set / agent key 前缀截断 |
| H-Encrypt | servers.py:1096-1099,559-562 | SAFE | Fernet encrypt 入库 |
| H-Allowlist | servers.py:1163-1187 | SAFE | UPDATE 字段白名单;agent_api_key 排除 |
| H-Reauth | servers.py:1256-1260,1479-1483 | SAFE | agent-key/install-cmd 需当前密码 |
| H-Reveal | servers.py:1492-1502 | SAFE | install-cmd 不用全局 API_KEY |
| H-AgentKey | servers.py:1282-1288 | SAFE | 生成后 display_once 响应 |
| H-Fallback | servers.py:626,1321 | RISK | batch/single install 可回退 settings.API_KEY |
| H-Shell | servers.py:631-633,1330-1332 | SAFE | install shlex.quote url/key/port |
| H-Sudo | servers.py:36-60 | RISK | 临时 sudoers 白名单;运维必要 |
| H-SudoPwd | servers.py:1025-1027 | SAFE | sudo -S 密码走 stdin 非 argv |
| H-CSV | servers.py:376-388,445-446 | SAFE | formula injection 防御 + 1MB 上限 |
| H-CSV | servers.py:499-501 | SAFE | MAX_IMPORT_ROWS=500 |
| H-Batch | servers.py:615,686,772,850 | SAFE | Semaphore(5) 并发上限 |
| H-Redis | servers.py:179-201,873-877 | SAFE | 心跳 overlay;失败 log warning |
| H-Audit | servers.py: CUD/batch | SAFE | 写操作 AuditLog |
| H-Crypto | crypto.py:20-26 | SAFE | 无 ENCRYPTION_KEY 则 RuntimeError |
| H-Crypto | crypto.py:52-54 | SAFE | decrypt 失败 raise,非静默 |
| H-Capability | files_capability.py:31-39 | SAFE | 只读 probe,无密码回传 |
| H-Elevation | files_elevation.py:48-55 | SAFE | apply_files_elevation_payload |
len(H)=20, Closure=20
FINDING
无 P0/P1 新 FINDING。
DoD
- servers.py 1742 行全文 Read(补 D3 分段)
- len(H) == Closure
- local_verify 通过
验证
bash scripts/local_verify.sh — 全绿