Проверьте количество ожидающих обновлений безопасности в Ubuntu

25

Позвольте мне начать с того, что мне запретили включать автоматические обновления на наших серверах Ubuntu, как для безопасности, так и для обычных пакетов.

Когда я вхожу в любой из моих четырех серверов Ubuntu, приветственное сообщение содержит это:

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

Однако, когда я запускаю плагин Nagios, который отслеживает APT, я получаю:

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

Мне нужно знать, как правильно определять наличие ожидающих обновлений безопасности и регулярных обновлений. Как только я смогу это сделать, я планирую написать сценарий Nagios, который будет возвращать WARNING для ожидающих регулярных обновлений и CRITICAL для ожидающих обновлений безопасности.

Кто-нибудь знает, как обнаружить эти два состояния?

Мак Колыбаби
источник

Ответы:

12

Плагин Nagios /usr/lib/nagios/plugins/check_aptнеправильно определяет критические обновления в Ubuntu из-за того, как он обнаруживает критические обновления, в aptсочетании с тем, как публикуются некритические обновления Ubuntu. Более подробную информацию можно найти здесь: https://bugs.launchpad.net/bugs/1031680

Использование /usr/lib/update-notifier/apt-checkвместо этого - надежный обходной путь.

Роби Басак
источник
31

Оказывается, что число ожидающих регулярных обновлений может быть найдено с помощью:

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

А количество ожидающих обновлений безопасности можно узнать с помощью:

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

В конце концов, мой плагин Nagios был следующим:

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

Почему бы просто не использовать команду apt-get ?:

apt-get -s dist-upgrade | grep "^Inst" | grep -i security | wc -l
Матиас
источник
2
Этот хак не сможет надежно отличить обновления для системы безопасности и обновления, не связанные с безопасностью. Например, в Ubuntu обновления безопасности также публикуются в кармане обновлений. Если карман обновлений указан первым sources.list, ваше предложение приведет к отсутствию уведомлений об обновлениях безопасности. Вместо этого apt решит загрузить их из кармана обновлений, и ваш grep будет их не замечать.
Роби Басак
Проблема, выявленная @RobieBasak, может быть исправлена ​​в соответствии с моим ответом на serverfault.com/a/856769/134053
mc0e
0

Как только Nagios сообщил, что у вас есть обновления для системы безопасности, вы получите список необходимых обновлений.

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

Вы также можете использовать эти команды, переданные в wc -l, чтобы подсчитать, но приведенные выше ответы, вероятно, более эффективны и подходят для сценария Nagios.

flickerfly
источник
Является ли "-oDir" опечаткой ?!
Трэвис ван дер Фонт