Linux和Windows补丁升级指南
1 Windows补丁升级参考
1.1 相关术语
适用操作系统 |
备注 |
|
Monthly Rollup (月度汇总) |
Windows Server 2008和Windows Server 2012 |
一组经过测试的累积更新。 它们包括一起打包并分布在以下渠道以轻松部署的安全和可靠性更新:Windows 更新、WSUS、System Center Configuration Manager、Microsoft 更新目录。自2016年10月开始,微软对Windows的补丁进行了重大的调整,每一个月度汇总补丁都会包含上一个月的汇总补丁,所以安装最新的补丁,只需要安装最新的月度汇总补丁即可。 |
“B” Updates: Patch Tuesday(大更新) |
Windows Server 2016及以上 |
每月的第二个星期二发布的的更新,称为大更新,可以理解为以前的Monthly Rollup(月度汇总),所以在Windows Server 2016以上的版本,安装最新的补丁,只需要安装最新的“大更新”补丁即可。 |
Service pack (服务包) |
Windows Server所有版本 |
经过测试的累积所有修补程序、安全更新、关键更新和更新。 此外,Service Pack 可能包含自产品发布后在内部发现的问题的其他修补程序。Service Pack 还可能包含有限数量的客户所要求的设计变更或功能。 |
Servicing Stack Updates(服务堆栈更新) |
Windows Server所有版本 |
服务堆栈更新提供了服务堆栈(安装 Windows 更新的组件)的修补程序。 此外,它还包含“基于组件的服务堆栈”(CBS),该服务堆栈是 Windows 部署的几个元素的重要基础组件,例如 DISM、SFC、更改 Windows 功能或角色以及修复组件。 |
Security-only update (仅安全更新) |
Windows Server所有版本 |
仅安全更新是用于收集指定月份和指定产品的所有新安全更新的更新,以解决与安全相关的漏洞。Microsoft 建议在安装最新累积更新前,安装操作系统的最新服务堆栈更新。 |
Extended Security Update (扩展安全更新) |
Windows Server所有版本 |
扩展安全更新 (ESU) 计划是需要在支持结束后运行某些旧版 Microsoft 产品的客户的最后选择。 它包括在产品扩展支持终止日期后最长三年的关键或重要安全更新。生命周期检查:https://docs.microsoft.com/en-us/lifecycle/products/ |
1.2 补丁下载途径
1.2.1 方式1:快速找到最新补丁(进入ESU的版本)
https://msrc.microsoft.com/update-guide/deployments
一、修改补丁的检索日期(默认一个月,一些进入ESU的操作系统,需要扩大时间范围)
二、选择对应的产品系列:Windows、ESU
三、将分组依据更改为产品
四、按CTRL+F,搜索对应的操作系统(产品),例如看到Windows Server 2008 R2 SP1的ESU最新补丁是5007236。
1.2.2 方式2:快速找到最新补丁(正常支持的版本)
https://msrc.microsoft.com/update-guide/deployments
一、修改补丁的检索日期(默认上一次更新周期)
二、选择对应的产品系列:Windows、Windows Server 2012 R2、Windows Server 2016
三、例如Windows Server 2016,Download列显示Security Update,实际上是大更新的补丁。
1.2.3 方式3:快速找到最新补丁(适用所有版本)
https://support.microsoft.com/en-us/topic/description-of-software-update-services-and-windows-server-update-services-changes-in-content-for-2023-kb894199-0c540f4f-60c8-7dc2-23c9-48153749966d
这是微软官方KB,在每月的周二进行更新文档,将所有进入ESU和正常支持周期内的操作系统最新补丁发布到该文档中。比如2016的最新补丁:
https://msrc.microsoft.com/update-guide/vulnerability/ADV990001
这是每个操作系统的最新服务堆栈更新列表。每当有新服务堆栈更新发布时,此列表就会进行更新。
1.2.4 如何下载指定补丁
https://www.catalog.update.microsoft.com/
在catalog中,直接输入对应KB号点击“Search”即可找到对应的补丁。
1.2.5 如何找到最新的服务堆栈更新(SSU)
使用浏览器打开网址:https://msrc.microsoft.com/update-guide/vulnerability/ADV990001
1.3 补丁升级操作指南
通过上面章节可知,安装操作系统补丁,只需要安装最新的月度汇总和单独针对IE、.NET(更新之前需要确定应用的兼容性)、Print Spooler这类组件进行更新即可。下述场景以Windows Server 2008 R2 SP1安装最新的补丁为例。
1.3.1 方式一:离线下载补丁升级(以2008为例)
Windows Server 2008 R2 SP1的ESU最新补丁是5007236,进入补丁所在链接2021 年 11 月 9 日 — KB5007236 (月度汇总) (microsoft.com)。文章中分为五个章节:
一、摘要
二、改进和修复(需要重点关注)
三、此更新中的已知问题(需要重点关注)。
四、如何获取此更新(需要关注)。在此章节中,描述了安装该补丁的先决条件:
1. 2019 年 3 月 12 日的服务堆栈更新 (KB4490628) 。 若要获取此 SSU 的独立包,在 Microsoft 更新目录中搜索它。 若要安装仅由 SHA-2 签名的更新,需要此更新。
2. 2019 年 9 月 10 (KB4474419) SHA-2 更新。 如果使用 Windows 更新,将自动提供最新的 SHA-2 更新。 若要安装仅由 SHA-2 签名的更新,需要此更新。 有关 SHA-2 更新详细信息,请参阅 2019 SHA-2 代码签名对 Windows 和 WSUS 的支持要求。
3. 若要获取此安全更新,必须重新安装 "扩展安全更新 (ESU) 许可准备包" (KB4538483) 或 "扩展安全更新更新 (ESU) 许可准备包" (KB4575903) 即使以前安装了 ESU 密钥。 WSUS 会提供 ESU 许可准备包。 若要获取 ESU 许可准备包的独立包,在 Microsoft 更新目录中搜索它。
4. 安装上述项目后,强烈建议安装最新的 SSU (KB5006749) 。注意,上文提到,SSU安装后无法卸载。
五、文件信息。补丁更新的文件。
1.3.2 方式二:自动联网修复
在控制面板中,打开Windows Update,执行联网修复。
1.3.3 针对ESU KEY问题处理(不推荐使用)
https://docs.microsoft.com/zh-cn/lifecycle/faq/extended-security-updates
所有 Windows 7 和 Windows Server 2008/R2 客户,已于 2020 年 1 月 14 日获得更新,因为在此之前操作系统都处于支持状态。 2020 年 1 月 14 日 之后,针对这些操作系统的更新仅适用于 ESU 客户。
BypassESU是MDL技术团队开发的工具,绕过微软ESU审查工具,使Windows Server 2008和Windows 7的操作系统可以正常安装ESU补丁。工具使用说明:
## How to Use - Live OS Installation
* Install the recommended updates (reboot if required)
* right-click on LiveOS-Setup.cmd and "Run as administrator"
* from the menu, press the corresponding number for the desired option:
[1] Full Installation {ESU Suppressor + WU ESU Patcher + .NET 4 ESU Bypass}
most recommended option
[2] Install ESU Suppressor
mainly for security-only updates users, whom don't need the Monthly Rollup through WU
[3] Install WU ESU Patcher
this only allow to offer ESU updates via WU
[7] Install .NET 4 ESU Bypass
this allow to install NDP4 ESU updates (manually or via WU)
一般情况下,选择 1 进行完整安装。安装完成后可以执行slmgr /dlv all命令检查,看到ESU字眼说明安装成功。
1.4 补丁回退操作
Windows操作系统卸载补丁可以使用卸载补丁或者使用备份还原的方式进行回退,一旦发现补丁升级之后业务不可用或者业务卡顿等情况,可以考虑卸载补丁。需要注意:如果卸载补丁之后仍然不能解决问题,可以考虑使用备份进行还原,具体操作可以看后面的步骤。
卸载步骤:打开控制面板->找到“已安装更新”,从更新中选择安装的补丁进行卸载,回退补丁升级操作。
1.5 补丁升级问题案例
1.5.1 分析补丁安装失败原因
Windows操作系统安装补丁日志记录在C:\Windows目录的WindowsUpdate.log日志文件和C:\Windows\SoftwareDistribution目录的ReportingEvents.log中。安装过程遇到问题,可以检查日志文件中的日志记录,搜索error关键字,根据安装补丁的日志对故障原因进行分析。
一、安装补丁后,要求重启,但在开机阶段遇到报错:
二、分析故障日志C:\Windows\WindowsUpdate.lo
2021-12-14 11:20:54:473 820 eec Handler WARNING: Got extended error:
"Installer Extended Security Updates AI installer ErrorCode 80004002
Phase 38 Mode Install (first install) Component
Microsoft-Windows-SLC-Component-ExtendedSecurityUpdatesAI,
Culture=neutral, PublicKeyToken=31bf3856ad364e35,
ProcessorArchitecture=amd64, versionScope=NonSxS"
微软对报错代码并没有详细的说明,ErrorCode 80004002 仅意味着出现此类报错,需检查:
1.确保Windows Modules Installer、Windows Update和Windows Installer服务均能自动启动,并且处于正常运行状态。
2. 在符合补丁的先决条件情况下,有可能是缺少ESU KEY的安装导致安装失败。
3. 确保C盘有剩余空间。(至少要求补丁文件的3倍大小)。
4. 一次性安装补丁是否过多,避免补丁发生冲突。
1.5.2 安装补丁时,报错0x80070422
报错描述:
提示无法启动服务,报错代码为0x80070422
解决方法:
将禁用的服务更改为自动启动,并启用它:Windows Installer、Windows Modules Installer、Windows Update。
1.5.3 安装补丁时,提示此更新不适用于您的计算机
处理思路:
1. 确定所下载的补丁适用于该操作系统,例如不能使用x86补丁安装在x64操作系统上。
2. 确定Windows Update服务不被禁用,并且已经启用。
1.5.4 安装补丁重启后,卡在“配置Windows更新”界面
报错描述:
当Windows操作系统安装补丁重启后,卡在“配置Windows更新”界面,如何科学处理?
处理思路:
1. 如果补丁比较大,保持等待,如果持续10分钟以上,按CTRL+ALT+DEL,看是否有反应,有可能会显示更新日志,如果日志保持滚动更新,那建议继续等待。
2. 重启操作系统,那更新会发生失败,系统会自动尝试回退更新并返回到更新之前的设置,顺利的话会自动回退;否则无法正常开机。
3. 不要一次安装太多的补丁。
1.5.5 打补丁之前如何进行有效备份
如果是虚拟机,在执行快照保护之后,可以再使用Windows Backup Server进行系统状态数据备份。
2 Linux补丁升级参考
2.1 RHEL/CentOS/Oracle Linux补丁升级说明
2.1.1 相关术语
(1)内核
内核是 Linux 操作系统(OS)的主要组件,也是计算机硬件与其进程之间的核心接口。它负责两者之间的通信,还要尽可能高效地管理资源。内核有 4 项工作:
2. 内存管理:追踪记录有多少内存存储了什么以及存储在哪里
2. 进程管理:确定哪些进程可以使用中央处理器(CPU)、何时使用以及持续多长时间
3. 设备驱动程序:充当硬件与进程之间的调解程序/解释程序
4. 系统调用和安全防护:从流程接受服务请求
内核对于用户是不可见的,它在自己的小世界(称为内核空间)中工作,并从中分配内存和跟踪所有内容的存储位置。用户所看到的内容(例如 Web 浏览器和文件)则被称为用户空间。这些应用通过系统调用接口(SCI)与内核进行交互。
内核的发行分为RC、Mainline、Stable、Longterm,在Mainline中分为RC和Stable,RC一般用域新功能的测试,修复漏洞和保持系统的稳定,需要选择Stable/Longterm的内核进行下载更新。稳定版本不一定都提供长期支持,而提供长期支持的一定是稳定版本。
(2)RPM
RPM 软件包类似Windows上的msi/exe软件安装文件。RPM软件包有两种类型,这两种类型都共享文件格式和工具,但内容不同,并实现不同的目的:
n 源 RPM(SRPM):SRPM 包含源代码和一个 SPEC 文件,这些文件描述了如何将源代码构建到二进制 RPM 中。另外,还包含了源代码补丁。
n 二进制 RPM(平常所说的RPM):一个二进制 RPM 包含了根据源代码和补丁构建的二进制文件。
管理二进制RPM软件包的工具有rpm、yum和dnf,较常用的是rpm和yum两个工具。
2.1.2 漏洞修复介绍
针对应用程序带来的漏洞,可以通过更新软件包或修改配置文件的方式来修复漏洞。更新软件包可以使用RPM包更新,也可以使用源码更新。
一、更新RPM包,修复漏洞
RedHat会根据不同作用的RPM包,定期更新和修复漏洞,使用RPM包修复漏洞需要了解它的版本号说明和更改日志。
l 版本号说明(例如openssh-server-7.4p1-22.el7_9.x86_64)
7.4p1为openssh的具体版本;OpenBSD基金会在12月19日发布了这个版本;22为RedHat根据Open BSD发行的源码重新构建的版本号(发行的次数);el7_9对应的操作系统版本(如果是el7_9.z(z是测试的意思)),EL是Red Hat E nterprise L inux的缩写,意思为RHEL 7.9操作系统;x86_64是x86架构的64位拓展。
l 更改日志(例如openssh-server-7.4p1-22.el7_9.x86_64)
使用rpm -qi kernel-3.10.0-1160.49.1.el7.x86_64 --changelog命令可以检查RedHat对openssh每次重新构建所修复的漏洞,看起来RedHat对OpenSSH的重新构建次数不多:
[root@localhost ~]# rpm -qi openssh-server-7.4p1-22.el7_9.x86_64 --changelog|head -n 35
Name : openssh-server
Version : 7.4p1
Release : 22.el7_9
Architecture: x86_64
Install Date: Mon 20 Dec 2021 04:57:23 PM CST
Group : System Environment/Daemons
Size : 993610
License : BSD
Signature : RSA/SHA256, Wed 01 Dec 2021 10:15:28 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : openssh-7.4p1-22.el7_9.src.rpm
Build Date : Thu 25 Nov 2021 12:35:17 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
………………
* Thu Sep 30 2021 Dmitry Belyavskiy <dbelyavs@redhat.com> - 7.4p1-22 + 0.10.3-2
- avoid segfault in Kerberos cache cleanup (#1999263)
- fix CVE-2021-41617 (#2008884)
- Tue Jun 25 2019 Jakub Jelen <jjelen@redhat.com> - 7.4p1-21 + 0.10.3-2
- Avoid double comma in the default cipher list in FIPS mode (#1722446)
- Tue May 21 2019 Jakub Jelen <jjelen@redhat.com> - 7.4p1-20 + 0.10.3-2
Revert the updating of cached passwd structure (#1712053)
二、使用源码安装,修复漏洞
源码由各个软件的开源组织提供和更新,例如Linux内核由Linus Torvalds提供,后面由Linux基金会组织更新,OpenSSH由OpenOSD项目组的成员组织更新,OpenSSL由OpenSSL的开发者们提供和更新。在生产环境中,使用源码安装修复漏洞的主要是OpenSSL和OpenSSH,使用源码更新,需要注意与RPM包及其现存配置文件的冲突。
l OpenSSL
OpenSSL是一个商用级别的开源软件,几乎所有涉及网络通信的软件都有使用到它,使用OpenSSL中的库,可以建立安全通信,避免窃听和泄露数据。OpenSSL已经成为了互联网上保密通讯的工业标准,包含的库文件如下:
[root@localhost ~]# rpm -ql openssl-libs-1.0.1e-42.el7.9.x86_64|grep so
/usr/lib64/.libcrypto.so.1.0.1e.hmac
/usr/lib64/.libcrypto.so.10.hmac
/usr/lib64/.libssl.so.1.0.1e.hmac
/usr/lib64/.libssl.so.10.hmac
/usr/lib64/libcrypto.so.1.0.1e
/usr/lib64/libcrypto.so.10
/usr/lib64/libssl.so.1.0.1e
/usr/lib64/libssl.so.10
…………
l OpenSSH
OpenSSH是基于SSH协议开发的开源加密通讯软件,OpenSSH依赖OpenSSL的libcrypto库文件加密(除此之外,还依赖glibc、pam等等的库文件):
[root@localhost ~]# ldd /sbin/sshd | grep libcrypto
libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fb38f257000)
2.1.3 补丁和镜像下载途径
(1)RHEL
RedHat一般通过更新内核和RPM包的方式进行漏洞修复,RedHat没有固定发布补丁和更新的计划和时间表,有时30天发布,有时90天发布,甚至一年,例如RHEL 7的发布时间表:
RedHat在2021年2月1日发布了新的订阅政策“No-cost Red Hat Enterprise Linux Individual Developer Subscription”,在RedHat的开发者首页注册登陆后,自动获得该订阅,通过使用该订阅(支持16台机器),可以免费更新RHEL的系统和软件包,但ISO文件需要额外下载。
RedHat:https://access.redhat.com/downloads
(2)CentOS
CentOS:https://www.centos.org/download/
(3)Oracle Linux
Oracle Linux:https://yum.oracle.com/oracle-linux-isos.html
2.1.4 方式一:RHEL升级修复漏洞
如果要修复操作系统所有的漏洞,那主要使用RPM包更新(包括更新操作系统版本)的方式进行修复,需要到各个YUM源下载最新的RPM包,制作YUM源的repo进行更新。例如本文需要修复RHEL 7.1的所有漏洞,那么需要一台RHEL 7.x的虚拟机(建议使用RHEL 7.1),连接到互联网制作YUM源。
2.1.4.1 配置免费订阅
配置免费订阅需要登录https://developers.redhat.com/注册账号,注册后会有“Red Hat Developer Subscription for Individuals”的订阅。准备一台可连接到互联网的虚拟机,由于是通过红帽官网下载RPM包,在制作本地YUM源过程中耗时非常久(可能要大半天)。
2. 虚拟机注册到Red Hat Developer 订阅
[root@rhel7 ~]# subscription-manager register --username=xxxxx --password=xxxxxx
2. 分配订阅给虚拟机
3. 启用repo
[root@rhel7 ~]# subscription-manager repos --enable=rhel-7-server-rpms Repository 'rhel-7-server-rpms' is enabled for this system. [root@rhel7 ~]# subscription-manager repos --enable=rhel-7-server-optional-rpms Repository 'rhel-7-server-optional-rpms' is enabled for this system. [root@rhel7 ~]# subscription-manager repos --enable=rhel-server-rhscl-7-rpms
4. 生成元数据缓存
[root@rhel7 ~]# yum makecache
2.1.4.2 制作本地YUM源
2. 安装yum-utils工具
[root@rhel7 ~]# yum install yum-utils createrepo httpd -y
2. 下载YUM源的所有RPM包,预防个别操作系统在更新时缺少依赖包(该过程要比较久)
[root@rhel7 ~]# mkdir /opt/lastUpdate
[root@rhel7 ~]# cd /opt/lastUpdate
[root@rhel7 lastUpdate]# reposync --gpgcheck -l --downloadcomps --download-metadata --arch=noarch,x86_64
####总共下载了19086个RPM软件包,18GB
[root@rhel7 lastUpdate]# find ./ -name *.rpm|wc
19086 19086 1575716
[root@rhel7 ~]# du /opt/lastUpdate/ -ch|tail -n 1
18G total
3. 制作本地YUM源(在server-rpms的源YUM中指定-g comps.xml)
[root@rhel7 ~]# createrepo -v /opt/lastUpdate/rhel-7-server-rpms/ -g comps.xml
[root@rhel7 ~]# createrepo -v /opt/lastUpdate/rhel-server-rhscl-7-rpms/
[root@rhel7 ~]# createrepo -v /opt/lastUpdate/rhel-7-server-optional-rpms/
4. 配置更新设置,后续进行增量更新(如果只是一次性制作YUM源,本步骤可选)
for name in rhel-7-server-rpms rhel-7-server-optional-rpms rhel-server-rhscl-7-rpms
do
rm -rf /opt/lastUpdate/$name/repodata/*updateinfo*
cp /var/cache/yum/x86_64/7Server/$name/*-updateinfo.xml.gz /opt/lastUpdate/$name/repodata/
gzip -d /opt/lastUpdate/$name/repodata/*-updateinfo.xml.gz
mv /opt/lastUpdate/$name/repodata/*-updateinfo.xml /opt/lastUpdate/$name/repodata/updateinfo.xml
modifyrepo /opt/lastUpdate/$name/repodata/updateinfo.xml /opt/lastUpdate/$name/repodata/
done
5. 配置脚本更新YUM源
for name in rhel-7-server-rpms rhel-7-server-optional-rpms rhel-server-rhscl-7-rpms
do
reposync -g -l -d -m --newest-only --download_path=/opt/lastUpdate/ --downloadcomps --download-metadata
createrepo --update /opt/lastUpdate/$name/
rm -rf /opt/lastUpdate/$name/repodata/*updateinfo*
cp /var/cache/yum/x86_64/7Server/$name/*-updateinfo.xml.gz /opt/lastUpdate/$name/repodata/
gzip -d /opt/lastUpdate/$name/repodata/*-updateinfo.xml.gz
mv /opt/lastUpdate/$name/repodata/*-updateinfo.xml /opt/lastUpdate/$name/repodata/updateinfo.xml
modifyrepo /opt/lastUpdate/$name/repodata/updateinfo.xml /opt/lastUpdate/$name/repodata/
done
6. 打包或发布YUM源(16GB的RPM文件)
l 打包YUM源(如果能接入客户内网,可跳过打包步骤)
[root@rhel7 ~]# cd /opt
[root@rhel7 /opt]# tar -zcvf HEL7_lastUpdate_20211222.tar.gz ./lastUpdate
l 配置HTTP发布
[root@rhel7 ~]# ln -s /opt/lastUpdate/rhel-7-server-rpms/ /var/www/html/
[root@rhel7 ~]# ln -s /opt/lastUpdate/rhel-7-server-optional-rpms/ /var/www/html/
[root@rhel7 ~]# ln -s /opt/lastUpdate/rhel-server-rhscl-7-rpms/ /var/www/html/
[root@rhel7 ~]# ll /var/www/html/
total 0
lrwxrwxrwx. 1 root root 44 Dec 23 02:33 rhel-7-server-optional-rpms -> /opt/lastUpdate/rhel-7-server-optional-rpms/
lrwxrwxrwx. 1 root root 35 Dec 23 02:33 rhel-7-server-rpms -> /opt/lastUpdate/rhel-7-server-rpms/
lrwxrwxrwx. 1 root root 41 Dec 23 02:33 rhel-server-rhscl-7-rpms -> /opt/lastUpdate/rhel-server-rhscl-7-rpms/
[root@rhel7 ~]# firewall-cmd --add-port=80/tcp
success
[root@rhel7 ~]# firewall-cmd --reload
success
[root@rhel7 ~]# firewall-cmd --query-port=80/tcp
yes
[root@rhel7 ~]# systemctl start httpd
2.1.4.3 测试机配置YUM源
2. 修改yum配置文件,创建local.repo
for repname in rhel-7-server-rpms rhel-7-server-optional-rpms rhel-server-rhscl-7-rpms
do
echo '['${repname}']'>>/etc/yum.repos.d/local.repo
echo 'name = '${repname}>>/etc/yum.repos.d/local.repo
echo 'baseurl = http://192.168.1.125/'${repname}>>/etc/yum.repos.d/local.repo
echo 'gpgcheck = 0'>>/etc/yum.repos.d/local.repo
echo 'enabled = 1'>>/etc/yum.repos.d/local.repo
echo 'priority=1'>>/etc/yum.repos.d/local.repo
echo ''>>/etc/yum.repos.d/local.repo
done
2. 生成cache
[root@localhost ~]# yum clean all;yum makecache
2.1.4.4 测试机进行YUM UPDATE升级(生产环境慎用)
2. 进行yum update(SecureCRT/Putty配置日志输出,留意过程是否有“ERROR”关键字)
[root@localhost ~]# yum update -y
l 报错1 :未卸载cdrom,导致filesystem包无法更新
Error unpacking rpm package filesystem-3.2-25.el7.x86_64
error: unpacking of archive failed on file /mnt: cpio: lsetfilecon
Installing : 1:grub2-pc-modules-2.02-0.87.el7_9.7.noarch 6/597
error: filesystem-3.2-25.el7.x86_64: install failed
解决方法:卸载/mnt后,再次执行yum update,会自动重新更新报错的filesystem包。
[root@localhost ~]# umount /mnt
[root@localhost ~]# yum update -y
2. 重启测试机
[root@localhost ~]# reboot
3. 开机后,再次确认是否不再需要重启
[root@localhost ~]# yum install yum-utils -y
[root@localhost ~]# needs-restarting -r ; echo $?
No core libraries or services have been updated.
Reboot is probably not necessary.
0
4. 验证升级后的操作系统版本和内核版本,可以看到老的内核仍然保留,用于回退。
[root@localhost ~]# rpm -qa|grep release
redhat-release-server-7.9-6.el7_9.x86_64
[root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[root@localhost ~]# rpm -q kernel
kernel-3.10.0-229.el7.x86_64
kernel-3.10.0-1160.49.1.el7.x86_64
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 9 16:09:48 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
5. 业务应用测试运行(状态和性能)正常后,可以卸载旧的内核包
[root@localhost ~]# rpm -e kernel-3.10.0-229.el7.x86_64 warning: file /lib/modules/3.10.0-229.el7.x86_64/modules.softdep: remove failed: No such file or directory warning: file /lib/modules/3.10.0-229.el7.x86_64/modules.devname: remove failed: No such file or directory [root@localhost ~]# rpm -q kernel kernel-3.10.0-1160.49.1.el7.x86_64
2.1.5 方式二:RHEL针对组件修复漏洞
一、关于内核(需要停机)
l 服务器硬件和操作系统及其内核版本有兼容性要求,在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动。所以在生产环境中不要轻易的升级内核,除非已经提前确认符合服务器硬件的兼容性要求。
l 升级内核需要考虑操作系统承载的应用程序是否支持最新的内核版本。
l 尽量不要使用覆盖安装内核的方式,预防需要回退。
l 在兼容的前提下,可以升级到最新版本,否则需要考虑漏扫中说明的版本是否支持。
二、关于glibc(一般不需要停机)
l glibc升级不可回退。
l glibc提供了C语言库和标准的数学库,一旦glibc出现问题,系统无法正常运行。
l glibc升级失败后,执行任何命令都会报“Segmentation fault”。
l 要保持升级后glibc的版本符合Linux系统发行时规定的版本,例如RHEL 7中要求是2.17,就不能升级到2.18。(https://access.redhat.com/solutions/38634)
三、关于OpenSSH(一般升级到最新的版本或者漏扫报告中指定的版本,不需要停机)
l 升级之前要允许vnc或者telnet连接,避免升级失败后SSH无法使用。
l 升级OpenSSH后,也需要安装新版本的OpenSSL(由于使用了它的libcrypto库)。
l 使用源码方式升级OpenSSH和OpenSSL,不建议卸载旧的OpenSSH和OpenSSL。
四、关于操作系统(需要停机)
l 服务器硬件对操作系统版本有兼容性要求,升级之前需要先确认目的操作系统版本符合服务器硬件兼容性要求。
l 升级操作系统承载的应用程序是否支持最新的操作系统版本。
l 如果升级完上述三者之后,还需要升级操作系统,那建议排除内核、glibc、openssl和openssh。
总之,升级之前要做好备份/快照。
进行补丁升级之前,建议安装yum-util工具,通过命令检查是否需要重启。
2.1.5.1 升级内核
升级内核版本至当前Linux 7的最新版本(kernel-3.10.0-1160.49.1)。
2. 直接使用rpm -ivh安装内核,提示所需的软件包版本不符合内核版本的要求。
[root@localhost ~]# rpm -ivh kernel-3.10.0-1160.49.1.el7.x86_64.rpm
warning: kernel-3.10.0-1160.49.1.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
dracut >= 033-502 is needed by kernel-3.10.0-1160.49.1.el7.x86_64
linux-firmware >= 20190429-72 is needed by kernel-3.10.0-1160.49.1.el7.x86_64
selinux-policy-targeted < 3.13.1-201 conflicts with kernel-3.10.0-1160.49.1.el7.x86_64
xfsprogs < 4.3.0 conflicts with kernel-3.10.0-1160.49.1.el7.x86_64
kmod < 20-9 conflicts with kernel-3.10.0-1160.49.1.el7.x86_64
kexec-tools < 2.0.14-3 conflicts with kernel-3.10.0-1160.49.1.el7.x86_64
[root@localhost ~]# rpm -qa|grep -E "kmod|kexec-tools|linux-firmware|selinux-policy-targeted|xfsprogs"
selinux-policy-targeted-3.13.1-60.el7.noarch
xfsprogs-3.2.2-2.el7.x86_64
kmod-20-5.el7.x86_64
kexec-tools-2.0.7-38.el7.x86_64
linux-firmware-20150904-43.git6ebf5d5.el7.noarch
kmod-libs-20-5.el7.x86_64
l 使用yum解决依赖包(最新内核所需要的依赖包,在最新的操作系统版本一般会有,使用最新的7.9操作系统ISO文件,通过yum解决)总共需要升级15个依赖包。
[root@localhost ~]# yum install kernel-3.10.0-1160.49.1.el7.x86_64.rpm
…………
Dependencies Resolved
=================================================================================================================================
Package Arch Version Repository Size
=================================================================================================================================
Installing:
kernel x86_64 3.10.0-1160.49.1.el7 /kernel-3.10.0-1160.49.1.el7.x86_64 64 M
Updating:
kexec-tools x86_64 2.0.15-51.el7 local 350 k
kmod x86_64 20-28.el7 local 123 k
selinux-policy-targeted noarch 3.13.1-268.el7 local 7.0 M
systemd x86_64 219-78.el7 local 5.1 M
xfsprogs x86_64 4.5.0-22.el7 local 897 k
Installing for dependencies:
lz4 x86_64 1.8.3-1.el7 local 85 k
Updating for dependencies:
cryptsetup-libs x86_64 2.0.3-6.el7 local 339 k
dracut x86_64 033-572.el7 local 329 k
dracut-config-rescue x86_64 033-572.el7 local 61 k
dracut-network x86_64 033-572.el7 local 103 k
libgudev1 x86_64 219-78.el7 local 109 k
libselinux x86_64 2.5-15.el7 local 162 k
libselinux-python x86_64 2.5-15.el7 local 236 k
libselinux-utils x86_64 2.5-15.el7 local 151 k
libsemanage x86_64 2.5-14.el7 local 151 k
libsepol x86_64 2.5-10.el7 local 297 k
linux-firmware noarch 20200421-79.git78c0348.el7 local 80 M
policycoreutils x86_64 2.5-34.el7 local 917 k
selinux-policy noarch 3.13.1-268.el7 local 497 k
systemd-libs x86_64 219-78.el7 local 418 k
systemd-sysv x86_64 219-78.el7 local 96 k
2. 检查所安装的内核版本,可以看到有两个内核的rpm包,使用yum升级内核后,grub的引导会自动设置为新版本的内核。
[root@localhost ~]# rpm -q kernel
kernel-3.10.0-327.el7.x86_64
kernel-3.10.0-1160.49.1.el7.x86_64
[root@localhost ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1160.49.1.el7.x86_64) 7 (Core)
如果没有自动设置,可以使用grub2-set-default命令指定一个内核(不能输错!)
[root@localhost ~]# grub2-set-default "CentOS Linux (3.10.0-1160.49.1.el7.x86_64) 7 (Core)"
3. 重启检查内核版本
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# reboot
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 30 15:51:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# reboot
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.49.1.el7.x86_64 #1 SMP Tue Nov 30 15:51:32 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
4. 验证正常后,删除旧版本内核(删除后无法立刻回退,需要重新安装)
[root@localhost ~]# rpm -e kernel-3.10.0-1160.49.1.el7.x86_64.rpm
2.1.5.2 升级glibc
升级glibc版本至当前Linux 7的最新版本(kernel-3.10.0-1160.49.1),这些rpm包在最新的ISO文件中也有。一般使用rpm方式升级,对系统带来的改动较小,成功率也会比较高。
2. 使用rpm包升级glibc版本(无法使用rpm -i选项,必须使用rpm -U选项升级)
[root@localhost Packages]# rpm -Uvh glibc-common-2.17-317.el7.x86_64.rpm glibc-2.17-317.el7.x86_64.rpm
warning: glibc-common-2.17-317.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:glibc-2.17-317.el7 warning: /etc/nsswitch.conf created as /etc/nsswitch.conf.rpmnew
################################# [ 25%]
2:glibc-common-2.17-317.el7 ################################# [ 50%]
Cleaning up / removing...
3:glibc-2.17-105.el7 ################################# [ 75%]
4:glibc-common-2.17-105.el7 ################################# [100%]
2. 验证升级成功
[root@localhost Packages]# rpm -q glibc glibc-common
glibc-2.17-317.el7.x86_64
glibc-common-2.17-317.el7.x86_64
Type |
Red Hat Enterprise Linux 4 |
Red Hat Enterprise Linux 5 |
Red Hat Enterprise Linux 6 |
Red Hat Enterprise Linux 7 |
Red Hat Enterprise Linux 8 |
GA |
glibc-2.3.4-2 |
glibc-2.5-12 |
glibc-2.12-1.7 |
glibc-2.17-55 |
glibc-2.28-42 |
Update 1 |
glibc-2.3.4-2.9 |
glibc-2.5-18 |
glibc-2.12-1.25 |
glibc-2.17-78 |
glibc-2.28-72 |
Update 2 |
glibc-2.3.4-2.13 |
glibc-2.5-24 |
glibc-2.12-1.47 |
glibc-2.17-105 |
glibc-2.28-101 |
Update 3 |
glibc-2.3.4-2.19 |
glibc-2.5-34 |
glibc-2.12-1.80 |
glibc-2.17-157 |
glibc-2.28-127 |
Update 4 |
glibc-2.3.4-2.25 |
glibc-2.5-42 |
glibc-2.12-1.107 |
glibc-2.17-196 |
glibc-2.28-151 |
Update 5 |
glibc-2.3.4-2.36 |
glibc-2.5-49 |
glibc-2.12-1.132 |
glibc-2.17-222 |
|
Update 6 |
glibc-2.3.4-2.39 |
glibc-2.5-58 |
glibc-2.12-1.149 |
glibc-2.17-260 |
|
Update 7 |
glibc-2.3.4-2.41 |
glibc-2.5-65 |
glibc-2.12-1.166 |
glibc-2.17-292 |
|
Update 8 |
glibc-2.3.4-2.43 |
glibc-2.5-81 |
glibc-2.12-1.192 |
glibc-2.17-307 |
|
Update 9 |
glibc-2.3.4-2.54 |
glibc-2.5-107 |
glibc-2.12-1.209 |
glibc-2.17-317 |
|
Update 10 |
N/A |
glibc-2.5-118 |
glibc-2.12-1.212 |
N/A |
|
2.1.5.3 升级OpenSSH
2. 准备OpenSSL和OpenSSH的源码
l openssl-1.1.1(LTS)
https://www.openssl.org/source/
l Openssh-8.8p1
https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
将安装包上传到机器中,例如/tmp目录下,可以使用winscp或者sftp上传。
2. yum安装依赖包(如果已经升级完了glibc,那也要使用最新版本的yum源,这个过程会升级或者安装其它所需要的依赖包)
[root@localhost tmp]# yum install openssl-devel gcc perl glibc zlib
Installed:
gcc.x86_64 0:4.8.5-44.el7 openssl-devel.x86_64 1:1.0.2k-19.el7 perl.x86_64 4:5.16.3-297.el7Dependency Installed:
cpp.x86_64 0:4.8.5-44.el7 glibc-devel.x86_64 0:2.17-317.el7 glibc-headers.x86_64 0:2.17-317.el7
keyutils-libs-devel.x86_64 0:1.5.8-3.el7 krb5-devel.x86_64 0:1.15.1-50.el7 libcom_err-devel.x86_64 0:1.42.9-19.el7
libkadm5.x86_64 0:1.15.1-50.el7 libmpc.x86_64 0:1.0.1-3.el7 libselinux-devel.x86_64 0:2.5-15.el7
libsepol-devel.x86_64 0:2.5-10.el7 libverto-devel.x86_64 0:0.2.5-4.el7 mpfr.x86_64 0:3.1.1-4.el7
pcre-devel.x86_64 0:8.32-17.el7 perl-Carp.noarch 0:1.26-244.el7 perl-Encode.x86_64 0:2.51-7.el7
perl-Exporter.noarch 0:5.68-3.el7 perl-File-Path.noarch 0:2.09-2.el7 perl-File-Temp.noarch 0:0.23.01-3.el7
perl-Filter.x86_64 0:1.49-3.el7 perl-Getopt-Long.noarch 0:2.40-3.el7 perl-HTTP-Tiny.noarch 0:0.033-3.el7
perl-PathTools.x86_64 0:3.40-5.el7 perl-Pod-Escapes.noarch 1:1.04-297.el7 perl-Pod-Perldoc.noarch 0:3.20-4.el7
perl-Pod-Simple.noarch 1:3.28-4.el7 perl-Pod-Usage.noarch 0:1.63-3.el7 perl-Scalar-List-Utils.x86_64 0:1.27-248.el7
perl-Socket.x86_64 0:2.010-5.el7 perl-Storable.x86_64 0:2.45-3.el7 perl-Text-ParseWords.noarch 0:3.29-4.el7
perl-Time-HiRes.x86_64 4:1.9725-3.el7 perl-Time-Local.noarch 0:1.2300-2.el7 perl-constant.noarch 0:1.27-2.el7
perl-libs.x86_64 4:5.16.3-297.el7 perl-macros.x86_64 4:5.16.3-297.el7 perl-parent.noarch 1:0.225-244.el7
perl-podlators.noarch 0:2.5.1-3.el7 perl-threads.x86_64 0:1.87-4.el7 perl-threads-shared.x86_64 0:1.43-6.el7
zlib-devel.x86_64 0:1.2.7-18.el7
Dependency Updated:
e2fsprogs.x86_64 0:1.42.9-19.el7 e2fsprogs-libs.x86_64 0:1.42.9-19.el7 krb5-libs.x86_64 0:1.15.1-50.el7
libcom_err.x86_64 0:1.42.9-19.el7 libgcc.x86_64 0:4.8.5-44.el7 libgomp.x86_64 0:4.8.5-44.el7
libss.x86_64 0:1.42.9-19.el7 openssl.x86_64 1:1.0.2k-19.el7 openssl-libs.x86_64 1:1.0.2k-19.el7
pcre.x86_64 0:8.32-17.el7 zlib.x86_64 0:1.2.7-18.el7
关于zlib是否需要升级的问题:升级zlib不是必须的,zlib在openssh里用于压缩数据的,并且是在用户认证之后才适用zlib做数据压缩,所以不是必须要升级的,只要openssh能够编译成功即可。如果非要升级zlib,建议能用yum源的方式来就不要用源码,毕竟yum源的方式稳定和简单,而且zlib在openssh里可以说是和安全不沾边的,因为它是加密认证后才做的数据压缩。
参考链接:https://www.openssh.com/txt/draft-miller-secsh-compression-delayed-00.txt
3. 备份原文件
[root@localhost tmp]# mv /usr/bin/openssl /usr/bin/openssl.old
[root@localhost tmp]# mv /usr/include/openssl /usr/include/openssl.old
4. 升级OpenSSL,确定config阶段输出Succeeded
[root@localhost ~]# cd /tmp;tar -xf /tmp/openssl-1.1.1m.tar.gz [root@localhost ~]# cd /tmp/openssl-1.1.1m [root@localhost openssl-1.1.1m]# ./config --prefix=/usr/local/openssl-1.1.1 shared zlib [root@localhost openssl-1.1.1m]# make [root@localhost openssl-1.1.1m]# make install [root@localhost openssl-1.1.1m]# ln -s /usr/local/openssl-1.1.1 /usr/local/openssl
5. 更改openssl工具和库文件
[root@localhost tmp]# ln -s /usr/local/openssl-1.1.1/bin/openssl /usr/bin/openssl [root@localhost tmp]# ln -s /usr/local/openssl-1.1.1 /usr/local/openssl [root@localhost tmp]# echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl.conf [root@localhost tmp]# ldconfig
6. 检查版本和库文件
[root@localhost openssl]# openssl version -a
OpenSSL 1.1.1m 14 Dec 2021
built on: Fri Dec 17 10:27:06 2021 UTC
platform: linux-x86_64
options: bn(64,64) rc4(16x,int) des(int) idea(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAESNI_ASM -DVPAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPOLY1305_ASM -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/openssl-1.1.1/ssl"
ENGINESDIR: "/usr/local/openssl-1.1.1/lib/engines-1.1"
Seeding source: os-specific
[root@localhost openssl]# ldconfig -p | grep openssl
libssl.so.1.1 (libc6,x86-64) => /usr/local/openssl-1.1.1/lib/libssl.so.1.1
libssl.so (libc6,x86-64) => /usr/local/openssl-1.1.1/lib/libssl.so
libcrypto.so.1.1 (libc6,x86-64) => /usr/local/openssl-1.1.1/lib/libcrypto.so.1.1
libcrypto.so (libc6,x86-64) => /usr/local/openssl-1.1.1/lib/libcrypto.so
7. 升级OpenSSH(升级过程中,留意SSH端口和PermitRootLogin配置文件,涉及ssh互相需要重新配置)
[root@localhost tmp]# mv /etc/ssh /etc/ssh.old [root@localhost tmp]# mv /usr/lib/systemd/system/sshd.service /tmp [root@localhost tmp]# cd /tmp;tar -xf /tmp/openssh-8.8p1.tar.gz [root@localhost tmp]# cd /tmp/openssh-8.8p1 [root@localhost openssh-8.8p1]# ./configure --prefix=/usr/local/openssh-8.8p1 --sysconfdir=/etc/ssh --with-md5-passwords --with-zlib --with-ssl-dir=/usr/local/openssl/ --mandir=/usr/share/man [root@localhost openssh-8.8p1]# make [root@localhost openssh-8.8p1]# make install [root@localhost openssl-1.1.1m]# ln -s /usr/local/openssh-8.8p1 /usr/local/openssh [root@localhost openssh]# echo y | cp -p contrib/redhat/sshd.pam /etc/pam.d/sshd [root@localhost openssh]# cp -p contrib/redhat/sshd.init /etc/init.d/sshd [root@localhost openssh]# chmod +x /etc/init.d/sshd [root@localhost bin]# mv /usr/sbin/sshd /usr/sbin/sshd.old [root@localhost bin]# ls /usr/bin/ssh* /usr/bin/scp|xargs -t -i mv {} {}.old [root@localhost bin]# cp /usr/local/openssh/sbin/* /usr/sbin [root@localhost bin]# echo y | cp /usr/local/openssh/bin/* /usr/bin [root@localhost openssh-8.8p1]# setenforce 0
8. 测试重启服务和检查版本
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# systemctl status sshd
[root@localhost ~]# ssh -V
OpenSSH_8.8p1, OpenSSL 1.1.1m 14 Dec 2021
2.1.5.4 升级操作系统(生产环境慎用)
如果按照上述方法完成了内核、glibc、openssl和openssh升级后,升级操作系统时需要排除掉openssh包,避免重复的安装而导致现有的配置文件被更新。
参考RHEL修复操作系统所有漏洞章节,但yum update命令需要增加排除选项:
yum update --exclude=kernel openssh
needs-restarting -r ; echo $?
reboot
重启完成后,再次检查是否需要重启
needs-restarting -r ; echo $?
2.1.6 RHEL补丁回退操作
使用yum history命令读取历史事务信息,并且通过事务ID回退到指定的历史版本,回退之前要求操作系统具备回退版本所需的YUM仓库源。
2. 查看当前所有的历史事务信息:yum history list all
2. 查看指定历史版本产生的更新信息:yum history info 3
3. 回退到指定的历史版本:yum history undo 3
我们在安装了新版本的内核后,同时还保留旧版本的内核软件包。如果只需要单独回退内核,可以直接更改gurb2引导文件,使用旧的内核开机启动。
2. 检查可使用的引导项
[root@localhost ~]# grep CentOS /boot/grub2/grub.cfg
menuentry 'CentOS Linux (3.10.0-1160.49.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-40772111-014b-4bd6-8622-c08cf9d10e7b' {
menuentry 'CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-327.el7.x86_64-advanced-40772111-014b-4bd6-8622-c08cf9d10e7b' {
menuentry 'CentOS Linux (0-rescue-dc39e327b70f467689638d4f2df714b2) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-dc39e327b70f467689638d4f2df714b2-advanced-40772111-014b-4bd6-8622-c08cf9d10e7b' {
2. 使用旧版本内核CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)重新开机启动(不能输错)
[root@localhost ~]# grub2-set-default "CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)"
[root@localhost ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
[root@localhost ~]# reboot
3. 检查回退结果
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
2.2 Ubuntu补丁升级说明
2.2.1 相关术语
(1)内核
同样使用Linux内核。
(2)DEB
ubuntu是基于debian的操作系统,使用deb包文件。Debian有两种类型的软件包:二进制软件包(deb)和源码包(deb-src)。
n 源码包(Source Packages):包含软件源代码、版本修改说明、构建指令以及编译工具等。先由tar工具归档为.tar.gz文件,然后再打包成.dsc文件。
n 二进制deb软件包(Binary Packages):包含可执行文件、库文件、配置文件、man/info页面、版权声明和其他文档。
管理二进制deb软件包的工具有apt、apt-get、dpkg,较常用的是apt和dgkg两个工具。
2.2.2 Ubuntu补丁和镜像下载途径
Ubuntu 每六个月固定发布一次更新,它的LTS版本标准支持周期是四年,生命周期为十年。
一、Ubuntu最新版本内核下载步骤:
https://kernel.ubuntu.com/~kernel-ppa/mainline/
2. 访问内核下载网站,找到v5.15,点击进去,然后找到amd64,再次点击进去下载
2. 下载内核的deb文件包:
linux-image-X.Y.Z-generic-*.deb
linux-modules-X.Y.Z-generic-.deb
二、Ubuntu最新版本操作系统iso下载步骤:
2. 访问iso下载网站,找到“LTS Releases”,选择最新的版本
2. 进入新页面后,点击Server install image对应的“64-bit PC (AMD64) server install image”进行下载。
2.3.3 Ubuntu升级修复漏洞
类似于RHEL的方式,准备一台可以连接到互联网的Ubuntu机器,使用apt-offline工具离线下载升级文件,然后通过网络或者USB等方式传输到需要升级的机器上,如果机器数量不多,推荐根据具体软件包需求的方式下载。
(1)根据具体软件包需求,在联网环境下只下载不安装
Ø 查看已安装的软件
apt list --installed
Ø 清空缓存目录
rm -rf /var/cache/apt/archives/*
ls /var/cache/apt/archives/
Ø apt-get -d 只下载不安装
apt-get -d install gcc make libpam0g-dev libghc-zlib-dev telnetd snmp snmpd ufw dpkg-dev net-tools multipath-tools
Ø 查看软件包下载目录
ls /var/cache/apt/archives
Ø 将下载的deb包拷贝到debs目录下
mkdir /debs
cp -r /var/cache/apt/archives/* /debs/
Ø 创建包索引文件
chmod -R 777 /debs/
dpkg-scanpackages /debs/ /dev/null | gzip > /debs/Packages.gz
Ø 打包整个目录
tar czvf aptrepo.tar.gz -C /debs/ .
Ø 将打包文件拷贝到目标服务器目录/debs/并解压
cp /etc/apt/sources.list /etc/apt/sources.list.bak
vi /etc/apt/sources.list #输入以下内容
"deb [trusted=yes] file:/// debs/" > /etc/apt/sources.list
Ø 执行升级
apt-get update
(2)下载APT同步工具
apt-get install apt-mirror
Ø 修改apt-mirror配置文件
Ø 查看系统版本
sudo lsb_release -a
Ø 修改版本代号,使用阿里云APT源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
Ø 开始同步
apt-mirror
Ø 安装Web服务
sudo apt-get install apache2
Ø 如果是本机作为APT源服务器,做个软链接
sudo ln -s /var/spool/apt-mirror/mirror/mirrors.aliyun.com/ubuntu /var/www/html/ubuntu
Ø 客户端配置,编辑 /etc/apt/source.list,加入以下内容
deb [arch=amd64] http://[IP/FQDN]:[port]/ubuntu/ focal main restricted universe multiverse
deb [arch=amd64] http://[IP/FQDN]:[port]/ubuntu/ focal-security main restricted universe multiverse
deb [arch=amd64] http://[IP/FQDN]:[port]/ubuntu/ focal-updates main restricted universe multiverse
deb [arch=amd64] http://[IP/FQDN]:[port]/ubuntu/ focal-proposed main restricted universe multiverse
deb [arch=amd64] http://[IP/FQDN]:[port]/ubuntu/ focal-backports main restricted universe multiverse
Ø 更新APT
apt-get update
2.2.4 Ubuntu补丁回退操作
Ubuntu的apt目前无法像RHEL的yum/dnf一样执行回退操作。可以考虑使用REAR工具备份和回滚。