Überprüfen Sie die Anzahl der ausstehenden Sicherheitsupdates in Ubuntu

25

Lassen Sie mich zunächst sagen, dass es mir verboten war , automatische Updates auf unseren Ubuntu-Servern zu aktivieren, sowohl für Sicherheitszwecke als auch für reguläre Pakete.

Wenn ich mich bei einem meiner vier Ubuntu-Server anmelde, enthält die Willkommensnachricht Folgendes:

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

Wenn ich jedoch das Nagios-Plugin ausführe, das APT überwacht, erhalte ich Folgendes:

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

Ich muss wissen, wie ich ausstehende Sicherheitsupdates und regelmäßige Updates richtig erkennen kann. Sobald ich das kann, plane ich, ein Nagios-Skript zu schreiben, das WARNING für ausstehende regelmäßige Updates und CRITICAL für ausstehende Sicherheitsupdates zurückgibt.

Weiß jemand, wie man diese beiden Zustände erkennt?

Mak Kolybabi
quelle

Antworten:

12

Das Nagios-Plugin /usr/lib/nagios/plugins/check_apterkennt wichtige Updates in Ubuntu nicht korrekt, da es wichtige Updates über in aptKombination mit der Art und Weise erkennt, in der unkritische Updates in Ubuntu veröffentlicht werden. Weitere Details finden Sie im Bug hier: https://bugs.launchpad.net/bugs/1031680

Verwenden von /usr/lib/update-notifier/apt-checkstattdessen ist eine zuverlässige Problemumgehung.

Robie Basak
quelle
31

Es stellt sich heraus, dass die Anzahl der ausstehenden regelmäßigen Aktualisierungen wie folgt ermittelt werden kann:

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

Die Anzahl der ausstehenden Sicherheitsupdates kann wie folgt ermittelt werden:

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

Am Ende war mein Nagios-Plugin wie folgt:

#!/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
Mak Kolybabi
quelle
1

Warum nicht einfach den Befehl apt-get verwenden ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Matías
quelle
2
Dieser Hack unterscheidet nicht zuverlässig zwischen Sicherheits- und Nicht-Sicherheits-Updates. Unter Ubuntu werden beispielsweise Sicherheitsupdates auch in der Update-Tasche veröffentlicht. Wenn das Update-Fach an erster Stelle steht sources.list, führt Ihr Vorschlag dazu, dass Benachrichtigungen zu Sicherheitsupdates fehlen. apt lädt sie stattdessen aus der Update-Tasche herunter, sodass Ihr grep sie vermisst.
Robie Basak
Das von @RobieBasak identifizierte Problem kann gemäß meiner Antwort unter serverfault.com/a/856769/134053
mc0e
0

Sobald Nagios gemeldet hat, dass Sie Sicherheitsupdates haben, erhalten Sie auf diese Weise eine Liste der benötigten Updates.

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

Sie können auch diese Befehle verwenden, die an wc -l übergeben werden, um eine Zählung durchzuführen. Die obigen Antworten sind jedoch wahrscheinlich effizienter und für ein Nagios-Skript geeignet.

Flackerfliege
quelle
Ist "-oDir" ein Tippfehler?!
Travis van der Font