如何移除存在安全漏洞的旧内核?
如何移除存在安全漏洞的旧内核?
首先得说,默认的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
相关产品推荐
相关产品推荐

