Наскільки терміновим є необхідний перезапуск *** системи для безпеки?


56

Щоб дізнатися трохи про адміністрування сервера, я створив простий сервер Ubuntu 14.04, на якому я запускаю персональний веб-сайт. Я встановив його для автоматичного встановлення оновлень безпеки, але інші оновлення не залишаю. Це, здається, працює досить добре. Іноді я отримую повідомлення під час входу на сервер (з ssh) із зазначенням:

*** System restart required ***

Коли це сталося, я перезавантажував Ubuntu і все було добре. Це нормально, оскільки це простий особистий веб-сайт. Що мені цікаво, однак, як це працює для веб-серверів, які повинні становити 99,9999etc% часу? Вони просто не перезапускаються і ризикують порушити безпеку, оскільки оновлення безпеки не встановлені (що я не уявляю)? Або вони сприймають простої як належне (чого я теж не уявляю)?

Як мені впоратися з цим, якщо це був дуже важливий виробничий сервер, який я хочу підтримувати та працювати? Всі поради вітаються!

[EDIT] Я знаю, що можу зробити, cat /var/run/reboot-required.pkgsщоб перелічити пакунки, які викликають перезавантаження. Наразі команда дає таке:

linux-image-3.13.0-36-generic
linux-base
dbus
linux-image-extra-3.13.0-36-generic
linux-base

але як я можу знати, чи оновлення є дрібницями того, чи є у мене серйозна вразливість безпеки, якщо я не виконую перезавантаження?

[EDIT2] Гаразд, тепер я об'єднав команди, які я вважаю корисними, в одну:

xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high

Якщо це нічого не дає, схоже, проблеми з безпекою не є надзвичайно актуальними.

Останнє запитання, хоча: є low, mediumі highєдині можливості терміновості, чи є ще подібні, наприклад, criticalабо extremelyimportant?


Я не розумію питання. Веб-сайти з більшим трафіком просто планують цей час простою протягом періоду часу з меншим трафіком. Наскільки терміново це, залежить від того, що саме оновлюється.
Рамхаунд

14
Цікаво, скільки людей приїхало сюди, тому що вони побачили це питання у списку "Гарячих запитань до мережі" і цікавились, що таке вболівальники ... * піднімає руку *
Девід Ріхербі

6
@Ramhound: Е-е, ні, вони прозоро переходять на вторинний сервер на час технічного обслуговування.
Гонки легкості з Монікою

1
Повторне останнє запитання: я маю на увазі відфільтрувати низький та середній рівень та вважати всі інші / невідомі рівні невідкладними: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

Відповіді:


45

Відповідь не проста, оскільки це залежить від зроблених оновлень. Якщо у ядра виникли серйозні проблеми із безпекою, тоді добре перезапустити якомога швидше. Якщо в ядрі були лише незначні виправлення, перезапуск можна було б відкласти.

Якщо ви гарантуєте наявність> 99,9%, ви майже завжди будете мати кластерну систему, де ви можете перезавантажувати вузли один за одним, не перериваючи послугу.

Отже, ви перезавантажуєте першу систему та приєднуєте її знову до кластеру. Потім другий і так далі. Тоді сервіс ніколи не стане недоступним.


2
Дякую за вашу відповідь. Я додав невеличкий фрагмент до свого початкового запитання; Я знаю, що можу зробити, cat /var/run/reboot-required.pkgsщоб отримати пакунки, які потребують перезавантаження. Але як я можу дізнатися, чи це лише незначні виправлення чи це серйозна вразливість безпеки?
kramer65

2
@ kramer65 кожен пакет має журнал змін. Наприклад, Changlog для ядра можна знайти тут .
Uwe Plonus

2
Гаразд, тож вирішувати, чи важливі ці зміни, належить системному адміністратору (тобто в цьому випадку я сам)? Я маю занадто мало знань, щоб визначити це для ядра Linux, не кажучи вже про всі мільйони інших пакетів. Чи немає центрального місця, де я можу визначити, чи оновлення абсолютно необхідне для безпеки?
kramer65

8
@ kramer65 Виконати aptitude changelog <package>, ось приклад виводу: paste.ubuntu.com/8410798 (Це в системі Debian, а не Ubuntu, але те саме буде працювати і на Ubuntu.)
nyuszika7h

5
Дякую за всю допомогу тут. Нарешті я об'єднав усі речі, про що тут дізнався, в одну команду: xargs aptitude changelog < /var/run/reboot-required.pkgs | grep urgency=high(додав це також до початкового запитання), яка дає певний висновок щодо того, які пакунки мають надзвичайно термінові виправлення. Після цього, звичайно, можна перевірити окремі пакети. Дякую мільйон за всі відповіді та ідеї!
kramer65

3

аддон для вирішення теми

Я виконую аналогічну перевірку на «вимогу перезавантаження» для системи моніторингу zabbix

