41 lines
1.5 KiB
Markdown
41 lines
1.5 KiB
Markdown
|
|
# 跨服务器传输:传输后 www 权限
|
|||
|
|
|
|||
|
|
**日期**:2026-06-21
|
|||
|
|
|
|||
|
|
## 摘要
|
|||
|
|
|
|||
|
|
跨服务器直传(relay)与打包投递(deliver/pull)完成后,在目标机上自动执行 `chown -R www:www` 及 `NEXUS_RSYNC_PUSH_CHMOD` 对应 chmod,与 rsync 推送、文件上传后权限策略一致。
|
|||
|
|
|
|||
|
|
## 动机
|
|||
|
|
|
|||
|
|
用户要求「传输过去的文件都要是 www 权限」;此前 SFTP 中继与 curl 解压只写文件,不调整属主,导致宝塔站点无法读文件。
|
|||
|
|
|
|||
|
|
## 涉及文件
|
|||
|
|
|
|||
|
|
| 路径 | 说明 |
|
|||
|
|
|------|------|
|
|||
|
|
| `server/utils/files_upload_permissions.py` | 新增 `apply_transfer_permissions`、`parse_upload_dir_mode` |
|
|||
|
|
| `server/application/services/server_file_transfer_service.py` | relay / pull 完成后调用权限修复 |
|
|||
|
|
| `tests/test_files_upload_permissions.py` | 递归 chown/chmod 单测 |
|
|||
|
|
| `tests/test_server_file_transfer.py` | relay mock `_apply_dest_permissions` |
|
|||
|
|
| `deploy/rsync-local-to-server.sh` | 中心机无 `www` 用户时自动用部署目录属主 |
|
|||
|
|
| `deploy/deploy-production.sh` | 同上,前端 tar 解压 chown |
|
|||
|
|
|
|||
|
|
## 配置
|
|||
|
|
|
|||
|
|
- `NEXUS_RSYNC_PUSH_CHOWN`(默认 `www:www`)
|
|||
|
|
- `NEXUS_RSYNC_PUSH_CHMOD`(默认 `D755,F755`)
|
|||
|
|
- 中心机部署属主:`NEXUS_DEPLOY_CHOWN` 可覆盖;未设置且无 `www` 用户时用 `stat` 检测
|
|||
|
|
|
|||
|
|
## 验证
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pytest tests/test_files_upload_permissions.py tests/test_server_file_transfer.py -q
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
生产传输页直传/投递后,目标路径 `ls -la` 应为 `www:www`。
|
|||
|
|
|
|||
|
|
## 回滚
|
|||
|
|
|
|||
|
|
还原上述 Python 文件并重启 API;部署脚本属主检测为向后兼容,可保留。
|