當前位置: 首頁>>技術教程>>正文


linux – 檢查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腳本,該腳本將對掛起的常規更新返回警告,而對於掛起的安全更新則返回CRITICAL。

有人知道如何檢測這兩個條件嗎?

最佳答案

Nagios插件/usr/lib/nagios/plugins/check_apt無法正確檢測Ubuntu中的關鍵更新,這是因為它通過apt檢測到關鍵更新的方​​式以及Ubuntu非關鍵更新的發布方式。更多詳細信息在以下錯誤中:https://bugs.launchpad.net/bugs/1031680

改用/usr/lib/update-notifier/apt-check是一種可靠的解決方法。

次佳答案

事實證明,可以使用以下方法找到暫掛的常規更新數量:

/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

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/10620.html,未經允許,請勿轉載。