4.9 KiB
4.9 KiB
Nexus SSH/文件管理安全巡检阶段 1(2026-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 - MySQL:
0.0.0.0:13306 -> 3306 - Redis:
0.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.pytests/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.pytests/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.pyserver/api/sync_v2.pyserver/utils/files_chmod_policy.py
- 已重启 Nexus 容器。
- 健康检查返回
ok。
7. 下一步继续巡检建议
下一阶段建议按以下顺序继续:
server/api/sync_v2.py解压链路:检查 tar/zip 解压是否需要增加归档成员路径校验,防 zip-slip/tar traversal。server/application/services/server_file_transfer_service.py:检查跨服务器打包/投递的路径校验、临时目录清理、权限回退。server/infrastructure/ssh/remote_shell.py、asyncssh_pool.py:复核 timeout、sudo fallback、stderr/stdout 截断和敏感信息处理。server/infrastructure/btpanel/ssh_bootstrap.py、ssh_login.py:复核宝塔 token、白名单、session patch 输出中是否有敏感信息泄漏。server/api/servers.py:复核 agent 安装/升级命令拼接、参数来源、失败回滚边界。