Verifique o número de atualizações de segurança pendentes no Ubuntu

25

Deixe-me começar dizendo que fui proibido para ativar as atualizações automáticas em nossos servidores Ubuntu, tanto para segurança quanto para pacotes regulares.

Quando eu faço login em qualquer um dos meus quatro servidores Ubuntu, a mensagem de boas vindas contém isto:

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

No entanto, quando eu executo o plugin Nagios que monitora o APT, eu recebo:

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

Eu preciso saber como detectar corretamente se há atualizações de segurança pendentes e atualizações regulares. Depois disso, planejo escrever um script do Nagios que retornará WARNING para atualizações regulares pendentes e CRITICAL para atualizações de segurança pendentes.

Alguém sabe como detectar essas duas condições?

    
por Mak Kolybabi 15.10.2010 / 19:16

4 respostas

12

O plugin /usr/lib/nagios/plugins/check_apt do Nagios não detecta corretamente atualizações críticas no Ubuntu, pois detecta atualizações críticas via apt , combinadas com a forma como as atualizações não críticas do Ubuntu são publicadas. Mais detalhes estão no bug aqui: link

Usar /usr/lib/update-notifier/apt-check é uma solução confiável.

    
por 01.08.2012 / 14:48
31

Acontece que o número de atualizações regulares pendentes pode ser encontrado usando:

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

E o número de atualizações de segurança pendentes pode ser encontrado usando:

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

No final, meu plugin Nagios foi o seguinte:

#!/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
    
por 15.10.2010 / 19:42
0

Por que não usar simplesmente o comando apt-get?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
    
por 25.11.2014 / 13:06
0

Uma vez que o Nagios informou que você tem atualizações de segurança, é assim que você obtém uma lista de quais são necessárias.

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

Você também pode usar esses comandos canalizados para wc -l para dar uma contagem, mas as respostas acima são provavelmente mais eficientes e apropriadas para um script do Nagios.

    
por 04.11.2016 / 22:16