# 审计 — 文件管理上传后自动 www 权限

## 范围（文件清单）

| 文件 | 变更 |
|------|------|
| `server/utils/files_upload_permissions.py` | 解析 RSYNC_PUSH 配置，SSH chown/chmod |
| `server/api/sync_v2.py` | `_sftp_upload_one` 上传后 fixup + 响应/审计 |
| `frontend/src/composables/files/useFilesActions.ts` | 权限修正失败 warning |
| `tests/test_files_upload_permissions.py` | 解析与 apply 单测 |

## Step 3 规则扫描

| H | 规则 | 结论 |
|---|------|------|
| H1 | 复用推送权限配置，不硬编码 | PASS — `RSYNC_PUSH_CHOWN/CHMOD` |
| H2 | 上传成功不因 fixup 失败回滚 | PASS — 仅返回 `permission_fixup.error` |
| H3 | 命令注入防护 | PASS — `_RSYNC_*_RE` + `shlex.quote` |
| H4 | CUD 审计 | PASS — audit_detail 含 chown/chmod |

## Closure

| H | 判定 | 依据 |
|---|------|------|
| H1 | PASS | `upload_permission_plan()` |
| H2 | PASS | sync_v2 不 raise on fixup fail |
| H3 | PASS | sync_engine_v2 校验 + quote |
| H4 | PASS | `_audit_sync("file_upload", ...)` |

## DoD

- [x] pytest `test_files_upload_permissions.py` 7 passed
- [x] changelog `2026-06-11-files-upload-www-permissions.md`

## 验证

文件页上传 → 远端 `ls -la` 为 `www www`；sudo 白名单不足时界面 warning、文件仍保留。
