Насколько срочно требуется *** перезагрузка системы *** для безопасности?

56

Чтобы немного освоить администрирование сервера, я установил простой сервер Ubuntu 14.04, на котором я запускаю личный веб-сайт. Я установил автоматическую установку обновлений безопасности, но не включаю другие обновления. Кажется, это работает довольно хорошо. Иногда я получаю сообщение при входе на сервер (с помощью ssh):

*** System restart required ***

Когда это происходило, я просто перезагружал Ubuntu, и все было хорошо. Это нормально, потому что это простой персональный сайт. Что меня интересует, так это то, как это работает для веб-серверов, которые должны работать до 99,9999% времени? Разве они просто не перезагружаются и не рискуют нарушить безопасность, потому что обновления безопасности не установлены (что я не могу себе представить)? Или они принимают время простоя как должное (что я не могу себе представить)?

Как мне справиться с этим, если бы это был очень важный рабочий сервер, который я хочу поддерживать в рабочем состоянии? Все советы приветствуются!

[ПРАВКА] Я знаю, что могу сделать, 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?

kramer65
источник
Я не понимаю вопроса. Сайты с большим трафиком просто планируют это время простоя в течение периода времени с меньшим трафиком. Насколько это срочно, зависит от того, что именно обновляется.
Ramhound
14
Интересно, сколько людей пришло сюда, потому что они увидели вопрос в списке «Горячих сетевых вопросов» и задались вопросом, что это за ругательства ... * поднимает руку *
Дэвид Ричерби,
6
@Ramhound: Эмм, нет, они прозрачно переключаются на вторичный сервер на время обслуживания.
Легкость гонок с Моникой
1
В связи с последним вопросом: я имею в виду отфильтровывать низкие и средние значения и считаю все другие / неизвестные уровни срочными: | grep 'urgency=' | egrep -v '=(low|medium)'
KajMagnus

Ответы:

45

Это не простой ответ, так как это зависит от сделанных обновлений. Если в ядре возникла серьезная проблема с безопасностью, рекомендуется перезагрузить компьютер как можно скорее. Если бы в ядре были только незначительные исправления, то перезагрузка могла быть отложена.

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

Таким образом, вы перезагружаете первую систему и подключаете ее к кластеру. Потом второй и тд. Тогда услуга никогда не станет недоступной.

Уве Плонус
источник
2
Спасибо за Ваш ответ. Я добавил маленький кусочек к своему первоначальному вопросу; Я знаю, что могу сделать, cat /var/run/reboot-required.pkgsчтобы получить пакеты, которые требуют перезагрузки. Но как мне узнать, являются ли это лишь незначительными исправлениями или это серьезная уязвимость безопасности?
kramer65
2
@ kramer65 каждый пакет имеет список изменений. Например, список изменений для ядра можно найти здесь .
Уве Плонус
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. aptitude обычно плохо работает в сценариях. Я убил несколько часов, но все еще не работал с 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», если перезагрузка не требуется

Надеюсь, это поможет кому-то сэкономить время;)

user2658174
источник
0

Что меня интересует, так это то, как это работает для веб-серверов, которые должны работать до 99,9999% времени? Разве они просто не перезагружаются и не рискуют нарушить безопасность, потому что обновления безопасности не установлены (что я не могу себе представить)? Или они принимают время простоя как должное (что я не могу себе представить)?

Большие веб-серверы перезапускаются, когда * из соображений безопасности появляется сообщение о необходимости перезагрузки системы * .

Но это прозрачно для пользователя, и сайт никогда не отключается, потому что большие серверы часто используют два или три сервера, которые хранят одинаковые файлы и отображают один и тот же сайт. Первый из них является основным сервером, а два других являются вторичными и используются только когда основной сервер не работает.

ПЗУ
источник
1
Хотя это теоретически правильно, Big web serversзапустите пользовательские версии Linux. Они не увидят System restart requiredдиалог, они обновят то, что им нужно, чтобы оставаться в безопасности. В большинстве случаев многие, если не все обновления могут быть выполнены во время работы системы (я думаю, что даже возможно обновить ядро ​​Linux на работающей системе без перезагрузки).
Joeeey
Интересно. У меня есть сервер на Amazon, и я часто перезагружаю его из-за этого сообщения ... Я запускаю Ubuntu на своем сервере. Как настроить его, чтобы мне не приходилось перезагружать его время от времени?
ром
У меня нет опыта работы с серверами Amazon. Big web serversработают на выделенных серверах и VPS. Из-за этого системный администратор имеет больше контроля над программным обеспечением. Предоставляет ли Amazon доступ к вашему серверу с правами root-оболочки?
Joeeey
Да, возможно иметь root-доступ.
ром
Тогда обновление пакетов вручную, а затем перезапуск уязвимых сервисов и использование чего-то вроде Ksplice для обновлений ядра будет одним из способов. Стоит отметить, что Ksplice freezes execution of a computer so it is the only program runningпри применении патча, поэтому возможны небольшие простои (из-за «зависания» процесса веб-сервера). Вот где приходит ответ @Uwe Plonus.
Joeeey