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

20354
Mak Kolybabi

Позвольте мне начать с того, что мне запретили включать автоматические обновления на наших серверах 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 для ожидающих обновлений безопасности.

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

25

4 ответа на вопрос

31
Mak Kolybabi

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

/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 "$" | cut -d ";" -f 2) if [ "$pending" != "0" ]; then echo "$ security update(s) pending." exit $STATUS_CRITICAL fi  # Check for pending non-security updates. pending=$(echo "$" | cut -d ";" -f 1) if [ "$pending" != "0" ]; then echo "$ 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 
12
Robie Basak

The Nagios plugin /usr/lib/nagios/plugins/check_apt does not detect critical updates in Ubuntu correctly due how it detects critical updates via apt combined with how Ubuntu non-critical updates are published. More details are in the bug here: https://bugs.launchpad.net/bugs/1031680

Using /usr/lib/update-notifier/apt-check instead is a reliable workaround.

0
Matías

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

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

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

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

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

Является ли "-oDir" опечаткой ?! tfont 7 лет назад 0