已关闭
[Risk|风险提示]: cleanup.sh 执行 rm -rf $(pwd) 无路径校验无安全提示,误执行将递归删除当前目录全部内容(L4) #416
dihidao创建于  9月12日关闭于  9月30日
dihidao
dihidao
9月12日 创建

场景:用户/运维使用 opbase 仓库自带的 scripts/package/opbase/scripts/cleanup.sh 清理安装产物。

问题(master 2026-09-12 核实):该脚本有效内容仅两行:
set -e
rm -rf $(pwd)
无条件递归删除"当前工作目录"下的全部内容:无目标路径合法性校验(不校验是否为预期安装目录)、无二次确认交互、无任何风险提示或警示注释。

影响范围及方式:属于"对重要数据存在特别风险的操作且缺少安全提示"。脚本若被复制使用或在错误目录(家目录、/、共享存储挂载点)执行,将不可恢复地删除该目录下所有数据。

问题复现方式:在任意非安装目录执行 bash cleanup.sh,即递归删除当前目录全部内容(请仅在测试环境验证)。

修复建议:1) 增加目标路径校验(如限定必须位于安装根目录、目录名匹配预期模式);2) 执行前打印待删除路径并要求交互确认;3) 至少在脚本头部加入显著警示。已检索本仓 403 条历史 issues,未见报告。场景:用户/运维使用 opbase 仓库自带的 scripts/package/opbase/scripts/cleanup.sh 清理安装产物。

问题(master 2026-09-12 核实):该脚本有效内容仅两行:

set -e
rm -rf $(pwd)

无条件递归删除"当前工作目录"下的全部内容:无目标路径合法性校验(不校验是否为预期安装目录)、无二次确认交互、无任何风险提示或警示注释。

影响范围及方式:属于"对重要数据存在特别风险的操作且缺少安全提示"。脚本若被复制使用或在错误目录(家目录、/、共享存储挂载点)执行,将不可恢复地删除该目录下所有数据。

问题复现方式:在任意非安装目录执行 bash cleanup.sh,即递归删除当前目录全部内容(请仅在测试环境验证)。

修复建议:1) 增加目标路径校验(如限定必须位于安装根目录、目录名匹配预期模式);2) 执行前打印待删除路径并要求交互确认;3) 至少在脚本头部加入显著警示。已检索本仓 403 条历史 issues,未见报告。

likedislike
songkai111成员
9月14日 评论:

该脚本确实是要删除,当前工作目录下的所有内容。

likedislike
songkai111成员
9月29日 评论:

感谢反馈。经核实,cleanup.sh 不做修改,说明如下:

该脚本并非供用户直接执行的通用清理脚本,其唯一调用方是 makeself 自解包 run 包的 --cleanup 机制:

  1. 打包阶段,CPack makeself 生成器将该脚本注册为 run 包的 cleanup 脚本(嵌入在 .run 头部 cleanup_script="share/info/opbase/script/cleanup.sh");
  2. 用户执行 .run 包(安装/升级/卸载)时,makeself 先将载荷解压到临时 staging 目录(如 $HOME/selfgzXXXX),执行完安装逻辑后,由 MS_exec_cleanup() 先 cd 到 staging 目录再调用该脚本,rm -rf $(pwd) 清理的正是本次解压产生的临时目录;
  3. 即脚本执行时的工作目录由上层 makeself 严格控制,只会是 makeself 创建的 staging 目录,不存在在用户家目录、/ 或其他业务目录执行的场景;
  4. 收尾兜底:即使 cleanup 脚本未执行,makeself 自身也会 rm -rf staging 目录。

若为其增加目标路径校验/交互确认,反而会在每次安装/升级/卸载收尾阶段引入交互(自动化安装场景下存在阻塞风险),影响正常安装流程。

综上,脚本行为符合设计预期,上层调用机制可保证不会误删错误路径,暂不修改。

likedislike
陈思
陈思
9月30日 评论:

/assign @songkai111

likedislike
CANN-robotCANN-robot成员
9月30日 将 songkai111 设为负责人
CANN-robotCANN-robot成员
9月30日 关闭了 issue
CANN-robotCANN-robot成员
9月30日 添加了label:resolved