1盾计、為啥要踩這個坑
管理的服務器是很早前買的搞糕,系統(tǒng)是centos6.5钙皮。阿里云的安騎士給報了一堆的漏洞蜂科,但是系統(tǒng)內(nèi)核kernel的漏洞一直修復不成功。修復的方式也很簡單短条,就是升級linux內(nèi)核导匣。
2、漏洞
阿里云服務器出現(xiàn)如下漏洞
軟件: 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
仔細觀察茸时,發(fā)現(xiàn)是由于kernel的版本過低導致贡定。
執(zhí)行阿里云生成的修復指令 yum update kernel , 執(zhí)行完一臺服務器報錯,一臺服務器沒有反應可都。缓待。所以這種方法無效蚓耽。
3、修復過程
1旋炒、首先查看服務器的centos版本
cat /etc/centos-release
2步悠、查看服務器的內(nèi)核版本
uname -r
發(fā)現(xiàn)服務器的內(nèi)核版本確實比較低。
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∠吵現(xiàn)在6-6的版本已經(jīng)下載不到谚咬,只有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的值修改為我們新安裝的內(nèi)核
7背苦、阿里云的服務器要注意的坑
對于 CentOS,OpenSUSE潘明,SLES (SUSE Linux Enterprise Server) 和 Aliyun Linux行剂,升級 Linux 實例后啟動失敗,可能是因為升級后的內(nèi)核對應的 initrd 文件中沒有 virtio-blk 和 xen-blkfront 驅動钳降。而 Debian 和 Ubuntu 的 virtio-blk 和 xen-blkfront 驅動是內(nèi)核內(nèi)置的厚宰,所以不存在這個可能性。
**什么是 initrd 文件 **
initrd(initial ramdisk)是用于載入臨時 root 文件系統(tǒng)到磁盤中的遂填,運行于 Linux 實例啟動階段铲觉。起同樣作用的還有 initramfs 文件,雖然 initrd 和 initramfs 是兩種不同的操作概念吓坚,但這兩個文件都活躍在啟動實例時掛載 root 文件系統(tǒng)之前撵幽。
可以直接升級內(nèi)核的系統(tǒng)鏡像
阿里云優(yōu)化了鏡像名稱 image_no 中時間戳從 20161115 開始的鏡像公共系統(tǒng)鏡像內(nèi)核,這些鏡像的 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
如何優(yōu)化內(nèi)核并避免啟動失敗
編輯系統(tǒng)配置文件盐杂,若配置文件中缺失下列內(nèi)容需要您手動加上:
- CentOS 6 和 CentOS 7:執(zhí)行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=" xen-blkfront virtio_blk "哆窿。
- CentOS 5:執(zhí)行 vi /etc/dracut.conf.d/virt-drivers.conf链烈,添加 add_drivers+=" xen-vbd virtio_blk virtio_console "。
- OpenSUSE/SUSE:執(zhí)行 vi /etc/sysconfig/kernel挚躯,添加 INITRD_MODULES=" virtio_blk virtio_pci xen-vbd"强衡。
執(zhí)行 vi /etc/dracut.conf,添加 add_drivers+="virtio_blk virtio_pci xen-vbd"码荔。
更新內(nèi)核:
- CentOS:執(zhí)行 yum install kernel漩勤。
- OpenSUSE/SUSE:執(zhí)行 zypper install kernel-default感挥。
執(zhí)行命令 lsinitrd /boot/initramfs-$(new-kernel-ver).img | grep -E 'virtio|xen' 檢查并確認 initrd / initramfs 文件中已經(jīng)包含了 virtio-blk 和 xen-blkfront 驅動。
必須確認 virtio-blk 和 xen-blkfront 驅動在 initrd 中才可以重啟實例锯七。先前就是因為沒有注意這個initrd文件直接重啟了服務器链快,然后服務器炸了,只能去阿里云工單去解決眉尸,先備份鏡像域蜗,倒騰了好久才搞定。'
8噪猾、完成上述步驟以后霉祸,重啟服務器
reboot
9、重新查看系統(tǒng)內(nèi)核版本
uname -r
發(fā)現(xiàn)系統(tǒng)的內(nèi)核版本已經(jīng)升級了
10袱蜡、刪除系統(tǒng)舊的內(nèi)核版本(可做可不做)
查找系統(tǒng)的所有內(nèi)核
rpm -qa|grep kernel*
刪除低版本的內(nèi)核
yum remove 低版本內(nèi)核
等待一天就發(fā)現(xiàn)所有系統(tǒng)的內(nèi)核漏洞都已經(jīng)被修復了