方法1:在线升级Linux内核版本
####以下是在centos7.9环境进行测试:
1、更新yum源,具体版本可以去https://elrepo.org/linux/kernel/el7/x86_64/RPMS/ 这里找
yum -y update
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
2、使用最新的内核
查询kernet版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-ml -y
--enablerepo 选项开启 CentOS 系统上的指定仓库。默认开启的是 elrepo,这里用 elrepo-kernel 替换
3、设置 grub2 重启生效
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.10.7-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-1160.11.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-693.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-df90baaeef85440fac1251df1c0e0371) 7 (Core)
grub2-set-default 0
vi /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=0 #改为0
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
5、生成grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
6、重启reboot
7、验证
# uname -r
5.10.7-1.el7.elrepo.x86_64
# rpm -qa | grep kernel
kernel-3.10.0-693.el7.x86_64
kernel-ml-5.10.7-1.el7.elrepo.x86_64
kernel-tools-libs-3.10.0-1160.11.1.el7.x86_64
kernel-3.10.0-1160.11.1.el7.x86_64
kernel-headers-3.10.0-1160.11.1.el7.x86_64
kernel-tools-3.10.0-1160.11.1.el7.x86_64
8、删除多余的内核
yum remove kernel-3.10.0-514.el7.x86_64 \
kernel-tools-libs-3.10.0-862.11.6.el7.x86_64 \
kernel-tools-3.10.0-862.11.6.el7.x86_64 \
kernel-3.10.0-862.11.6.el7.x86_64
方法二:阻止加载受影响的 netfilter (nf_tables) 内核模块
1、查询是否被加载:lsmod | grep nf_tables
2、修改 /etc/modprobe.d/blacklist.conf或在/etc/modprobe.d/目录下创建<模块名>.conf文件
我这里创建了一个名为nf_tables-blacklist.conf
vi /etc/modprobe.d/nf_tables-blacklist.conf
内容是:
blacklist nf_tables
3、重启服务器reboot
4、查询netfilter (nf_tables)内核模块位置
find / name | grep nf_tables
5、测试加载模块
加载该模块:insmod nf_tables.ko.xz 报错,发现无法加载,修复完成。
# insmod nf_tables.ko.xz
方法三:容器内系统禁用方法
如果无法禁用 nf_tables 内核模块,在系统上没有运行任何容器的情况下,可以通过禁用用户命名空间来缓解漏洞。在禁用之前,需要仔细评估并确认禁用所带来的影响,
例如:许多容器实现需要使用 user_namespaces 来增强安全性和隔离性。
RedHat/CentOS:
# echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf
# sysctl -p /etc/sysctl.d/userns.conf
Debian/Ubuntu:
如果不需要,可禁用非特权用户创建命名空间的能力。临时禁用执行以下命令:
# sudo sysctl -w kernel.unprivileged_userns_clone=0
重启后仍然禁用:
# echo kernel.unprivileged_userns_clone=0 | sudo tee /etc/sysctl.d/99-disable-unpriv-userns.conf
执行CVE-2024-1086内核漏洞升级包后重启出现黑屏的问题,可能是由于多种原因导致的,包括但不限于升级包不完整、系统兼容性问题、驱动不兼容或配置错误等。针对这种情况,以下是一些可能的解决步骤:
### 1. 检查升级包和安装过程
确认升级包来源:确保下载的CVE-2024-1086内核升级包来自官方或可信赖的源,以避免因升级包本身问题导致的黑屏。
验证升级包完整性:使用如MD5、SHA-1等哈希算法验证升级包的完整性,确保在下载和传输过程中没有被篡改。
查看安装日志:检查升级过程中的日志文件,查找可能的错误或警告信息,这些信息可能有助于诊断问题。
### 2. 尝试恢复系统
使用旧内核启动:如果系统支持多内核启动,尝试使用旧版本的内核启动系统,这可以临时绕过新内核可能存在的问题。
回滚升级:如果可能,将系统回滚到升级前的状态,以排除新内核引起的问题。
### 3. 检查硬件和驱动
检查硬件兼容性:确认系统硬件与新内核的兼容性,特别是显卡和其他重要硬件的驱动是否支持新内核。
更新或回退驱动:如果怀疑是驱动问题导致的黑屏,尝试更新或回退相关驱动到与新内核兼容的版本。
### 4. 寻求帮助
查看官方文档和社区:访问Linux发行版的官方文档或社区论坛,查找是否有其他用户遇到类似问题以及解决方案。
联系技术支持:如果问题依然无法解决,考虑联系Linux发行版的技术支持或硬件制造商的技术支持。
### 5. 预防措施
备份重要数据:在进行系统升级前,务必备份重要数据,以防万一出现不可预见的问题导致数据丢失。
逐步测试:如果可能,在测试环境中先进行内核升级测试,确认无误后再在生产环境中执行。
### 6. 注意事项
避免在关键时刻升级:尽量在系统负载较低、没有紧急任务的情况下进行内核升级,以减少潜在的风险。
* 关注安全更新:定期关注Linux发行版的安全更新,及时修复已知漏洞,提高系统安全性。
总之,执行CVE-2024-1086内核漏洞升级包后重启出现黑屏是一个需要仔细排查和解决的问题。通过上述步骤,可以逐步缩小问题范围,找到并解决问题。
添加我为好友,拉您入交流群!
请使用微信扫一扫!