Files
Nexus/docs/release/20260708/Nexus-SSH命令执行安全巡检阶段1-20260707.md
T
r 9b583ccc91
Nexus CI/CD / test (push) Waiting to run
Nexus CI/CD / e2e (push) Blocked by required conditions
Nexus CI/CD / deploy (push) Blocked by required conditions
Nexus Pre-commit Checks / quick-check (push) Waiting to run
docs(release): 主与 release 分支合并功能清单 + 导入 release 文档目录
便于 Gitea 上 main ↔ release/20260708-axs 合并评审与冲突对照。
2026-07-09 01:14:32 +08:00

4.9 KiB
Raw Blame History

Nexus SSH/文件管理安全巡检阶段 12026-07-07

1. 巡检口径调整

用户已明确:script_service 是“管理员远程执行命令”功能,天然允许管理员执行任意 shell;这是产品设计内能力,不作为本轮漏洞修复项。

后续对它只保留三类审查:

  • 鉴权:必须只能由已登录管理员调用。
  • 审计:执行人、目标服务器、执行时间、结果摘要要可追踪。
  • 敏感信息:不要把密码、Token、密钥等完整写入日志或返回给不该看到的人。

本轮实际修复的是“非脚本服务、非预期的命令参数边界”。


2. 当前测试机状态

  • 测试机:192.168.124.219
  • 项目目录:/opt/nexus-dev-current
  • Git 分支:audit/security-review
  • 当前最新提交:bcec78f fix: harden file manager shell operations
  • Nexus 容器:0.0.0.0:18600 -> 8600,健康检查返回 ok
  • MySQL0.0.0.0:13306 -> 3306
  • Redis0.0.0.0:16379 -> 6379

最近提交:

bcec78f fix: harden file manager shell operations
112e617 fix: stop archive option injection via filenames
99edd30 chore: default compose ports for nexus test deploy
a538358 fix: keep bt panel sessions alive after one-click login
9d42fcd chore: baseline Nexus LAN test deployment snapshot

3. 已完成修复 A:远程压缩命令参数终止符

提交:112e617 fix: stop archive option injection via filenames

修改文件:

  • server/infrastructure/ssh/remote_archive.py
  • tests/test_remote_archive_commands.py

修复点:

  • tar 压缩命令增加 --,避免成员名以 - 开头时被当作 tar 参数。
  • zip 压缩命令增加 --,避免目标名或成员名以 - 开头时被当作 zip 参数。

运行容器已热更新确认包含:

tar -czf ... -C ... -- ...
zip -qr -- ...

4. 已完成修复 B:文件管理命令参数终止符

提交:bcec78f fix: harden file manager shell operations

修改文件:

  • server/api/sync_v2.py

加固命令:

rm -rf -- <path>
mv -- <src> <dest>
mkdir -p -- <path>
cp -r -- <sources> <dest>
mv -t <dest> -- <sources>

说明:

  • 这些路径本身已经经过 normalize_remote_abs_path()shlex.quote()
  • 本次增加 -- 是第二道防线,防止未来路径来源变化或边界输入导致工具把路径误判为命令选项。
  • 这不是限制管理员能力;管理员确实要执行任意命令时仍应通过设计内的 script_service

5. 已完成修复 C:递归 chmod/chown 系统目录子树保护

提交:bcec78f fix: harden file manager shell operations

修改文件:

  • server/utils/files_chmod_policy.py
  • tests/test_file_permissions.py

修复前:

  • 只禁止对精确系统路径递归改权限,例如 /etc/usr/
  • /etc/nginx/usr/local 这类系统目录子树仍可能被文件管理 UI 执行递归 chmod/chown。

修复后:

  • 继续禁止精确系统路径。
  • 新增禁止关键系统目录子树:
    • /bin/
    • /boot/
    • /dev/
    • /etc/
    • /lib/
    • /lib64/
    • /proc/
    • /run/
    • /sbin/
    • /sys/
    • /usr/
    • /var/cache/
    • /var/lib/
    • /var/log/
    • /var/run/
    • /var/spool/
  • 保留常见 Web 目录可操作:
    • /www/wwwroot/site
    • /var/www/html

设计原因:

  • 文件管理 UI 的 chmod/chown 是“安全操作封装”,应防止误点造成系统不可用。
  • 真正需要改系统目录权限的管理员,仍可使用设计内的 script_service 明确执行命令。

6. 验证结果

已运行测试:

pytest tests/test_file_permissions.py tests/test_schema_path_validators.py tests/test_remote_archive_commands.py -q
22 passed in 0.54s

完整后端测试:

pytest -q
733 passed, 1 skipped in 11.77s

格式检查:

git diff --check
无输出,表示无 whitespace 错误。

运行容器热更新:

  • 已把以下文件复制进 nexus-nexus-1 容器:
    • server/infrastructure/ssh/remote_archive.py
    • server/api/sync_v2.py
    • server/utils/files_chmod_policy.py
  • 已重启 Nexus 容器。
  • 健康检查返回 ok

7. 下一步继续巡检建议

下一阶段建议按以下顺序继续:

  1. server/api/sync_v2.py 解压链路:检查 tar/zip 解压是否需要增加归档成员路径校验,防 zip-slip/tar traversal。
  2. server/application/services/server_file_transfer_service.py:检查跨服务器打包/投递的路径校验、临时目录清理、权限回退。
  3. server/infrastructure/ssh/remote_shell.pyasyncssh_pool.py:复核 timeout、sudo fallback、stderr/stdout 截断和敏感信息处理。
  4. server/infrastructure/btpanel/ssh_bootstrap.pyssh_login.py:复核宝塔 token、白名单、session patch 输出中是否有敏感信息泄漏。
  5. server/api/servers.py:复核 agent 安装/升级命令拼接、参数来源、失败回滚边界。