Я бачу 2 питання у рішенні "Тема":

  1. здатність зазвичай погано працює в сценаріях. Я вбиваю кілька годин, але все ще не змусив його працювати з zabbix
  2. якщо лише 1 журнал змін включає невідкладне оновлення - ваш чек завжди покаже позитивні результати

Моя логіка:

  1. Перевіряйте останню зміну лише у журналі змін для кожного пакету, який потребує перезавантаження системи
  2. Як вихід показують лише оновлення з найвищим пріоритетом

Використовуючи документацію Debian, я виявив 5 можливих значень для «терміновості», а також факт, що за ним можуть слідувати рівні («=») або крапки з комою («:»). Також можуть бути великі та малі символи

Тому я закінчив наступне:

#!/bin/bash
##################################
# Zabbix monitoring script
#
# Checking urgency in changelog 
# for updates which require system restart
#
##################################
# Contact:
#  anton.lugovoi@yandex.ru
##################################
# ChangeLog:
#  20151205    initial creation
#  20151208    check uniq packages only 
##################################

case "$1" in

status)
    if [ -f /var/run/reboot-required ]; then
      echo 1
    else
      echo 0
    fi 
    ;;

urgency)
    if [ -f /var/run/reboot-required.pkgs ]; then
      while read pkg; do
        tmp=`/usr/bin/apt-get changelog $pkg | \
             /bin/grep -m1 -ioP '(?<=[Uu]rgency[=:])(low|medium|high|emergency|critical)' | \
             tr '[:upper:]' '[:lower:]'`
        if [ -n $tmp ]; then
          if   [ "$tmp" == "low" ] && \
               [ "$urgency" != "medium" ] && \
               [ "$urgency" != "high" ] && \
               [ "$urgency" != "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=low
          elif [ "$tmp" == "medium" ] && \
               [ "$urgency" != "high" ] && \
               [ "$urgency" != "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=medium
          elif [ "$tmp" == "high" ] && \
               [ "$urgency" != "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=high
          elif [ "$tmp" == "emergency" ] && \
               [ "$urgency" != "critical" ]; then 
            urgency=emergency
          elif [ "$tmp" == "critical" ]; then 
            urgency=critical
            break
          fi
        fi 
      done < <(sort -u /run/reboot-required.pkgs)
    else
      urgency=none
    fi

    case "$urgency" in
        none)      urgency=0 ;;
        low)       urgency=1 ;;
        medium)    urgency=2 ;;
        high)      urgency=3 ;;
        emergency) urgency=4 ;;
        critical)  urgency=5 ;;
        *)         urgency=42 ;;
    esac

    echo $urgency
    ;;
esac
exit 0

Як результат:

  • reboot_required_check.sh status повертає 1, якщо потрібно перезавантажити, 0 якщо ні
  • reboot_required_check.sh urgency повертає найвищий рівень "терміновості" або "0", якщо перезавантаження не потрібно

Сподіваюся, це допоможе комусь заощадити час;)


0

Що мені цікаво, однак, як це працює для веб-серверів, які повинні становити 99,9999etc% часу? Вони просто не перезапускаються і ризикують порушити безпеку, оскільки оновлення безпеки не встановлені (що я не уявляю)? Або вони сприймають простої як належне (чого я теж не уявляю)?

Великі веб-сервери перезапускаються, коли з міркувань безпеки з’являється * Потрібний перезапуск системи * .

Але це прозоро для користувача, і сайт ніколи не опускається, оскільки великі сервери часто працюють з двома-трьома серверами, які зберігають однакові файли та відображають один і той же сайт. Перший - це основний сервер, а два інших є вторинними і використовуються лише тоді, коли основний сервер не працює.


1
Хоча це теоретично правильно, Big web serversзапускайте власні версії Linux. Вони не побачать System restart requiredдіалогу, вони оновлюють те, що потрібно, щоб залишатися в безпеці. У більшості випадків багато, якщо не всі оновлення можуть бути виконані під час роботи системи (я вважаю, що навіть можливо оновити ядро ​​Linux у запущеній системі без перезавантаження).
joeeey

Цікаво. У мене на Amazon є сервер, і я часто перезапускаю його через це повідомлення ... Я запускаю Ubuntu на своєму сервері. Як налаштувати його, щоб мені не довелося перезавантажувати його раз у раз?
ром

Я не маю досвіду роботи з серверами Amazon. Big web serversзапускаються на спеціалізованих серверах і VPS. Через це системний адміністратор має більше контролю над програмним забезпеченням. Чи надає Amazon доступ до кореневої оболонки до вашого сервера?
joeeey

Так, можливо мати кореневий доступ.
ром

Потім оновлення пакетів вручну, а потім перезапуск постраждалих служб і використання чогось на зразок Ksplice для оновлення ядра було б одним із способів. Варто зазначити, що Ksplice freezes execution of a computer so it is the only program runningпри застосуванні патчу, тому все ще може бути невеликий час простою (через те, що процес веб-сервера "заморожений"). Ось тут і приходить відповідь @Uwe Plonus.
joeeey
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.