Sprawdź liczbę oczekujących aktualizacji zabezpieczeń w systemie Ubuntu

25

Zacznę od stwierdzenia, że ​​nie wolno mi włączać automatycznych aktualizacji na naszych serwerach Ubuntu, zarówno dla bezpieczeństwa, jak i zwykłych pakietów.

Kiedy loguję się na jednym z moich czterech serwerów Ubuntu, wiadomość powitalna zawiera:

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

Jednak po uruchomieniu wtyczki Nagios, która monitoruje APT, otrzymuję:

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

Muszę wiedzieć, jak prawidłowo wykryć, że istnieją oczekujące aktualizacje zabezpieczeń i regularne aktualizacje. Gdy to zrobię, planuję napisać skrypt Nagios, który zwróci OSTRZEŻENIE w oczekiwaniu na regularne aktualizacje oraz KRYTYCZNE w oczekiwaniu na aktualizacje bezpieczeństwa.

Czy ktoś wie, jak wykryć te dwa warunki?

Mak Kolybabi
źródło

Odpowiedzi:

12

Wtyczka Nagios /usr/lib/nagios/plugins/check_aptnie wykrywa poprawnie aktualizacji krytycznych w Ubuntu, ponieważ wykrywa aktualizacje krytyczne w aptpołączeniu z publikowaniem niekrytycznych aktualizacji Ubuntu. Więcej szczegółów znajduje się w błędzie tutaj: https://bugs.launchpad.net/bugs/1031680

Używanie /usr/lib/update-notifier/apt-checkzamiast tego jest niezawodnym obejściem.

Robie Basak
źródło
31

Okazuje się, że liczbę oczekujących regularnych aktualizacji można znaleźć za pomocą:

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

Liczbę oczekujących aktualizacji zabezpieczeń można znaleźć za pomocą:

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

Ostatecznie moja wtyczka Nagios wyglądała następująco:

#!/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
źródło
1

Dlaczego po prostu nie użyć polecenia apt-get ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Matías
źródło
2
Ten hack nie rozróżni niezawodnie między aktualizacjami zabezpieczeń i niezwiązanymi z zabezpieczeniami. Na przykład w systemie Ubuntu aktualizacje zabezpieczeń są również publikowane w kieszeni aktualizacji. Jeśli kieszeń z aktualizacjami jest wymieniona jako pierwsza w sources.list, sugestia doprowadzi do braku powiadomień o aktualizacjach zabezpieczeń. apt zdecyduje się pobrać je z kieszeni aktualizacji, więc twój grep będzie za nimi tęsknił.
Robie Basak
Problem zidentyfikowany przez @RobieBasak można rozwiązać zgodnie z moją odpowiedzią na serverfault.com/a/856769/134053
mc0e
0

Gdy Nagios zgłosi, że masz aktualizacje zabezpieczeń, w ten sposób otrzymujesz listę tych, które są potrzebne.

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

Możesz również użyć tych poleceń potokowanych do wc -l, aby uzyskać liczbę, ale powyższe odpowiedzi są prawdopodobnie bardziej wydajne i odpowiednie dla skryptu Nagios.

Flickerfly
źródło
Czy „-oDir” to literówka?
Travis van der Font