答案是:通过apt list --upgradable | grep -E 'linux-image-.*generic|security'检查可升级内核包是否来自安全源,并结合uname -r与dpkg -l | grep linux-image比对确认是否已安装且激活。

如何用 cron + apt-listchanges 判断 Ubuntu/Debian 是否有未安装的安全内核补丁
Ubuntu 和 Debian 系统本身不提供“是否有新安全内核补丁”这种直接的布尔接口,但可以通过检查 apt-listchanges 的待显示变更 + apt-get changelog 输出中的 USN-(Ubuntu Security Notice)或 DSA-(Debian Security Advisory)来间接判断。关键不是“有没有补丁”,而是“有没有尚未安装、且标记为安全更新的内核包”。
实操建议:
- 先确认系统使用的是
apt(非dnf/zypper),本方案仅适用于 Debian/Ubuntu 及其衍生版 - 运行
apt list --upgradable 2>/dev/null | grep -E 'linux-image-.*generic|linux-image-.*cloud'获取可升级的内核包名,再过滤是否含security字样(如linux-image-5.15.0-107-generic来自http://security.ubuntu.com源) - 更可靠的做法是检查
/var/lib/apt/lists/*security*ubuntu.com*_Sources文件时间戳是否比/var/lib/apt/lists/*archive.ubuntu.com*_Sources新,说明安全源已更新过,再结合apt list --upgradable结果判断
CentOS/RHEL 8+ 怎么检测 kernel 安全更新(不用 yum update --security)
yum update --security 是交互式命令,不能直接用于脚本判断;且 RHEL 8+ 默认用 dnf,dnf update --advisory=RHSA 才是正确路径。但要注意:RHSA 不一定对应当前运行的 kernel 版本——必须限定只查 kernel 和 kernel-core 包。
实操建议:
- 用
dnf list updates --advisory=RHSA --quiet | grep -E '^kernel(-core)?\.'检查是否有匹配的安全公告更新 - 避免用
dnf updateinfo list security all,它会列出所有历史 RHSA,包含已修复的,误报率高 - 如果系统启用了
dnf-automatic,可检查/var/log/dnf-automatic.log中最近 24 小时是否出现kernel相关安装记录,作为辅助验证
怎么写一个跨发行版的检查脚本并防止重复告警
不同发行版的包管理器输出格式、源配置、安全标识方式完全不同,硬写成一个“通用脚本”反而容易漏判或误报。更实际的做法是分发版分支判断 + 单点精准检查,再用状态文件控制告警频率。
实操建议:
- 用
grep -q "ubuntu" /etc/os-release或grep -q "rhel" /etc/os-release做发行版识别,不要依赖lsb_release(可能未安装) - 每次检查后生成一个时间戳文件,如
/var/run/kernel-security-check.stamp,下次运行前先比对是否超过 6 小时,避免每分钟 cron 都触发 - 告警内容必须包含具体包名和安全公告编号(如
RHSA-2024:1234或USN-6789-1),否则运维无法快速定位是否已处理
为什么 check-update 脚本常漏掉正在运行但未重启的旧内核
所有基于包管理器的检查都只回答“有没有新内核包可装”,不回答“当前运行的内核是否已打补丁”。这是最常被忽略的一环:即使装了新 linux-image,若没重启,漏洞仍在运行态生效。
实操建议:
- 用
uname -r获取当前内核版本,再用dpkg -l | grep linux-image | awk '{print $2}'(Debian)或rpm -q kernel | sed 's/kernel-//'(RHEL)提取已安装版本,做字符串比较 - 如果
uname -r不在已安装内核列表中(比如只装了新包但没 reboot),说明存在“已安装但未激活”的风险,应单独告警 - 不要依赖
/boot/vmlinuz-*文件是否存在来判断——某些云镜像会删掉旧 vmlinuz 以节省空间,但内核仍可启动
真正难的不是发现补丁,而是确认补丁已安装、已激活、且没有因 grub 配置错误导致下次重启回退到旧内核。这些环节里任意一个断掉,监控就失去意义。


















