Vérifier le nombre de mises à jour de sécurité en attente dans Ubuntu

25

Permettez-moi de commencer en disant qu'il m'a été interdit d'activer les mises à jour automatiques sur nos serveurs Ubuntu, à la fois pour la sécurité et les packages réguliers.

Lorsque je me connecte à l'un de mes quatre serveurs Ubuntu, le message de bienvenue contient ceci:

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

Cependant, lorsque j'exécute le plugin Nagios qui surveille APT, j'obtiens:

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

J'ai besoin de savoir comment détecter correctement les mises à jour de sécurité en attente et les mises à jour régulières. Une fois que je peux le faire, je prévois d'écrire un script Nagios qui renverra WARNING pour les mises à jour régulières en attente, et CRITICAL pour les mises à jour de sécurité en attente.

Quelqu'un sait comment détecter ces deux conditions?

Mak Kolybabi
la source

Réponses:

12

Le plugin Nagios /usr/lib/nagios/plugins/check_aptne détecte pas correctement les mises à jour critiques dans Ubuntu en raison de la façon dont il détecte les mises à jour critiques via aptcombiné avec la façon dont les mises à jour non critiques d'Ubuntu sont publiées. Plus de détails sont dans le bug ici: https://bugs.launchpad.net/bugs/1031680

L'utilisation à la /usr/lib/update-notifier/apt-checkplace est une solution de contournement fiable.

Robie Basak
la source
31

Il s'avère que le nombre de mises à jour régulières en attente peut être trouvé en utilisant:

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

Et le nombre de mises à jour de sécurité en attente peut être trouvé en utilisant:

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

Au final, mon plugin Nagios était le suivant:

#!/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
la source
1

Pourquoi ne pas simplement utiliser la commande apt-get?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Matías
la source
2
Ce hack ne fera pas de distinction fiable entre les mises à jour de sécurité et non liées à la sécurité. Par exemple, sur Ubuntu, les mises à jour de sécurité sont également publiées dans la poche des mises à jour. Si la poche des mises à jour est répertoriée en premier sources.list, votre suggestion entraînera des notifications de mise à jour de sécurité manquantes. apt choisira plutôt de les télécharger à partir de la poche des mises à jour, et donc votre grep les manquera.
Robie Basak
Le problème identifié par @RobieBasak peut être corrigé selon ma réponse sur serverfault.com/a/856769/134053
mc0e
0

Une fois que Nagios a signalé que vous disposiez de mises à jour de sécurité, voici comment obtenir la liste des mises à jour nécessaires.

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

Vous pouvez également utiliser ces commandes canalisées dans wc -l pour vous donner un décompte, mais les réponses ci-dessus sont probablement plus efficaces et appropriées pour un script Nagios.

flickerfly
la source
"-ODir" est-il une faute de frappe?!
Travis van der Font