RHEL8环境Dockerfile执行升级脚本时curl | bash的替代方案有哪些
Dockerfile(RHEL 8环境)下替代
curl | bash升级指定软件包的安全方案 curl | bash模式存在极高安全风险,2021年发生的Codecov Bash Uploader被植入后门事件中,攻击者就是通过篡改公开的bash脚本,窃取了大量CI环境的敏感信息。针对RHEL 8系统,可采用以下更安全的替代方案:
- 配置官方可信YUM源安装
优先选择软件官方提供的RHEL/CentOS 8 yum源,导入官方GPG公钥后直接指定版本安装,是最稳定安全的方案,支持后续版本管理和校验。
# 导入软件官方GPG公钥 RUN rpm --import https://<官方公钥地址> && \ # 新增官方yum源配置 yum-config-manager --add-repo https://<官方yum源地址> && \ # 安装指定版本软件包,自动校验包签名 yum install -y <package-name>-<version-number> && \ yum clean all
- 下载RPM包校验后本地安装
如果软件没有提供yum源,可提前获取官方RPM包的哈希校验值,下载后先校验再安装,避免包被篡改。
RUN curl -sL https://<官方rpm包地址> -o /tmp/<package>.rpm && \ # 校验RPM包哈希,和官方公布的sha256值对比 echo "<官方公布的sha256值> /tmp/<package>.rpm" | sha256sum --check --status && \ yum localinstall -y /tmp/<package>.rpm && \ rm -f /tmp/<package>.rpm && \ yum clean all
- 本地预校验脚本/包后纳入构建上下文
如果必须使用安装脚本,可提前将脚本下载到本地,校验内容无风险后放到Docker构建目录,直接复制到镜像内执行,完全避免拉取远程不可信内容。
# 提前将本地校验过的安装脚本复制到镜像内 COPY ./install-<package>.sh /tmp/ RUN chmod +x /tmp/install-<package>.sh && \ bash /tmp/install-<package>.sh && \ rm -f /tmp/install-<package>.sh && \ # 后续执行卸载旧包、安装新包逻辑 yum remove -y <old-package> && \ yum install -y <package>-<version> && \ yum clean all
- 远程脚本强制哈希校验后执行
如果必须拉取远程脚本,不要直接管道给bash执行,先下载脚本校验哈希和官方公布值一致后再运行。
RUN curl -sL <script-url> -o /tmp/install.sh && \ # 校验脚本哈希,验证通过再执行 echo "<官方公布的脚本sha256值> /tmp/install.sh" | sha256sum --check --status && \ bash /tmp/install.sh && \ rm -f /tmp/install.sh && \ yum remove -y <package> && \ yum install -y <package> && \ yum clean all
安全注意事项
- 所有RPM包、脚本都必须校验官方公布的GPG签名或哈希值,禁止执行无校验的远程内容
- 安装完成后及时清理yum缓存、临时安装文件,减少镜像体积同时避免遗留敏感信息
- 不要用root权限执行不必要的安装步骤,最小化权限降低攻击面
内容的提问来源于stack exchange,提问作者I.conic
相关产品推荐
相关产品推荐

