Controlla il numero di aggiornamenti di sicurezza in sospeso su Ubuntu


25

Vorrei iniziare dicendo che mi è stato vietato abilitare gli aggiornamenti automatici sui nostri server Ubuntu, sia per la sicurezza che per i pacchetti regolari.

Quando accedo a uno dei miei quattro server Ubuntu, il messaggio di benvenuto contiene questo:

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

Tuttavia, quando eseguo il plug-in Nagios che monitora APT, ottengo:

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

Devo sapere come rilevare correttamente che ci sono aggiornamenti di sicurezza in sospeso e aggiornamenti regolari. Una volta che posso farlo, ho intenzione di scrivere uno script Nagios che restituirà AVVISO per gli aggiornamenti regolari in sospeso e CRITICO per gli aggiornamenti di sicurezza in sospeso.

Qualcuno sa come rilevare queste due condizioni?

Risposte:


12

Il plug-in Nagios /usr/lib/nagios/plugins/check_aptnon rileva correttamente gli aggiornamenti critici in Ubuntu a causa del modo in cui rileva gli aggiornamenti critici in aptcombinazione con la modalità di pubblicazione degli aggiornamenti non critici di Ubuntu. Maggiori dettagli sono nel bug qui: https://bugs.launchpad.net/bugs/1031680

Usare /usr/lib/update-notifier/apt-checkinvece è una soluzione affidabile.


31

Si scopre che il numero di aggiornamenti regolari in sospeso può essere trovato usando:

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

E il numero di aggiornamenti di sicurezza in sospeso può essere trovato usando:

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

Alla fine, il mio plugin Nagios era il seguente:

#!/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

1

Perché non usare semplicemente il comando apt-get ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l

2
Questo hack non distinguerà in modo affidabile tra aggiornamenti di sicurezza e non di sicurezza. Ad esempio, su Ubuntu, gli aggiornamenti di sicurezza sono pubblicati anche nella tasca degli aggiornamenti. Se la tasca degli aggiornamenti è elencata per prima in sources.list, il tuo suggerimento comporterà la mancata notifica degli aggiornamenti di sicurezza. apt sceglierà invece di scaricarli dalla tasca degli aggiornamenti, e quindi il tuo grep li mancherà.
Robie Basak il

Il problema identificato da @RobieBasak può essere corretto secondo la mia risposta su serverfault.com/a/856769/134053
mc0e

0

Una volta che Nagios ha segnalato che hai aggiornamenti di sicurezza, ecco come ottenere un elenco di quelli necessari.

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

Puoi anche usare questi comandi reindirizzati in wc -l per darti un conteggio, ma le risposte sopra sono probabilmente più efficienti e appropriate per uno script Nagios.


"-ODir" è un errore di battitura ?!
Travis van der Font,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.