阿里云centos6.5升级内核

啥要踩这个坑

管理的服务器是很早前买的,系统是centos6.5。阿里云的安骑士给报了一堆的漏洞,但是系统内核kernel的漏洞一直修复不成功。修复的方式也很简单,就是升级linux内核。

2、漏洞

阿里云服务器出现如下漏洞

软件: kernel 3.10.0-514.6.2.el7命中: kernel version less than 0:3.10.0-514.16.1.el7软件: kernel 3.10.0-514.6.2.el7命中: kernel version less than 0:3.10.0-514.16.1.el7软件: kernel 3.10.0-514.6.2.el7命中: kernel version less than 0:3.10.0-514.21.1.el7软件: kernel 3.10.0-514.6.2.el7命中: kernel version less than 0:3.10.0-514.10.2.el7

仔细观察,发现是由于kernel的版本过低导致。

执行阿里云生成的修复指令 yum update kernel , 执行完一台服务器报错,一台服务器没有反应。。所以这种方法无效。

3、修复过程

1、首先查看服务器的centos版本

cat /etc/centos-release

2、查看服务器的内核版本

uname -r

发现服务器的内核版本确实比较低。

3、导入public key

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

4、 安装ELRePo到centos-6.5中

这里有个需要注意的是elrepo-release-6-8.el6.elrepo.noarch.rpm这是针对centos6.0+版本的,很多博客写的都是elrepo-release-6-6.el6.elrepo.noarch.rpm。现在6-6的版本已经下载不到,只有6-8的版本是可以下载的,这个版本就是针对centos6.x的

rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

5、安装kernel-lt(lt=long-term)

yum --enablerepo=elrepo-kernel install kernel-lt -y

或者安装kernel-ml(ml=main line)

yum --enablerepo=elrepo-kernel install kernel-ml -y

6、编辑grub.conf,修改grub引导顺序

vim /etc/grub.conf

将default的值修改为我们新安装的内核

7、阿里云的服务器要注意的坑

对于 CentOS,OpenSUSE,SLES (SUSE Linux Enterprise Server) 和 Aliyun Linux,升级 Linux 实例后启动失败,可能是因为升级后的内核对应的 initrd 文件中没有 virtio-blk 和 xen-blkfront 驱动。而 Debian 和 Ubuntu 的 virtio-blk 和 xen-blkfront 驱动是内核内置的,所以不存在这个可能性。

**什么是 initrd 文件 **

initrd(initial ramdisk)是用于载入临时 root 文件系统到磁盘中的,运行于 Linux 实例启动阶段。起同样作用的还有 initramfs 文件,虽然 initrd 和 initramfs 是两种不同的操作概念,但这两个文件都活跃在启动实例时挂载 root 文件系统之前。

可以直接升级内核的系统镜像

阿里云优化了镜像名称 image_no 中时间戳从 20161115 开始的镜像公共系统镜像内核,这些镜像的 initrd 文件不会因为缺失 virtio-blk 和 blkfront 驱动的情况而导致启动失败。如下所示:

  • centos_6u8_64_40G_cloudinit_20161115.vhd
  • centos_6u8_32_40G_cloudinit_20161115.vhd
  • centos_5u11_64_40G_cloudinit_20161115.vhd
  • centos_5u11_32_40G_cloudinit_20161115.vhd
  • centos_6_8_64_40G_base_20170222.vhd
  • centos_6_8_32_40G_base_20170222.vhd
  • centos_7_2_64_40G_base_20170222.vhd
  • centos_5_11_64_40G_base_20170222.vhd
  • centos_5_11_32_40G_base_20170222.vhd
  • centos_6_08_64_20G_alibase_20170824.vhd
  • debian_8_09_64_20G_alibase_20170824.vhd

如何优化内核并避免启动失败

编辑系统配置文件,若配置文件中缺失下列内容需要您手动加上:

  • CentOS 6 和 CentOS 7:执行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=” xen-blkfront virtio_blk “。
  • CentOS 5:执行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=” xen-vbd virtio_blk virtio_console “。
  • OpenSUSE/SUSE:执行 vi /etc/sysconfig/kernel,添加 INITRD_MODULES=” virtio_blk virtio_pci xen-vbd”。
    执行 vi /etc/dracut.conf,添加 add_drivers+=”virtio_blk virtio_pci xen-vbd”。

更新内核:

  • CentOS:执行 yum install kernel。
  • OpenSUSE/SUSE:执行 zypper install kernel-default。

执行命令 lsinitrd /boot/initramfs-$(new-kernel-ver).img | grep -E ‘virtio|xen’ 检查并确认 initrd / initramfs 文件中已经包含了 virtio-blk 和 xen-blkfront 驱动。

必须确认 virtio-blk 和 xen-blkfront 驱动在 initrd 中才可以重启实例。先前就是因为没有注意这个initrd文件直接重启了服务器,然后服务器炸了,只能去阿里云工单去解决,先备份镜像,倒腾了好久才搞定。

8、完成上述步骤以后,重启服务器

reboot

9、重新查看系统内核版本

uname -r

发现系统的内核版本已经升级了

10、删除系统旧的内核版本(可做可不做)

查找系统的所有内核

rpm -qa|grep kernel*

删除低版本的内核

yum remove 低版本内核

等待一天就发现所有系统的内核漏洞都已经被修复了

作者:wymhuster
链接:https://www.jianshu.com/p/d43deae9496b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享