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

yum无可用更新时是否记录检查日志?如何将yum-cron检查事件导入SIEM?

解决yum-cron检查更新无日志的SIEM导入方案

我之前处理过类似的审计合规需求,默认yum的行为确实让人头疼——只有实际执行更新/安装时才会写入/var/log/yum.log,单纯检查无可用更新时完全没记录,而审计方不认cron日志(只证明任务跑了,没法证明检查动作的结果)。下面是我用过的可靠解决方案:

1. 编写自定义日志记录脚本

先写一个shell脚本,替代或补充yum-cron的检查逻辑,强制记录每次检查的结果(不管有没有更新)。脚本会捕获yum check-update的返回码和输出,生成包含时间戳、主机名的结构化日志,方便SIEM解析。

创建脚本文件/usr/local/bin/yum-check-update-log.sh:

#!/bin/bash
# 自定义yum更新检查日志脚本 - 满足SIEM审计需求
LOG_FILE="/var/log/yum-check-update.log"
# 生成标准化时间戳,适配SIEM解析
TIMESTAMP=$(date "+%Y-%m-%dT%H:%M:%S%z")
HOSTNAME=$(hostname -f)

# 执行yum检查,捕获所有输出(包括错误)
UPDATE_OUTPUT=$(yum check-update 2>&1)
EXIT_CODE=$?

# 根据yum返回码判断检查结果
case $EXIT_CODE in
    0)
        # 返回0:无可用更新
        LOG_ENTRY="[$TIMESTAMP] [$HOSTNAME] YUM_CHECK_UPDATE: STATUS=NO_UPDATES"
        ;;
    100)
        # 返回100:有可用更新,附加输出内容
        LOG_ENTRY="[$TIMESTAMP] [$HOSTNAME] YUM_CHECK_UPDATE: STATUS=UPDATES_AVAILABLE OUTPUT=\"$UPDATE_OUTPUT\""
        ;;
    *)
        # 其他返回码:检查出错,记录错误信息
        LOG_ENTRY="[$TIMESTAMP] [$HOSTNAME] YUM_CHECK_UPDATE: STATUS=ERROR EXIT_CODE=$EXIT_CODE OUTPUT=\"$UPDATE_OUTPUT\""
        ;;
esac

# 写入日志文件,确保权限安全
echo "$LOG_ENTRY" >> "$LOG_FILE"
chmod 0640 "$LOG_FILE"

给脚本添加执行权限:

chmod +x /usr/local/bin/yum-check-update-log.sh

2. 替换yum-cron的定时任务

默认yum-cron的检查任务通常在/etc/cron.d/yum-cron或/etc/crontab里,我们需要把原来的检查命令替换成这个自定义脚本,确保每次检查都生成日志。

编辑crontab(用crontab -e以root身份编辑),添加或替换成:

# 每天凌晨2点执行yum更新检查并记录日志
0 2 * * * root /usr/local/bin/yum-check-update-log.sh

如果还需要保留yum-cron的自动下载/安装功能,可以调整/etc/yum/yum-cron.conf里的配置,同时保留这个检查日志脚本的定时任务——两者不冲突。

3. 配置日志轮转

避免日志文件无限增长,给自定义日志配置logrotate:

创建/etc/logrotate.d/yum-check-update文件:

/var/log/yum-check-update.log {
    daily
    rotate 90  # 保留90天的日志,按需调整
    compress
    missingok
    notifempty
    create 0640 root root
    postrotate
        # 如果用syslog转发,这里可以重启syslog服务,可选
        # systemctl reload rsyslog.service
    endscript
}

4. 配置SIEM采集

把/var/log/yum-check-update.log添加到你的SIEM采集配置中:

  • 如果是Splunk:创建一个文件监控输入,指向这个日志路径,配置对应的 sourcetype
  • 如果是ELK Stack:用Filebeat添加这个日志的采集规则,将数据发送到Logstash或直接到Elasticsearch
  • 其他SIEM:参照官方文档,添加该日志文件的数据源,确保能解析时间戳、主机名、状态等字段

测试验证

手动执行脚本,检查日志是否生成:

/usr/local/bin/yum-check-update-log.sh
cat /var/log/yum-check-update.log

你会看到类似这样的日志条目:

[2024-05-20T14:30:00+0800] [server01.example.com] YUM_CHECK_UPDATE: STATUS=NO_UPDATES

或者有更新时的条目:

[2024-05-20T14:32:00+0800] [server01.example.com] YUM_CHECK_UPDATE: STATUS=UPDATES_AVAILABLE OUTPUT="kernel.x86_64 3.10.0-1160.11.1.el7 updates"

这样审计方就能明确看到每次yum检查的执行时间、结果,完全满足合规要求。

内容的提问来源于stack exchange,提问作者Greg Applebee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:35:00