Files
Nexus/docs/audit/2026-06-01-posix-path-batch-review.md
T

5.7 KiB
Raw Blame History

POSIX 路径分批审查记录

内容
日期 2026-06-01
方法 按模块分批 rg os.path / rg posix / 人工读 SSH 拼接点
SSOT server/utils/posix_paths.py
总览 posix-path-full-audit.md

批次 1:基础设施层

文件 结论 证据
server/utils/posix_paths.py 通过 唯一允许 os.path.realpath(本机 FS
server/api/remote_path_validation.py 通过 委托 posix_paths
server/infrastructure/ssh/asyncssh_pool.py 已修 posix_dirname(remote_path)
server/infrastructure/ssh/remote_archive.py 通过 全程 posixpath
server/infrastructure/ssh/remote_probe.py 无路径拼接
server/infrastructure/ssh/__init__.py 无业务路径

批次 1 结论:无遗留问题。


批次 2server/api/sync_v2.py(文件/同步 API

端点/区域 结论
browse / file-ops / clipboard normalize_remote_abs_path
browse-local / local-file-ops / preview ensure_under_nexus_upload + posix_joinos.path.* 仅本机 I/O
validate-source-path resolve_nexus_host_path + walk 用 posix_join
diagnose / file-diff / verify normalize_remote_dest + remote_join
upload / upload-zip remote_join + assert_zip_member_safe
download / read / write / chmod / compress / decompress 远程 path 均规范化

仍见 os.pathisdir/exists/getsize/walkNexus 主机文件系统)— 合法

批次 2 结论:无遗留问题。


批次 3:应用服务层

文件 结论 说明
sync_engine_v2.py 已修 _rsync_pushnormalize_remote_abs_path(to_posix(target_path)) + user@host:path
⚠️ 注意 os.path.isdir(source_path) — Nexus 本机源目录,生产为 Linux
sync_service.py 无路径逻辑 注释/委托 v2
script_service.py 通过 远程日志路径固定 /var/log/nexus-job/ + shlex.quote
script_jobs.py 无文件路径 shell 转义 only
server_service.py 无 SSH 路径拼接

批次 3 结论:无遗留问题。


批次 4:其他 API + 后台任务

文件 结论
servers.py workerman posix_dirnameAgent install_dir="/opt/nexus-agent" 常量拼接
agent.py / webssh.py / terminal.py 无远程文件路径 join
install.py 豁免
settings.py / auth_jwt.py / main.py 豁免
schemas.py ⚠️ 建议
background/schedule_runner.py 可接受
background/retry_runner.py 透传 DB 字段,同上

批次 4 结论:无 P0/P1;1 项 P2 建议。


批次 5:领域 / 数据库 / Redis

范围 结论
server/domain/** ORM 字段存字符串,不做 path join
server/infrastructure/database/** 无路径拼接
server/infrastructure/redis/** 无文件路径

批次 5 结论:无问题。


批次 6:前端

文件 结论
utils/remotePath.ts / 拼接;\/
FilesPage.vue / FileDirectoryTree.vue / filePreload.ts / useFilesClipboard.ts joinRemotePath / normalizeRemotePath
PushPage.vue / SchedulesPage.vue 路径交 API,由后端规范化
TerminalPage.vue

批次 6 结论:无遗留问题。


批次 7:测试 / 工具 / MCP

文件 结论
tests/test_posix_paths.py
tests/test_remote_path_validation.py
tests/test_api.py 本地 .env 定位
mcp/Nexus_server.py 部署目录 DEPLOY_DIR
deploy/gate_log.py
docs/build_html.py / audit_scan.py 仓库内扫描

批次 7 结论:无问题。


汇总

批次 范围 状态
1 SSH 基础设施 完成
2 sync_v2 API 完成
3 application services 完成
4 其他 API + background 完成(P2×1
5 domain / DB 完成
6 frontend 完成
7 tests / tooling 完成

P0/P10
P22026-06-01 已完成):

  1. schemas.py + schema_path_validators.py:远程/本机路径字段入口校验与规范化
  2. sync_engine_v2source_pathisdir_nexus_source_path()to_posix

回归命令

pytest tests/test_posix_paths.py tests/test_remote_path_validation.py -q
rg "os\.path\.(join|dirname|basename)" server/ --glob "*.py"
# 期望:仅 posix_paths 注释 + sync_v2/sync_engine 的 isdir/exists/getsize

DoD(分批审查)

  • 批次 17 均已执行并记录
  • 每批有明确通过/豁免/建议
  • P0/P1 为 0
  • P2 已实施(schemas + sync_engine

批次 9:文件管理归属 + 权限 UI2026-06-01

状态
remote_shell.py
browse owner/group/mode_octal
chmod + chown + sudo 回退
前端归属列 + FilePermissionDialog
files-capability API 批次 10
files_elevation 服务器字段 批次 10
Phase 5ls 解析单测 + long-iso + read-file 提权 批次 11
二期:递归 chmod + 不可读提示条 批次 12