阿里云ECS Centos7内核从3.10.0升级到最新稳定版5.2.8修复内核漏洞

阿里云ECS Centos7内核从3.10.0升级到最新稳定版5.2.8修复内核漏洞
有一段时间没有查看服务器状态了,今天登录阿里云控制台突然发现平台爆了几十个漏洞,而且基本上都是内核的漏洞。这些漏洞如果不修复就会存在很大的安全隐患,必须尽快修复才行。那么如何修复呢?阿里云提供了企业级修复方案,但是这需要经济啊!我这里走的是最省的方式:自己升级内核来修复内核漏洞。

以下为部分漏洞列表
centos-kernel-leaks-list

当前环境:
服务器Linux版本:CentOS 7.3
内核版本为:3.10.0-693.21.1.el7.x86_64

Linux内核升级方式

  • 1、源码安装:下载新版内核源码到服务器上,进行编译安装,这种方式可完全控制编译项,但是编译慢,而且容易失败。
  • 2、yum安装:采用yum方式安装, 优点是快捷方便,而且成功率很高。

我是懒人,当然选择最快最省心的方式了:yum方式升级。步骤如下:

注意:在做内核升级前,我们一定要先做好服务器数据备份或者做好服务器快照。重要的事情说三遍:备份、备份、备份。

1、查看当前内核版本

使用uname -r命令就可以查看当前系统的内核版本。

[root@izwz9~]# uname -r
3.10.0-693.21.1.el7.x86_64

2、导入ELRepo公共秘钥和yum源

[root@izwz9~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

[root@izwz9~]# rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

这里的ELRepo是Linux操作系统的第三方免费软件(RPM包)资源库。它支持红帽Linux(RHEL)及其衍生产品,如:Scientific Linux,CentOS等。上面的两条命令就是elrepo官网提供。
elrepo-centos

3、安装内核

  [root@izwz9~]# yum --enablerepo=elrepo-kernel install  kernel-ml-devel kernel-ml

默认将安装mainline版本, 也就是最新的稳定版本

4、查看已安装内核

查看已安装的Linux内核版本,使用rpm -qa kernel*rpm -qa | grep -i kernel命令

ps:如果rpm -qa kernel*这条命令的kernel后面不加星号,是查看不到新安装的内核的。

[root@izwz9~]# rpm -qa | grep -i kernel
kernel-tools-3.10.0-957.27.2.el7.x86_64
kernel-3.10.0-693.21.1.el7.x86_64
kernel-3.10.0-957.5.1.el7.x86_64
kernel-3.10.0-693.el7.x86_64
kernel-3.10.0-693.2.2.el7.x86_64
kernel-ml-5.2.8-1.el7.elrepo.x86_64
kernel-tools-libs-3.10.0-957.27.2.el7.x86_64
kernel-3.10.0-957.27.2.el7.x86_64
kernel-ml-devel-5.2.8-1.el7.elrepo.x86_64
kernel-headers-3.10.0-957.27.2.el7.x86_64

从输出结果我们可以看到当前最新版的内核为5.2.8-1.el7.elrepo.x86_64

5、查找新安装内核的完整名称

使用cat /boot/grub2/grub.cfg | grep menuentry指令

 [root@izwz9~]# cat /boot/grub2/grub.cfg | grep menuentry
  if [ x"${feature_menuentry_id}" = xy ]; then
  menuentry_id_option="--id"
  menuentry_id_option=""
export menuentry_id_option
menuentry 'CentOS Linux (5.2.8-1.el7.elrepo.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.2.2.el7.x86_64-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {
menuentry 'CentOS Linux (3.10.0-957.27.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.2.2.el7.x86_64-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {
menuentry 'CentOS Linux (3.10.0-957.5.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.2.2.el7.x86_64-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {
menuentry 'CentOS Linux (3.10.0-693.21.1.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.2.2.el7.x86_64-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {
menuentry 'CentOS Linux (3.10.0-693.2.2.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.2.2.el7.x86_64-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {
menuentry 'CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-3.10.0-693.el7.x86_64-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {
menuentry 'CentOS Linux (0-rescue-f0f31005fb5a436d88e3c6cbf54e25aa) 7 (Core)' --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-0-rescue-f0f31005fb5a436d88e3c6cbf54e25aa-advanced-eb448abb-3012-4d8d-bcde-94434d586a31' {

从输出信息可以找到最新版的内核完整名称为:'CentOS Linux (5.2.8-1.el7.elrepo.x86_64) 7 (Core)',我们将在第6步中使用这个名称。

6、设置默认启动内核为最新版

  • a、使用grub2-set-default '***'指令设置默认启动内核。(*** 代表第5步中输出的内核名称,注意这里的引号也是不能缺少的)
  • b、因为新安装的内核默认排在第一位,所以我们使用grub2-set-default 0指令也可以设置默认启动内核。

    [root@izwz9~]# grub2-set-default 'CentOS Linux (5.2.8-1.el7.elrepo.x86_64) 7 (Core)'
    或
    [root@izwz9~]# grub2-set-default 0
    

7、查看默认启动内核是否更改成功

使用grub2-editenv list命令查看

[root@izwz9~]# grub2-editenv list
saved_entry=CentOS Linux (5.2.8-1.el7.elrepo.x86_64) 7 (Core)
或
 saved_entry=0

从输出结果可以看出,默认启动内核已经被设置成了最新版。

8、重启服务器

确认默认启动内核为最新版后,我们就可以重启服务器了。

 [root@izwz9~]# reboot

重启完成后,新内核就安装完成。此时我们可以再次使用uname -r命令查看当前的默认内核版本。

 [root@izwz9~]# uname -r
 5.2.8-1.el7.elrepo.x86_64

内核升级完成过后,有时候我们为了节省磁盘空间,可能会考虑删除旧的内核,下面是删除旧内核方式。

9、删除老版本内核(可选)

使用rpm -qa kernel*rpm -qa | grep -i kernel命令查看已有的所有内核版本。

[root@izwz9~]# rpm -qa | grep -i kernel
kernel-tools-3.10.0-957.27.2.el7.x86_64
kernel-3.10.0-693.21.1.el7.x86_64
kernel-3.10.0-957.5.1.el7.x86_64
kernel-3.10.0-693.el7.x86_64
kernel-3.10.0-693.2.2.el7.x86_64
kernel-ml-5.2.8-1.el7.elrepo.x86_64
kernel-tools-libs-3.10.0-957.27.2.el7.x86_64
kernel-3.10.0-957.27.2.el7.x86_64
kernel-ml-devel-5.2.8-1.el7.elrepo.x86_64
kernel-headers-3.10.0-957.27.2.el7.x86_64

使用yum remove [版本号...版本号]或者rpm -e [版本号...版本号]命令卸载老版本内核(最好是复制内核版本信息,手动输很容易输错)。

 [root@izwz9~]# yum remove kernel-3.10.0-957.5.1.el7.x86_64

注意:强烈建议只卸载自己安装的内核,不要删除原系统的内核。

内核卸载完,也需要重启下系统才能生效。

 [root@izwz9~]# reboot

10、再次验证漏洞

内核升级完过后我们再次验证漏洞时,以前的漏洞已经不复存在了。
内核漏洞被修复

the end

热门文章