You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除存在安全漏洞的旧内核?

如何移除存在安全漏洞的旧内核?

首先得说,默认的package-cleanup确实没有你想要的--security参数来直接筛选有漏洞的旧内核,我之前也找过类似的工具,确实没现成的。不过可以通过手动结合扫描结果,或者写个简单脚本的方式来实现需求,下面给你几种可行的方案:

1. 手动匹配扫描结果移除

先从你的扫描工具(Qualsys、Sentinel这些)里导出有漏洞的内核版本列表,然后:

  • 先确认当前正在运行的内核(千万别误删!):
    uname -r
    
  • 然后用yum remove(新系统可以用dnf remove)逐个移除有漏洞的旧内核,比如:
    yum remove kernel-<漏洞版本号>
    
    记得替换成实际的版本号,一定要避开当前正在运行的那个版本。

2. 写个简单脚本自动化处理

如果经常需要做这个操作,自己写个小bash脚本就能搞定核心逻辑:先获取当前内核版本,再找出所有已安装的内核,结合yum的安全更新信息匹配有漏洞的版本,最后自动移除。给你个参考示例:

#!/bin/bash
# 刷新yum安全信息,确保漏洞数据是最新的
yum updateinfo > /dev/null 2>&1

# 获取当前运行的内核主版本
current_kernel=$(uname -r | cut -d'-' -f1)
# 列出所有已安装的基础内核包(排除-devel、-headers等衍生包)
installed_kernels=$(rpm -qa kernel | sort | sed 's/^kernel-//')
# 提取有安全漏洞的内核版本
vulnerable_kernels=$(yum updateinfo list sec | grep -E 'kernel' | awk '{print $3}' | sed 's/^kernel-//')

# 遍历检查并移除符合条件的内核
for kernel in $installed_kernels; do
    # 跳过当前运行的内核,只处理旧的且有漏洞的版本
    if [ "$kernel" != "$current_kernel" ] && echo "$vulnerable_kernels" | grep -q "$kernel"; then
        echo "准备移除存在漏洞的旧内核:kernel-$kernel"
        # 建议先去掉-y参数测试输出,确认没问题后再加上自动确认
        yum remove -y kernel-$kernel
    fi
done

脚本注意事项:

  • 测试优先:先去掉yum remove后的-y,看看要删除的版本是否正确,避免误操作;
  • 适配发行版:CentOS 8及以上版本可以把yum换成dnf;
  • 定期更新:脚本开头的yum updateinfo步骤很重要,确保漏洞信息是最新的。

3. 权衡:是否值得花精力做?

正如你说的,旧内核被利用的概率确实不高,但架不住扫描工具一直报告警,而且你自己也从来没回滚过内核。其实退一步说,哪怕不专门筛选漏洞版本,定期用package-cleanup --oldkernels --count=2保留最近2个内核版本,也能大幅减少旧内核带来的漏洞风险——毕竟最新的几个内核一般是打过补丁的,旧的那些才容易积累漏洞。这样既保留了回滚的余地,又不用纠结筛选漏洞的问题,维护成本更低。

另外补充下,yum update --security只会更新有漏洞的包,但不会自动清理旧内核,所以清理操作还是得单独做。

备注:内容来源于stack exchange,提问作者Geoffrey Wiseman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:19:35