尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CentOS 7.9 离线YUM镜像源构建实战:支持Zabbix、Certbot与ICU

CentOS 7.9 离线YUM镜像源构建实战:支持Zabbix、Certbot与ICU 简介本资源为CentOS 7.9全量离线YUM镜像源专为企业级离线环境系统部署、安全加固与批量运维人员设计解决无网络场景下操作系统安装、软件包安装及安全补丁更新等核心需求。压缩包共150个文件含143个x86_64架构RPM二进制包覆盖内核kernel-ml-5.8、Ansible 2.9、Ceph 12.2等关键组件3个.bz2与3个.gz格式的repodata元数据文件用于生成YUM仓库索引以及1个XML清单文件总大小155.55MB结构完整开箱即配本地repo。目前已有1855人学习下载资源已通过SHA256校验预览中可见多个哈希值包含primary/filelists/other三类SQLite与XML双格式元数据兼顾兼容性与解析效率目录组织符合标准CentOS仓库规范支持--enablerepo精准调用可直接用于生产环境离线仓库搭建与长期维护。1. 为什么 CentOS 7.9 离线镜像源不是“下个 ISO 就完事”——它决定你能否在无网机房装上 Zabbix、Certbot 和 ICU你在 IDC 机房部署一套监控系统物理服务器完全断网或者客户环境审计要求所有软件包必须经内部安全扫描后才能安装又或者你正为一台刚上架的国产化信创服务器准备基础环境网络策略只允许单向导出、禁止任何外联。这时你会发现yum install zabbix-server-pgsql报错Cannot find a valid baseurl for repo: basecertbot --version提示No module named acme甚至localedef -i zh_CN -f UTF-8 zh_CN.UTF-8因缺glibc-common依赖而失败——根本原因不是命令写错了而是你手头那张 CentOS 7.9 官方 ISO 里压根没打包 Zabbix 5.x、Certbot 2.x、ICU 69 这些现代运维刚需组件。CentOS 7.9 的官方 ISO2021 年 11 月发布冻结于 EPEL 7.13、Zabbix 官方仓库尚未适配、Certbot 还卡在 0.31 版本。真正的离线镜像源不是把 ISO 挂载当仓库用而是要按需重建一个包含 base、updates、epel、zabbix、certbot、icu 等全部目标软件包及其完整依赖树的本地 yum 仓库且必须确保所有 RPM 包的 GPG 签名可验证、repodata 元数据结构完整、HTTP/FTP/NFS 服务能被目标机器稳定访问。本文讲的就是怎么从零构建这样一个“能落地、能验证、能交付”的 CentOS 7.9 离线镜像源——不依赖互联网、不绕过安全策略、不手动凑包、不靠玄学试错。2. 构建离线镜像源的三步闭环同步 → 重组 → 发布离线镜像源不是简单下载一堆 RPM 文件扔进目录就完事。它本质是一个可被 yum/dnf 正确解析的元数据驱动型软件仓库必须满足三个硬性条件① 所有 RPM 包版本与依赖关系严格匹配当前 CentOS 7.9 的 glibc、kernel-headers、python2 等基础栈② repodata 目录下primary.xml.gz、filelists.xml.gz、other.xml.gz三类索引文件由createrepo生成且校验通过③ 仓库根路径下存在repomd.xml并指向最新索引哈希否则客户端会报failure: repodata/repomd.xml from xxx: [Errno 256] No more mirrors to try.。下面分三步实操每步都带可验证命令和参数说明。2.1 用 reposync 同步指定仓库到本地磁盘含 EPEL、Zabbix、Certbotreposync是yum-utils提供的官方同步工具比wget -r或rsync更可靠因为它会自动解析repomd.xml中的包列表、跳过已存在文件、校验 checksum并支持-p参数保留原始路径结构这对后续 createrepo 构建至关重要。注意同步必须在一台能联网的 CentOS 7.9 机器上进行且需提前配置好对应仓库的.repo文件。# 安装必要工具确保 epel-release 已启用 yum install -y yum-utils createrepo yum-plugin-priorities # 创建同步根目录 mkdir -p /mnt/offline-mirror/{base,updates,epel,zabbix,certbot,icu} # 同步 base 和 updates使用官方 vault 镜像因 7.9 已 EOL原生 mirrorlist 失效 reposync -g -p /mnt/offline-mirror/base --repobase --download-metadata reposync -g -p /mnt/offline-mirror/updates --repoupdates --download-metadata # 同步 EPEL必须指定 epel-release 版本7.9 对应 epel-release-7-11 yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm reposync -g -p /mnt/offline-mirror/epel --repoepel --download-metadata # 同步 Zabbix 官方仓库重点必须用 zabbix-release-7-4否则包名冲突 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm reposync -g -p /mnt/offline-mirror/zabbix --repozabbix --download-metadata reposync -g -p /mnt/offline-mirror/zabbix-nonfree --repozabbix-nonfree --download-metadata # 同步 Certbot关键不能用 EPEL 的 certbot-0.31必须用 certbot/certbot GitHub 发布的 latest-rpm # 先下载 certbot 官方 RPM 包索引页https://github.com/certbot/certbot/releases/tag/v2.10.0 # 手动提取所有 *.rpm 下载链接存为 certbot-rpms.txt再用 wget 批量下载 mkdir -p /mnt/offline-mirror/certbot cd /mnt/offline-mirror/certbot wget -i certbot-rpms.txt # 同步 ICUCentOS 7.9 默认 icu-50.1.2但 Zabbix 5.0 要求 icu 57.1 # 从 CentOS Stream 8 的 compat-icu57 包反向提取因 7.9 无官方更新或编译源码 # 此处采用更稳妥方案从 fedora-misc 仓库获取预编译包经安全扫描 wget https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Everything/x86_64/os/Packages/i/icu-57.1-7.fc30.x86_64.rpm wget https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Everything/x86_64/os/Packages/i/icu-devel-57.1-7.fc30.x86_64.rpm逻辑说明reposync -g表示同步 GPG key用于后续签名验证-p指定输出路径并保持仓库层级--download-metadata强制下载repodata原始文件避免 createrepo 重新生成时丢失原始时间戳。同步完成后每个子目录下应有repodata/和Packages/两个目录Packages/内是 RPM 文件repodata/内是原始索引。2.2 用 createrepo_c 重组元数据解决 repodata 冲突与依赖闭环createrepoPython 2 版在处理多仓库合并时容易因repomd.xml时间戳冲突导致客户端解析失败createrepo_cC 语言重写版性能更高、兼容性更好且支持--update增量更新和--checksum sha256强制校验。更重要的是必须将所有仓库的 RPM 包合并到一个统一目录下再统一生成 repodata否则 yum 无法跨仓库解析依赖例如 zabbix-server 依赖的libcurl可能在 base而python3-pip在 epel分开存放会导致yum install zabbix-server报 missing dependency。# 创建统一仓库目录 mkdir -p /mnt/offline-mirror/combined/Packages # 将所有 Packages 目录下的 RPM 拷贝到 combined/Packages去重 find /mnt/offline-mirror/{base,updates,epel,zabbix,zabbix-nonfree,certbot,icu} -name *.rpm -exec cp -n {} /mnt/offline-mirror/combined/Packages/ \; # 删除重复包同名不同版本保留最新用 rpmdev-vercmp 判断 # 先安装 rpmdevtools yum install -y rpmdevtools # 编写去重脚本 dedupe-rpms.sh内容见下方 chmod x dedupe-rpms.sh ./dedupe-rpms.sh /mnt/offline-mirror/combined/Packages # 生成完整 repodata关键参数说明 createrepo_c \ --workers 4 \ # 并行线程数加速生成 --checksum sha256 \ # 强制使用 SHA256 校验RHEL/CentOS 7.9 默认 --database \ # 生成 sqlite 数据库提升 yum search 速度 --simple-md-format \ # 简化元数据格式兼容旧版 yum --retain-old-md 3 \ # 保留最近 3 版 repomd.xml便于回滚 /mnt/offline-mirror/combineddedupe-rpms.sh脚本内容#!/bin/bash # 参数RPM 目录路径 RPM_DIR$1 cd $RPM_DIR # 提取所有 RPM 包名不含扩展名和版本信息 for rpm in *.rpm; do if [ -f $rpm ]; then name$(rpm -qp --queryformat %{NAME} $rpm 2/dev/null) ver$(rpm -qp --queryformat %{VERSION}-%{RELEASE} $rpm 2/dev/null) arch$(rpm -qp --queryformat %{ARCH} $rpm 2/dev/null) echo $name.$arch $ver $rpm fi done | sort -k1,1 -k2,2V | awk !seen[$1] {print $3} | xargs -I {} sh -c rm -f $(dirname {})/$(basename {} | sed s/\.rpm$//).*.rpm; mv {} $(dirname {})/参数说明--database生成repodata/primary.sqlite.bz2使yum search响应从秒级降至毫秒级--simple-md-format禁用prestodelta等新特性确保 CentOS 7.9 的 yum 4.2.17 能正确读取--retain-old-md 3在repodata/下保留repomd.xml.*历史版本避免因网络中断导致元数据损坏时无法恢复。执行后/mnt/offline-mirror/combined/repodata/下应有repomd.xml、primary.xml.gz、filelists.xml.gz、other.xml.gz、primary.sqlite.bz2等文件且repomd.xml中data typeprimary的open-checksum字段值与primary.xml.gz文件实际 SHA256 一致可用sha256sum primary.xml.gz验证。2.3 用 nginx 发布为 HTTP 服务替代 vsftpd/rsync规避 SELinux 权限坑很多教程推荐用vsftpd或rsync暴露离线源但在生产环境极易翻车vsftpd 默认禁用 root 登录、SELinux 限制/var/ftp访问、FTP 协议被防火墙拦截rsync 无认证机制、无法做路径隔离。而nginx作为静态文件服务器启动快、配置简、SELinux 策略成熟且可通过location规则实现仓库路径隔离如/zabbix只映射combined/zabbix/子集还能加 basic auth 控制访问权限。# 安装并配置 nginx yum install -y nginx # 修改 /etc/nginx/conf.d/default.conf cat /etc/nginx/conf.d/mirror.conf EOF server { listen 80; server_name offline-mirror.local; # 禁止列目录强制走 repodata autoindex off; # 主仓库根路径 location / { root /mnt/offline-mirror; index index.html; # 添加 CORS 头兼容某些前端工具调用 add_header Access-Control-Allow-Origin *; } # 为不同仓库设置别名可选便于管理 location /base/ { alias /mnt/offline-mirror/combined/; autoindex off; } # 日志格式精简减少 I/O 压力 log_format minimal $remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent; access_log /var/log/nginx/mirror-access.log minimal; error_log /var/log/nginx/mirror-error.log warn; } EOF # 启动服务 systemctl enable nginx systemctl start nginx # 验证服务可用性本机 curl 测试 curl -I http://localhost/combined/repodata/repomd.xml # 应返回 HTTP/1.1 200 OK且 Content-Type: application/xml关键点root /mnt/offline-mirror表示 URL 根路径映射到该目录因此客户端配置baseurlhttp://your-mirror-ip/combined/即可alias指令用于路径重写如location /zabbix/alias /path/to/zabbix/表示访问/zabbix/实际读取/path/to/zabbix/目录。此设计避免了将所有包暴露在根路径下符合最小权限原则。3. 客户端配置与验证让目标机器真正“认出”这个离线源服务端建好了不代表客户端就能用。CentOS 7.9 的 yum 有两层校验①/etc/yum.repos.d/*.repo中baseurl必须可连通且返回有效repomd.xml②gpgcheck1时RPM 包的 GPG 签名必须能被/etc/pki/rpm-gpg/下对应公钥验证。若跳过第二步yum install会报GPG signature verification failed若baseurl路径错误则报Cannot retrieve metalink for repository。以下步骤确保 100% 可用。3.1 生成客户端 repo 文件并导入 GPG 密钥离线源的 repo 文件不能直接复制官方模板必须精确匹配服务端路径和密钥路径。同时EPEL、Zabbix、Certbot 各自使用不同 GPG 密钥需全部导入。# 在服务端生成标准 repo 文件供客户端拷贝 cat /mnt/offline-mirror/client-repos/centos-offline.repo EOF [base] nameCentOS-7.9 - Base Offline baseurlhttp://YOUR_MIRROR_IP/combined/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [epel] nameExtra Packages for Enterprise Linux 7 - Offline baseurlhttp://YOUR_MIRROR_IP/combined/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [zabbix] nameZabbix Official Repository - Offline baseurlhttp://YOUR_MIRROR_IP/combined/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [certbot] nameCertbot Official Repository - Offline baseurlhttp://YOUR_MIRROR_IP/combined/ gpgcheck1 enabled1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CERTBOT EOF # 导出所有必需 GPG 公钥到客户端可访问位置 mkdir -p /mnt/offline-mirror/gpg-keys cp /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 /mnt/offline-mirror/gpg-keys/ cp /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 /mnt/offline-mirror/gpg-keys/ # Zabbix 密钥需单独下载因不在系统默认路径 wget -O /mnt/offline-mirror/gpg-keys/RPM-GPG-KEY-ZABBIX-A14FE591 https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-A14FE591 # Certbot 密钥从 GitHub release 页面获取 wget -O /mnt/offline-mirror/gpg-keys/RPM-GPG-KEY-CERTBOT https://raw.githubusercontent.com/certbot/certbot/master/keys/certbot-release-signing-key.asc注意gpgkeyfile://路径必须与客户端/etc/pki/rpm-gpg/下实际存放路径一致。最佳实践是将所有公钥文件打包进一个gpg-keys.tar.gz随 repo 文件一起下发到客户端再执行rpm --import /path/to/key.asc导入。3.2 客户端一键部署脚本含 DNS/HTTP 连通性预检在目标离线机器上不能假设网络已通、DNS 已配、时间已同步。必须先做三项检查①ping YOUR_MIRROR_IP是否通②curl -I http://YOUR_MIRROR_IP/combined/repodata/repomd.xml是否返回 200③date输出是否与服务端误差 3 分钟否则 GPG 签名验证失败。以下脚本自动完成检查、密钥导入、repo 配置、缓存清理。#!/bin/bash # offline-client-setup.sh MIRROR_IP192.168.10.100 # 替换为你的镜像服务器 IP # 预检网络连通性 if ! ping -c 1 -W 2 $MIRROR_IP /dev/null; then echo ERROR: Cannot ping mirror server $MIRROR_IP exit 1 fi # 预检HTTP 服务可用性 if ! curl -s -I http://$MIRROR_IP/combined/repodata/repomd.xml | grep 200 OK /dev/null; then echo ERROR: HTTP service on $MIRROR_IP is not responding exit 1 fi # 预检时间同步误差 180 秒则警告 SERVER_TIME$(curl -s http://$MIRROR_IP/time.txt 2/dev/null || echo 0) CLIENT_TIME$(date %s) if [ $(($CLIENT_TIME - $SERVER_TIME)) -gt 180 ] || [ $(($SERVER_TIME - $CLIENT_TIME)) -gt 180 ]; then echo WARNING: Time skew 3 minutes. Run ntpdate $MIRROR_IP first. # exit 1 # 注释掉以允许继续但提示风险 fi # 导入 GPG 密钥假设密钥已通过 U 盘拷贝到 /tmp/gpg-keys/ rpm --import /tmp/gpg-keys/RPM-GPG-KEY-CentOS-7 rpm --import /tmp/gpg-keys/RPM-GPG-KEY-EPEL-7 rpm --import /tmp/gpg-keys/RPM-GPG-KEY-ZABBIX-A14FE591 rpm --import /tmp/gpg-keys/RPM-GPG-KEY-CERTBOT # 配置 repo 文件 cat /etc/yum.repos.d/centos-offline.repo EOF [base] nameCentOS-7.9 Offline Mirror baseurlhttp://$MIRROR_IP/combined/ enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [epel] nameEPEL Offline Mirror baseurlhttp://$MIRROR_IP/combined/ enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 [zabbix] nameZabbix Offline Mirror baseurlhttp://$MIRROR_IP/combined/ enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [certbot] nameCertbot Offline Mirror baseurlhttp://$MIRROR_IP/combined/ enabled1 gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CERTBOT EOF # 清理 yum 缓存并验证 yum clean all yum makecache yum repolist enabled | grep -E (base|epel|zabbix|certbot) || echo ERROR: Repos not loaded echo SUCCESS: Offline mirror configured. Try yum install zabbix-server-pgsql or certbot --version血泪经验yum makecache必须成功返回Metadata Cache Created否则后续安装必失败。若报Cannot retrieve repository metadata (repomd.xml) for repository90% 是baseurl路径末尾少了/如http://ip/combined错误应为http://ip/combined/因为 yum 会自动拼接repodata/repomd.xml少/就变成http://ip/combinedrepodata/repomd.xml。4. 避坑指南那些让你加班到凌晨的离线源典型故障离线镜像源构建过程中有五个高频翻车点每个都曾让我在客户现场反复重装三次以上。这里不讲原理只列现象、原因、解法一句废话没有。4.1 现象yum install zabbix-server-pgsql报Error: Package: zabbix-server-pgsql-5.0.35-1.el7.x86_64 requires: libevent-2.0.so.5()(64bit)但yum provides libevent-2.0.so.5返回空原因libevent包在 base 仓库中版本为libevent-2.0.21-4.el7其.so文件名是libevent-2.0.so.5.1.7而 Zabbix 5.0 编译时链接的是libevent-2.0.so.5无版本号后缀。CentOS 7.9 的ldconfig默认不创建无版本号软链接。解决在服务端combined/Packages/目录下找到libevent-2.0.21-4.el7.x86_64.rpm解压并手动创建软链接rpm2cpio libevent-2.0.21-4.el7.x86_64.rpm | cpio -idmv ln -sf libevent-2.0.so.5.1.7 usr/lib64/libevent-2.0.so.5 # 重新打包 RPM用 fpm 工具或直接替换原 RPM风险高推荐前者 fpm -s dir -t rpm -n libevent -v 2.0.21-4.el7 --iteration 2.el7 --prefix /usr --category libs \ --description libevent with .so.5 symlink \ usr/lib64/libevent-2.0.so.5.1.7 usr/lib64/libevent-2.0.so.54.2 现象createrepo_c执行后repomd.xml中primary.xml.gz的open-checksum与文件实际 SHA256 不一致原因createrepo_c默认使用sha256但某些老版本 0.16.1存在 checksum 计算 bug或repodata/目录下残留旧文件未清理。解决升级createrepo_c到最新版yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum update createrepo_c并在运行前彻底清空repodata/rm -rf /mnt/offline-mirror/combined/repodata createrepo_c --checksum sha256 --database /mnt/offline-mirror/combined4.3 现象客户端yum install certbot成功但运行certbot --version报ImportError: No module named acme原因Certbot 2.x 依赖acme、requests-toolbelt、pyopenssl等 Python 包这些不在 RPM 包内而是通过pip安装。离线环境下pip install会失败。解决在服务端预先下载所有 Python 依赖 wheel 包# 在能联网的机器上Python 2.7 环境 pip install --download /tmp/certbot-deps acme2.10.0 requests-toolbelt0.9.1 pyopenssl23.3.0 # 将 /tmp/certbot-deps/ 下所有 .whl 文件拷贝到 /mnt/offline-mirror/certbot/python-deps/ # 客户端安装时指定本地源pip install --find-links file:///mnt/certbot/python-deps --no-index acme4.4 现象nginx日志显示403 Forbidden但curl本地测试正常原因SELinux 策略阻止 nginx 读取/mnt/offline-mirror/目录默认 context 是system_u:object_r:mnt_t:s0而 nginx 需要httpd_sys_content_t。解决修改目录 SELinux 上下文semanage fcontext -a -t httpd_sys_content_t /mnt/offline-mirror(/.*)? restorecon -Rv /mnt/offline-mirror4.5 现象yum update提示No packages marked for update但已知kernel-3.10.0-1160.118.1.el7在镜像中存在原因updates仓库的repomd.xml中timestamp值早于base仓库导致 yum 认为updates无新包。解决强制更新updates的 timestamp# 修改 updates repodata 时间戳需在同步后、createrepo 前 touch -d $(date -d 2023-01-01 %Y-%m-%d %H:%M:%S) /mnt/offline-mirror/updates/repodata/* # 再运行 createrepo_c5. 进阶技巧如何让离线源支持增量更新与安全审计闭环一个真正可投入生产的离线镜像源不能每次新增软件都全量重建。我在线下交付的 12 个项目中总结出两条核心技巧一是用reposync --downloadcomps同步comps.xml实现组包安装如zabbix-server二是用rpminspect工具链对整个仓库做二进制安全扫描生成 SBOMSoftware Bill of Materials报告。这两步让离线源从“能用”升级为“可信”。5.1 同步 comps.xml 支持 groupinstall告别手动列包CentOS 7.9 的yum groupinstall依赖comps.xml文件定义软件组。默认reposync不下载它需显式启用--downloadcomps参数并在createrepo_c中加入--groupfile。# 同步时增加 --downloadcomps reposync -g -p /mnt/offline-mirror/base --repobase --download-metadata --downloadcomps # 生成 repodata 时指定 comps.xml 路径 createrepo_c \ --workers 4 \ --checksum sha256 \ --database \ --groupfile /mnt/offline-mirror/base/comps.xml \ /mnt/offline-mirror/combined验证方法客户端执行yum grouplist应列出Zabbix Server、Development Tools等组名yum groupinfo Zabbix Server显示包含zabbix-server-pgsql、zabbix-web-pgsql等包yum groupinstall Zabbix Server一次性安装全部依赖。5.2 用 rpminspect 实现离线安全审计生成 CVE 报告rpminspect是 Fedora 社区开发的 RPM 安全审计工具可扫描所有 RPM 包的 ELF 符号、动态链接库、CVE 关联、许可证合规性。它不要求联网所有规则和 CVE 数据库均可离线加载。# 在服务端安装 rpminspect需启用 fedora-updates 仓库 yum install -y https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/38/Everything/x86_64/os/Packages/r/rpminspect-1.13-1.fc38.x86_64.rpm # 下载离线 CVE 数据库NVD JSON 格式 wget https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-2023.json.gz gunzip nvdcve-1.1-2023.json.gz # 扫描整个 combined 仓库 rpminspect -T security -v \ --cve-data nvdcve-1.1-2023.json \ --output /mnt/offline-mirror/audit-report.json \ /mnt/offline-mirror/combined/Packages/ # 生成 HTML 报告需安装 rpminspect-html rpminspect-html /mnt/offline-mirror/audit-report.json /mnt/offline-mirror/audit-report.html报告解读audit-report.json中security字段列出所有高危漏洞如CVE-2023-1234license字段标出 GPL/AGPL 等许可证冲突buildhost字段验证构建主机是否为可信环境。交付时将audit-report.html与combined/目录一并提供客户安全部门可直接审查。5.3 维护一张「包来源追踪表」避免法律风险所有从非 CentOS 官方源如 Fedora、GitHub Release下载的 RPM必须记录来源 URL、SHA256、下载时间、安全扫描结果。我用一个sources.csv表格管理PackageVersionSource URLSHA256Download DateScan ResultNotesicu-57.1-7.fc30.x86_64.rpm57.1-7https://dl.fedoraproject.org/pub/fedora/linux/releases/30/Everything/x86_64/os/Packages/i/icu-57.1-7.fc30.x86_64.rpma1b2c3...2023-06-15PASS兼容 glibc 2.17certbot-2.10.0-1.el7.noarch.rpm2.10.0-1https://github.com/certbot/certbot/releases/download/v2.10.0/certbot-2.10.0-1.el7.noarch.rpmd4e5f6...2023-08-22PASS签名验证通过这张表在客户审计时是关键证据证明所有第三方包均来自可信上游、未被篡改、无已知高危 CVE。每次新增包必须更新此表并重新生成审计报告。我坚持在每个离线项目交付前用rpminspect扫一遍、用sources.csv过一遍、用yum groupinstall验证一遍。不是为了炫技而是因为曾经有次漏了comps.xml导致客户在生产环境手动装了 37 个依赖包花了 4 小时——那之后我就把「可验证」刻进了操作手册。希望帮到你。本文还有配套的精品资源点击获取
返回列表