详解CentOS 7跨版本迁移Rocky Linux9 生产环境安全升级教程

最近把公司一台服务器上老掉牙的 CentOS 7 升级到了 Rocky Linux 9,中间踩了无数坑,包括升级完成后由于在 CentOS 7 上自行编译升级了一些核心库,导致升级后服务器无法启动,又进入应急恢复模式模式修复,血泪教训,因此有了些系列,详细记录了升级步骤、遇到的问题及排查过程。希望对有需要的人有帮助。这里再重申一次:危险操作,没有十足的把握,切勿尝试
一、 为什么要升级?
CentOS 7 已于 2024 年 6 月 30 日 End of Life(EOL)!
这是升级的最核心原因。CentOS 7 在 2024 年 6 月 30 日 正式停止维护(End of Life),这意味着:
1. 不再提供安全更新
- 官方仓库已停止更新:CentOS 官方不再发布任何安全补丁;
- 漏洞无人修复:发现的 CVE 漏洞永远不会被修复;
- 风险日益增加:随着时间推移,已知漏洞越来越多,系统越来越危险。
举例说明:
- 2024 年 7 月后发现的 OpenSSL 心脏出血类漏洞;
- 新发现的 sudo 提权漏洞;
- 内核级别的安全漏洞;
- 这些都永远不会在 CentOS 7 上得到修复!。
2. 软件版本严重过时
CentOS 7 的基础软件版本已经非常老旧:
| 组件 | CentOS 7 版本 | Rocky Linux 9 版本 | 影响 |
|---|---|---|---|
| Linux 内核 | 3.10.x (2013 年) | 5.14.x (2021 年) | 新硬件不支持、性能差 |
| OpenSSL | 1.0.2 | 3.0.x | 不支持 TLS 1.3、存在已知漏洞 |
| Python | 2.7 / 3.6 | 3.9+ | Python 2 已 EOL,大量现代库无法使用 |
| PHP | 5.4 / 7.0 | 8.0+ | 现代框架不支持、性能落后 |
| MySQL | 5.6 / 5.7 | 8.0+ | 现代应用不兼容、性能差距大 |
| Git | 1.8.x | 2.31+ | 缺少现代 Git 特性 |
| gcc | 4.8.x | 11.x+ | 无法编译现代 C++ 程序 |
实际问题:
- 现代应用无法安装或运行;
- 开发环境与生产环境差异大;
- 编译软件时需要手动升级工具链;
- 容器技术(Docker、K8s)支持差。
3. 合规性风险
如果你的业务涉及以下场景,继续使用 CentOS 7 可能带来合规风险:
- PCI DSS 支付卡行业标准:要求使用受支持的操作系统版本;
- HIPAA 医疗行业:需要及时修补安全漏洞;
- GDPR 欧盟数据保护:要求采取适当安全措施;
- 等保 2.0:中国网络安全等级保护要求使用安全版本;
- SOC 2 / ISO 27001:审计时可能因使用 EOL 系统而不通过。
审计风险: 安全审计时,”使用已停止维护的操作系统” 会被标记为高风险项。
4. 不支持新硬件
CentOS 7 的内核(3.10)发布于 2013 年,对现代硬件支持极差:
- 新型 CPU:Intel 第 10 代+、AMD Ryzen 5000+ 支持不佳;
- NVMe SSD:可能没有最优驱动,性能无法发挥;
- 新网卡:2.5G/5G/10G 网卡可能没有驱动;
- 显卡:新显卡无法使用;
- USB 4.0 / Thunderbolt:不支持。
5. 已知的严重漏洞无法修复
以下是 CentOS 7 上无法修复的部分高危漏洞示例:
- CVE-2024-XXXX(假设的新漏洞):内核级权限提升,无法修复;
- OpenSSL 相关漏洞:版本太老,不支持新版本;
- Sudo 漏洞:多个已知提权漏洞;
- Polkit 漏洞:系统服务提权风险。
攻击者知道这些系统有漏洞且不会修复,CentOS 7 服务器成为”软柿子”。
6. 隐性成本增加
继续使用 CentOS 7 的”省钱”是假象,实际成本更高:
- 安全事件处理成本:一次入侵事件的损失远超升级成本;
- 人工维护成本:需要手动编译软件、打补丁、做 workaround;
- 业务中断风险:系统被攻破导致的服务中断;
- 技术支持成本:社区不再支持,问题难以解决。
7. 为什么选择 Rocky Linux 9?
Rocky Linux 是 CentOS 的最佳替代品:
| 特性 | CentOS 7 | Rocky Linux 9 |
|---|---|---|
| 维护状态 | ❌ EOL (2024.6.30) | ✅ 活跃维护到 2032+ |
| 内核版本 | 3.10.x | 5.14.x |
| 安全更新 | ❌ 无 | ✅ 及时提供 |
| 二进制兼容 | RHEL 7 | RHEL 9 |
| 迁移难度 | – | 有详细文档支持 |
| 社区支持 | ❌ 基本停止 | ✅ 活跃社区 |
| 商业支持 | ❌ 无 | ✅ 可选 |
Rocky Linux 9 支持周期:
- 完全支持:到 2027 年;
- 扩展支持:到 2032 年;
- 总计 10 年生命周期。
重要提示
- 如果你的服务器托管在 IDC 机房,又自行编译安装过一些核心组件,比如 openssl 之类的,请确保安装有远程控制卡,可以在系统启动失败的情况下通过远程控制卡连接到控制台进行修复工作,如果没有控制卡,请勿尝试,切记!!!
- 此升级过程涉及系统核心组件更换,存在失败风险
- 强烈建议在操作前创建系统快照或完整备份
- 生产环境请在维护窗口期操作,并确保有可回滚方案
- 升级过程中不要中断 SSH 连接,建议使用带 IPMI/KVM 的服务器
紧急提醒:如果你还在用 CentOS 7…
请立即评估以下风险:
- 你的服务器暴露在公网吗? → 风险极高,建议立即迁移;
- 处理敏感数据吗? → 合规风险,可能面临审计不通过;
- 使用于生产环境吗? → 业务连续性风险;
- 已经多久没更新了? → 累积的漏洞越来越多。
不要心存侥幸! 继续使用 EOL 系统的代价远大于升级的成本。
升级路径概览
由于无法直接从 CentOS 7 升级到 Rocky Linux 9,需要按以下路径分阶段进行:
CentOS 7.9 → CentOS 8.5 → Rocky Linux 8.8 → Rocky Linux 9.2
整个过程大约需要 1-2 小时,具体时间取决于网络速度和服务器性能。
环境要求检查
确认当前系统版本
# 检查当前系统版本 cat /etc/redhat-release uname -r uname -a
预期输出示例:
CentOS Linux release 7.9.2009 (Core) 3.10.0-1160.95.1.el7.x86_64
注意: 如果你的版本低于 CentOS 7.9,请先执行 yum -y update 升级到最新版本。
检查磁盘空间
# 检查根分区剩余空间,建议至少保留 10GB 以上 df -h / # 检查 /boot 分区空间,建议保留 500MB 以上 df -h /boot
如果空间不足,请先清理:
# 清理 yum 缓存 yum clean all # 删除旧内核(谨慎操作,保留当前使用的内核) package-cleanup --oldkernels --count=1
备份重要数据
# 备份关键配置文件 cp /etc/fstab /etc/fstab.bak cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak # 备份网络配置 cp /etc/sysconfig/network-scripts/ifcfg-* /root/network-backup/ 2>/dev/null || true # 记录已安装的重要软件包列表 rpm -qa > /root/installed-packages-before-upgrade.txt
更换国内镜像源(加速下载)
为了加快下载速度,建议更换为阿里云镜像源。
备份原有源配置
cd /etc/yum.repos.d/ cp CentOS-Base.repo CentOS-Base.repo.bak
更换阿里云镜像源
# 下载阿里云 CentOS 7 源 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 如果没有 wget,使用 curl # curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
清理并重建缓存
yum clean all yum makecache
验证镜像源是否生效:
yum repolist
你应该能看到 base-aliyun、extras-aliyun、updates-aliyun 等仓库。
安装必要的工具
安装 EPEL 仓库
EPEL 包含了许多额外的软件包,升级过程中可能需要:
yum -y install epel-release
安装升级工具
# 安装必要的升级工具 yum -y install yum-utils rpmconf # 安装 dnf(CentOS 8+ 默认使用 dnf) yum -y install dnf
运行 rpmconf 处理配置文件
# 运行 rpmconf,如果出现提示,输入 Y 和回车继续 # 如果没有提示,继续下一步 rpmconf -a
说明: rpmconf 会检查系统中需要处理的配置文件冲突。
切换到 DNF 包管理器
从 CentOS 8 开始,系统默认使用 dnf 替代 yum。
移除 yum(可选但推荐)
# 移除 yum 和 yum-metadata-parser dnf -y remove yum yum-metadata-parser # 清理 yum 配置目录 rm -Rf /etc/yum
注意: 这一步执行后,就不能使用 yum 命令了,请确保 dnf 可以正常使用。
验证 dnf 安装
dnf --version
预期输出:
4.0.9 Installed: dnf-0:4.0.9.2-2.el7_9.noarch
检查并解决包冲突(重要)
在升级之前,必须先解决包冲突问题,否则后续升级会遇到报错。
检查孤立包和依赖问题
# 检查孤立包(没有依赖的包) package-cleanup --leaves # 检查损坏的依赖 package-cleanup --orphans
标记可能冲突的包
注意: 这些包可能在升级过程中引起冲突,先记录下来:
# 列出可能引起冲突的包 rpm -qa | grep -E "(sysvinit-tools|annobin|dracut-network)"
常见冲突包:
- sysvinit-tools – 与 util-linux 冲突;
- annobin – GCC 版本依赖问题;
- dracut-network – 网络管理器依赖问题。
准备阶段检查清单
在开始正式升级前,请确认以下事项:
- 系统版本为 CentOS 7.9 或更高;
- 根分区剩余空间 > 10GB;
- 已更换为阿里云镜像源;
- 已安装 dnf 并能正常使用;
- 已运行
rpmconf -a处理配置文件; - 已备份关键配置文件;
- 已创建系统快照或完整备份(重要!)。
升级前的最后提醒
再次确认你是否真的需要升级?
必须升级的情况(符合任意一条就必须升级):
- ✅ 服务器暴露在公网;
- ✅ 处理敏感/重要数据;
- ✅ 用于生产环境;
- ✅ 有合规性要求;
- ✅ 需要运行现代软件;
- ✅ 使用较新的硬件。
可以暂缓升级的情况(同时满足以下条件):
- 内网环境且与外网物理隔离;
- 不处理敏感数据;
- 只是测试/开发环境;
- 短期内(1-2 个月内)计划退役或重建。
即便如此,如果条件允许,还是尽可能升级到新版本!
查看当前系统版本
初始安装镜像为 CentOS 7.6 64 位版本。
# 查看内核版本 uname -r # 输出: 3.10.0-1160.71.1.el7.x86_64 # 查看完整系统信息 uname -a # 输出: Linux VM-4-3-centos 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux # 查看详细版本信息 cat /proc/version # 输出: Linux version 3.10.0-1160.71.1.el7.x86_64 (<mockbuild@kbuilder.bsys.centos.org>) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Jun 28 15:37:28 UTC 2022
安装 EPEL 仓库
# 安装 EPEL 仓库 yum -y install epel-release # 输出: # Installed: # epel-release.noarch 0:7-14 # Complete!
设置终端语言为简体中文
# 查看可用的语言环境 locale -a # 安装中文字体 yum groupinstall "fonts" # 设置系统语言为中文 localectl set-locale LANG=zh_CN.UTF-8 # 退出终端并重新登录后界面语言将显示为中文
升级到 CentOS 最新版本并重启
# 升级所有软件包到最新版本 yum -y update # 升级完成后重启系统 reboot # 重启后系统版本应升级为 CentOS 7.9
安装升级依赖工具
# 安装 rpmconf 和 yum-utils yum -y install rpmconf yum-utils # 执行 rpmconf 检查配置文件 # 如有交互提示,输入 Y 并回车继续;若无提示则进行下一步 rpmconf -a # 安装 dnf 包管理器 yum -y install dnf # 移除 yum 及相关组件 dnf -y remove yum yum-metadata-parser
配置 Rocky Linux 8 软件源
# 删除 CentOS 7 的软件源 rpm -e --nodeps `rpm -qa|grep centos-` # 安装 Rocky Linux 8 的软件源 rpm -ivh --nodeps --force https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/Packages/r/rocky-gpg-keys-8.10-1.9.el8.noarch.rpm rpm -ivh --nodeps --force https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/Packages/r/rocky-release-8.10-1.9.el8.noarch.rpm rpm -ivh --nodeps --force https://mirrors.aliyun.com/rockylinux/8/BaseOS/x86_64/os/Packages/r/rocky-repos-8.10-1.9.el8.noarch.rpm # 升级 EPEL 源到版本 8 dnf -y upgrade https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm # 清理缓存 dnf clean all
卸载旧内核并配置 Python 编码
卸载 CentOS 7 内核
# 卸载 CentOS 7 的内核包 rpm -e --nodeps `rpm -qa|grep -i kernel`
配置 Python 2 编码
编辑 Python 站点配置文件:
vi /usr/lib/python2.7/site-packages/sitecustomize.py
添加以下内容:
# encoding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
执行系统升级
此步骤可能遇到错误,按以下步骤逐一解决。
第一次尝试升级及错误处理
# 执行系统升级 dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
可能出现的错误:
运行事务检查 错误:事务检查与依赖解决错误: (gcc >= 8 with gcc < 9) 被 annobin-10.67-3.el8.x86_64 需要 rpmlib(RichDependencies) <= 4.12.0-1 被 annobin-10.67-3.el8.x86_64 需要 (NetworkManager >= 1.20 or dhclient) 被 dracut-network-049-218.git20221019.el8_7.x86_64 需要 rpmlib(RichDependencies) <= 4.12.0-1 被 dracut-network-049-218.git20221019.el8_7.x86_64 需要 (annobin if gcc) 被 redhat-rpm-config-130-1.el8.noarch 需要 (gcc-plugin-annobin if gcc) 被 redhat-rpm-config-130-1.el8.noarch 需要 rpmlib(RichDependencies) <= 4.12.0-1 被 redhat-rpm-config-130-1.el8.noarch 需要
解决方案:
# 查找冲突的软件包位置 find /var/cache/dnf/ -name *annobin-10.67-3.el8.x86_64* # 输出: /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/annobin-10.67-3.el8.x86_64.rpm find /var/cache/dnf/ -name *dracut-network-049-218.git20221019.el8_7.x86_64* # 输出: /var/cache/dnf/baseos-3e608afeebc9a90b/packages/dracut-network-049-218.git20221019.el8_7.x86_64.rpm find /var/cache/dnf/ -name *redhat-rpm-config-130-1.el8.noarch* # 输出: /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/redhat-rpm-config-130-1.el8.noarch.rpm # 强制安装冲突的软件包 rpm -ivh --nodeps --force /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/annobin-10.67-3.el8.x86_64.rpm rpm -ivh --nodeps --force /var/cache/dnf/baseos-3e608afeebc9a90b/packages/dracut-network-049-218.git20221019.el8_7.x86_64.rpm rpm -ivh --nodeps --force /var/cache/dnf/appstream-62ae9a0bbea44fbe/packages/redhat-rpm-config-130-1.el8.noarch.rpm
第二次尝试升级及错误处理
# 再次尝试系统升级 dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync
可能出现的错误:
运行事务测试 错误:事务检查错误: file /usr/sbin/pidof from install of procps-ng-3.3.15-9.el8.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/bin/last from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/bin/mesg from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/bin/wall from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/share/man/man1/last.1.gz from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/share/man/man1/mesg.1.gz from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64 file /usr/share/man/man1/wall.1.gz from install of util-linux-2.32.1-39.el8_7.x86_64 conflicts with file from package sysvinit-tools-2.88-14.dsf.el7.x86_64
解决方案:
# 删除冲突的软件包 rpm -e --nodeps sysvinit-tools-2.88-14.dsf.el7.x86_64
第三次尝试升级
# 第三次执行升级 dnf -y --releasever=8 --allowerasing --setopt=deltarpm=false distro-sync # 升级成功完成
清理和重新配置软件仓库
卸载旧的 EPEL 仓库,重新安装并清理冲突软件包,然后重装 rpmconf 并执行配置检查。
# 进入仓库配置目录 cd /etc/yum.repos.d # 删除旧的 EPEL 仓库文件 rm -rf /etc/yum.repos.d/CentOS-Base.repo.rpmsave \ /etc/yum.repos.d/CentOS-Epel.repo \ /etc/yum.repos.d/epel-modular.repo \ /etc/yum.repos.d/epel.repo \ /etc/yum.repos.d/epel-testing-modular.repo \ /etc/yum.repos.d/epel-testing.repo # 重新安装 EPEL 仓库 dnf -y reinstall epel-release # 删除冲突的软件包 rpm -e --nodeps python36-rpmconf-1.1.7-1.el7.1.noarch # 重装 rpmconf dnf -y install rpmconf yum-utils # 执行 rpmconf 检查配置文件 # 在交互界面中一直输入 Y 并回车即可 rpmconf -a
执行rpmconf -a后会看到类似以下交互界面:
Configuration file '/etc/pam.d/fingerprint-auth' -rw-r--r--. 1 root root 701 Jul 3 04:47 /etc/pam.d/fingerprint-auth.rpmnew lrwxrwxrwx. 1 root root 19 Aug 6 10:32 /etc/pam.d/fingerprint-auth -> fingerprint-auth-ac ==> Package distributor has shipped an updated version. What would you like to do about it ? Your options are: Y or I : install the package maintainer's version N or O : keep your currently-installed version D : show the differences between the versions M : merge configuration files Z : background this process to examine the situation S : skip this file The default action is to keep your current version. *** aliases (Y/I/N/O/D/M/Z/S) [default=N] ? Your choice:
安装 Rocky Linux 8 内核
安装 Rocky Linux 8 内核及相关引导组件。如果升级后无法启动,可以使用 Rocky Linux 8 ISO 镜像的救援模式安装内核。
# 安装内核核心组件 dnf -y install kernel kernel-core # 安装 GRUB 引导相关组件 dnf -y install shim grub2-tools-extra grubby grub2-common grub2-pc dnf -y install grub2-tools-efi grub2-tools-minimal grub2-efi grub2-pc-modules grub2-tools
修复系统引导
执行以下命令修复引导配置,防止迁移完成后重启无法启动。根据分区表类型选择对应命令。
# 查看分区表类型 fdisk -l
MBR 分区(传统 BIOS、DOS、MSDOS)
适用于传统 BIOS 系统。注意/dev/vda需根据实际情况替换为正确的磁盘路径。
# 生成 GRUB 配置文件 grub2-mkconfig -o /boot/grub2/grub.cfg # 安装 GRUB 到磁盘 grub2-install /dev/vda
GPT 分区(UEFI BIOS)
适用于 UEFI BIOS 系统。
# 查找 Rocky 引导目录 export grubcfg=`find /boot/ -name rocky` # 生成 GRUB 配置文件 grub2-mkconfig -o $grubcfg/grub.cfg # 删除 CentOS 引导残留 rm -rf `find /boot/ -name centos`
添加 UEFI 启动项。注意:
/dev/nvme0n1为 EFI 分区所在磁盘,需根据实际情况替换-p后的数字为分区位置,默认为 1- 若 EFI 分区为
/dev/nvme0n1p1,值为 1 - 若 EFI 分区为
/dev/nvme0n1p2,值为 2
- 若 EFI 分区为
efibootmgr -c -w -L "RockyLinux" -d /dev/nvme0n1 -p 1 -l \\EFI\\Boot\\bootx64.efi
安装最小化环境并重启
# 清理旧配置(可选,可解决某些 yum 报错问题) rm -rf /etc/yum # 安装最小化基础环境 dnf -y groupinstall "Minimal Install" # 重启系统 reboot
重启完成后,系统已成功从 CentOS 7 升级到 Rocky Linux 8。
结语
本次 CentOS 7 逐级原地升级 Rocky Linux 9 的实操,验证了跨大版本系统迭代的可行性,也积累了诸多实战踩坑经验,自定义编译核心库引发的启动故障、依赖冲突是本次升级最大的血泪教训。CentOS 7 已全面停更,安全、兼容、合规问题日益突出,Rocky Linux 是其最优替代方案。跨版本原地升级风险极高,仅适合专业运维人员操作,生产环境务必做好备份、快照与回滚方案。本文全程记录升级步骤与故障修复方案,可为同类系统迁移提供可靠参考。
推荐阅读:
如何在 CentOS 7 上搭建 Nginx + RTMP + nginx-http-flv-module 的流媒体服务
如何在 Centos7 下基于 nginx+uwsgi 部署 Django 项目
以上关于详解CentOS 7跨版本迁移Rocky Linux9 生产环境安全升级教程的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 详解CentOS 7跨版本迁移Rocky Linux9 生产环境安全升级教程
微信
支付宝