检查 Ubuntu 中待处理的安全更新数量

检查 Ubuntu 中待处理的安全更新数量

首先我要说的是,禁止在我们的 Ubuntu 服务器上启用自动更新,包括安全更新和常规软件包更新。

当我登录我的四台 Ubuntu 服务器中的任何一台时,欢迎消息包含以下内容:

39 packages can be updated.
26 updates are security updates.

但是,当我运行监控 APT 的 Nagios 插件时,我得到:

% /usr/lib/nagios/plugins/check_apt
APT WARNING: 33 packages available for upgrade (0 critical updates). 

我需要知道如何正确检测是否有待处理的安全更新和常规更新。一旦我能做到这一点,我计划编写一个 Nagios 脚本,它将返回警告用于待定的定期更新,以及批判的等待待处理的安全更新。

有人知道如何检测这两种情况吗?

答案1

Nagios 插件/usr/lib/nagios/plugins/check_apt无法正确检测 Ubuntu 中的关键更新,因为它检测关键更新的方​​式apt与 Ubuntu 非关键更新的发布方式相结合。更多详细信息请参见此处的错误:https://bugs.launchpad.net/bugs/1031680

相反,使用/usr/lib/update-notifier/apt-check是一种可靠的解决方法。

答案2

事实证明,待处理的数量定期更新可以使用以下方式找到:

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 1

待处理的数量安全更新可以使用以下方式找到:

/usr/lib/update-notifier/apt-check 2>&1 | cut -d ';' -f 2

最终我的Nagios插件如下:

#!/bin/sh
#
# Standard Nagios plugin return codes.
STATUS_OK=0
STATUS_WARNING=1
STATUS_CRITICAL=2
STATUS_UNKNOWN=3

# Query pending updates.
updates=$(/usr/lib/update-notifier/apt-check 2>&1)
if [ $? -ne 0 ]; then
    echo "Querying pending updates failed."
    exit $STATUS_UNKNOWN
fi

# Check for the case where there are no updates.
if [ "$updates" = "0;0" ]; then
    echo "All packages are up-to-date."
    exit $STATUS_OK
fi

# Check for pending security updates.
pending=$(echo "${updates}" | cut -d ";" -f 2)
if [ "$pending" != "0" ]; then
    echo "${pending} security update(s) pending."
    exit $STATUS_CRITICAL
fi

# Check for pending non-security updates.
pending=$(echo "${updates}" | cut -d ";" -f 1)
if [ "$pending" != "0" ]; then
    echo "${pending} non-security update(s) pending."
    exit $STATUS_WARNING
fi

# If we've gotten here, we did something wrong since our "0;0" check should have
# matched at the very least.
echo "Script failed, manual intervention required."
exit $STATUS_UNKNOWN

答案3

为什么不简单地使用 apt-get 命令?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l

答案4

一旦 Nagios 报告您有安全更新,您就可以获得所需更新的列表。

grep security /etc/apt/sources.list > /tmp/security.list
sudo apt-get upgrade -oDir::Etc::Sourcelist=/tmp/security.list -s

您也可以使用通过管道传输到 wc -l 的这些命令来提供计数,但上述答案可能更高效,也更适合 Nagios 脚本。

相关内容