web-dev-qa-db-fra.com

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

Permettez-moi de commencer par dire que j'ai été interdit Pour activer les mises à jour automatiques sur nos serveurs Ubuntu, pour les packages de sécurité et 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, je reçois:

% /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 qu'il existe des mises à jour de sécurité en attente et des mises à jour régulières. Une fois que je peux faire cela, je prévois d'écrire un script Nagios qui retournera [~ # ~ # ~ ~] Pour en attente de mises à jour régulières et [~ # ~ # ~] critique [~ # ~] pour en attente de mises à jour de sécurité.

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

25
Mak Kolybabi

Le plugin nagios /usr/lib/nagios/plugins/check_apt Ne détecte pas les mises à jour critiques à Ubuntu correctement dus à la manière dont il détecte les mises à jour critiques via apt combinée à la publication des mises à jour non critiques Ubuntu. Plus de détails sont dans le bogue ici: https://bugs.launchpad.net/bugs/103168

En utilisant /usr/lib/update-notifier/apt-check Au lieu de cela, c'est une solution de contournement fiable.

12
Robie Basak

Il est possible que le nombre de pendants mises à jour régulières peut être trouvée en utilisant:

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

Et le nombre d'attentes mises à jour de sécurité peut être trouvée en utilisant:

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

En fin de compte, mon plugin Nagios était comme suit:

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

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

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
1
Matías

Une fois que Nagios a signalé que vous avez des mises à jour de sécurité, c'est ainsi que vous obtenez une liste desquelles sont 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 de ces commandes dans WC -L pour vous donner un compte, mais les réponses ci-dessus sont probablement plus efficaces et appropriées pour un script Nagios.

0
flickerfly