已关闭
[Risk|风险提示]: cleanup.sh 执行 rm -rf $(pwd) 无路径校验无安全提示,误执行将递归删除当前目录全部内容(L4) #416
dihidao创建于 9月12日关闭于 9月30日
songkai111
9月14日 评论:
9月14日 评论:
该脚本确实是要删除,当前工作目录下的所有内容。


songkai111
9月29日 评论:
9月29日 评论:
感谢反馈。经核实,cleanup.sh 不做修改,说明如下:
该脚本并非供用户直接执行的通用清理脚本,其唯一调用方是 makeself 自解包 run 包的 --cleanup 机制:
- 打包阶段,CPack makeself 生成器将该脚本注册为 run 包的 cleanup 脚本(嵌入在 .run 头部
cleanup_script="share/info/opbase/script/cleanup.sh"); - 用户执行 .run 包(安装/升级/卸载)时,makeself 先将载荷解压到临时 staging 目录(如
$HOME/selfgzXXXX),执行完安装逻辑后,由MS_exec_cleanup()先cd到 staging 目录再调用该脚本,rm -rf $(pwd)清理的正是本次解压产生的临时目录; - 即脚本执行时的工作目录由上层 makeself 严格控制,只会是 makeself 创建的 staging 目录,不存在在用户家目录、
/或其他业务目录执行的场景; - 收尾兜底:即使 cleanup 脚本未执行,makeself 自身也会
rm -rfstaging 目录。
若为其增加目标路径校验/交互确认,反而会在每次安装/升级/卸载收尾阶段引入交互(自动化安装场景下存在阻塞风险),影响正常安装流程。
综上,脚本行为符合设计预期,上层调用机制可保证不会误删错误路径,暂不修改。


陈思
9月30日 评论:
9月30日 评论:
/assign @songkai111


9月30日 将 songkai111 设为负责人
9月30日 关闭了 issue
9月30日 添加了label:resolved
场景:用户/运维使用 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,未见报告。