Verifique el número de actualizaciones de seguridad pendientes en Ubuntu

25

Permítanme comenzar diciendo que se me ha prohibido habilitar actualizaciones automáticas en nuestros servidores Ubuntu, tanto para la seguridad como para los paquetes regulares.

Cuando inicio sesión en cualquiera de mis cuatro servidores Ubuntu, el mensaje de bienvenida contiene esto:

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

Sin embargo, cuando ejecuto el complemento Nagios que monitorea APT, obtengo:

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

Necesito saber cómo detectar correctamente que hay actualizaciones de seguridad pendientes y actualizaciones periódicas. Una vez que pueda hacer eso, planeo escribir un script de Nagios que devolverá WARNING para actualizaciones regulares pendientes y CRÍTICO para actualizaciones de seguridad pendientes.

¿Alguien sabe cómo detectar esas dos condiciones?

Mak Kolybabi
fuente

Respuestas:

12

El complemento Nagios /usr/lib/nagios/plugins/check_aptno detecta las actualizaciones críticas en Ubuntu correctamente debido a cómo detecta las actualizaciones críticas en aptcombinación con la forma en que se publican las actualizaciones no críticas de Ubuntu. Más detalles están en el error aquí: https://bugs.launchpad.net/bugs/1031680

En /usr/lib/update-notifier/apt-checkcambio, usar es una solución confiable.

Robie Basak
fuente
31

Resulta que el número de actualizaciones regulares pendientes se puede encontrar usando:

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

Y la cantidad de actualizaciones de seguridad pendientes se puede encontrar usando:

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

Al final, mi complemento Nagios fue el siguiente:

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

¿Por qué no simplemente usar el comando apt-get ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Matías
fuente
2
Este truco no distinguirá de manera confiable entre actualizaciones de seguridad y no relacionadas con la seguridad. Por ejemplo, en Ubuntu, las actualizaciones de seguridad también se publican en el bolsillo de actualizaciones. Si el bolsillo de actualizaciones aparece en primer lugar sources.list, su sugerencia dará lugar a la falta de notificaciones de actualizaciones de seguridad. apt elegirá descargarlos del bolsillo de actualizaciones, por lo que su grep los perderá.
Robie Basak
El problema identificado por @RobieBasak puede corregirse según mi respuesta en serverfault.com/a/856769/134053
mc0e
0

Una vez que Nagios ha informado que tiene actualizaciones de seguridad, así es como obtiene una lista de cuáles son necesarias.

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

También podría usar estos comandos canalizados en wc -l para darle un recuento, pero las respuestas anteriores son probablemente más eficientes y apropiadas para un script de Nagios.

flickerfly
fuente
¿Es "-oDir" un error tipográfico?
Travis van der Font