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


25

首先,我要禁止我在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脚本,该脚本将对挂起的常规更新返回警告,而对于挂起的安全更新则返回CRITICAL

有人知道如何检测这两个条件吗?

Answers:


12

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

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


31

事实证明,可以使用以下方法找到暂挂的常规更新数量:

/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

1

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

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

2
此hack无法可靠地区分安全更新和非安全更新。例如,在Ubuntu上,安全更新也会发布到更新包中。如果更新口袋列在中的第一位sources.list,则您的建议将导致缺少安全更新通知。apt会选择从更新包中下载它们,因此您的grep会错过它们。
罗宾Basak


0

在Nagios报告您有安全更新后,这就是您获取所需列表的方式。

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

您也可以使用传递到wc -l的这些命令来计数,但是上面的答案可能更有效并且更适合Nagios脚本。


“ -oDir”是错字吗?
Travis van der Font
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.