Перевірте кількість очікуваних оновлень безпеки в 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, який повертає ПОПЕРЕДЖЕННЯ для очікування регулярних оновлень, а КРИТИЧНИЙ для очікує оновлення безпеки.

Хтось знає, як виявити ці дві умови?

Відповіді:


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 вирішить замість цього завантажити їх з кишені оновлень, і ваша помилка не вистачить.
Робі Басак

Проблему, визначену @RobieBasak, можна виправити відповідно до моєї відповіді на сервері defaultfault.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.


Це "-oDir", помилка друку ?!
Травіс ван дер Шрифт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.