Блог компании 3v-Hosting

Настройка автоматического обновления Ubuntu Server без перезагрузки

Администрирование

9 мин.


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

Даже минимальная установка Ubuntu состоит из десятков отдельных компонентов, таких как непосредственно ядро системы, SSH, веб-сервер, библиотеки, интерпретаторы языков, инструменты администрирования и т.д. и т.п. Всё это регулярно получает исправления.

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

Такой подход особенно удобен, если на сервере работают сайты, CRM, API, почтовые службы, базы данных или внутренние сервисы компании, которые, по возможности, не должны перезагружаться. Опять-же, администратору приходится выполнять меньше рутинных операций, а окно, в течение которого систему можно атаковать через уже известную уязвимость, становится заметно короче.

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

 

 

 

 

Автоматическая установка обновлений

Задача автоматической установки обновлений в Ubuntu давно решена штатными средствами. За неё отвечает пакет unattended-upgrades, который самостоятельно проверяет наличие обновлений, скачивает их и устанавливает без участия администратора.

Установка этого пакета занимает пару минут и выполняется командами:

sudo apt update
sudo apt install unattended-upgrades

 

После этого стоит запустить мастер настройки:

sudo dpkg-reconfigure unattended-upgrades

Во время настройки система спросит, нужно ли автоматически устанавливать обновления безопасности. В большинстве случаев имеет смысл выбрать Yes.

 

 

 

 

Где находятся настройки

Работа утилиты unattended-upgrades определяется двумя файлами.

Первый файл - это /etc/apt/apt.conf.d/50unattended-upgrades. Здесь указывается, какие обновления разрешено устанавливать автоматически. В этом же файле можно изменить дополнительные параметры, такие как:

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

Конфигурация подробно прокомментирована, поэтому разобраться в настройках будет вовсе несложно.

 

Второй файл - /etc/apt/apt.conf.d/20auto-upgrades. Он отвечает за периодичность запуска. Самая распространённый пример конфигурации может выглядеть так:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

 

Эта конфигурация означает следующее:

  • Update-Package-Lists - ежедневно обновлять список пакетов;
  • Unattended-Upgrade - ежедневно устанавливать разрешённые обновления.

 

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

 

 

 

 

Как проверить, работает ли механизм

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

systemctl status unattended-upgrades

 

Затем стоит проверить журнал обновлений:

cat /var/log/unattended-upgrades/unattended-upgrades.log

 

Ну или воспользоваться журналом systemd:

journalctl -u unattended-upgrades

 

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

 

 

 

 

Когда нужна перезагрузка, а когда нет

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

Например после обновления веб-сервера Nginx можно просто выполнить команду:

sudo systemctl reload nginx

или после обновления PostgreSQL выполнить:

sudo systemctl restart postgresql

 

Для пользователей вашего сайта или приложения такие действия чаще всего проходят незаметно.

 

Обратная ситуация возникает при обновлении непосредственно ядра системы Linux. Новая версия устанавливается на диск, но сервер продолжает работать со старым ядром, которое уже находится в оперативной памяти. Поэтому пока система не будет перезагружена - изменения не вступят в силу.

Именно поэтому после некоторых обновлений Ubuntu выводит сообщение:

System restart required

 

Перезагрузка может потребоваться и после обновления некоторых системных компонентов, которые невозможно заменить "на лету". Обычно речь идёт о таких компонентах как:

  • systemd;
  • glibc;
  • драйверах оборудования;
  • микрокоде процессора;
  • отдельных компонентах виртуализации.

 

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

 

 

 

 

Canonical Livepatch

Чтобы сократить количество перезагрузок, Canonical разработала технологию Livepatch. Она позволяет применять многие критические исправления безопасности непосредственно к работающему ядру Linux, без остановки системы и без перезапуска сервера.

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

Для использования данной технологии понадобится учётная запись Ubuntu One. После регистрации достаточно установить на свой сервер клиент Livepatch, привязать сервер к своей учётной записи и активировать сервис. Дальнейшая установка поддерживаемых исправлений происходит автоматически в фоновом режиме.

Наибольшую пользу Livepatch приносит там, где даже короткий простой нежелателен. Например:

  • VPS с высокими требованиями к доступности;
  • производственные веб-серверы;
  • серверы баз данных;
  • корпоративные приложения;
  • облачная инфраструктура.

 

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

 

 

 

 

Как узнать, нужен ли reboot

После установки некоторых обновлений Ubuntu автоматически создаёт специальный файл-маркер. Его появление означает, что часть установленных изменений начнёт работать только после перезагрузки системы.

Проверить наличие такого файла можно командой:

test -f /var/run/reboot-required && echo "Reboot required"

 

или просто:

ls /var/run/reboot-required

 

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

В крупных инфраструктурах этот механизм нередко используют вместе с системами мониторинга и средствами управления конфигурацией, которые автоматически отслеживают появление файла reboot-required, уведомляют администраторов и помогают планировать обслуживание серверов без постоянной ручной проверки.

 

 

 

 

Как определить процессы со старыми библиотеками

После обновления библиотек некоторые службы продолжают использовать уже загруженные версии файлов. И пока процесс не будет перезапущен, изменения не вступят в силу.

Проверить это помогает утилита needrestart.

Для установки этой утилиты выполните команду:

sudo apt install needrestart

 

Запускаем утилиту командой:

sudo needrestart

 

После анализа программа покажет:

  • службы, которые желательно перезапустить;
  • необходимость полной перезагрузки;
  • процессы, продолжающие использовать старые версии библиотек.

 

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

 

 

 

 

Практические рекомендации

Автоматическая установка обновлений избавляет администратора от большого объёма рутинной работы, но полностью оставлять сервер без контроля всё же не стоит. Даже надёжные механизмы вроде unattended-upgrades полезно время от времени проверять, особенно если система обслуживает рабочие проекты.

Перед включением автоматических обновлений желательно:

  • настроить резервное копирование;
  • проверить обновления на тестовом сервере, если речь идёт о критичной инфраструктуре;
  • периодически просматривать журналы работы unattended-upgrades;
  • отслеживать необходимость перезагрузки;
  • контролировать состояние сервисов после установки обновлений;
  • время от времени выполнять полноценное обновление системы вручную.

 

Хорошей практикой считается и использование мониторинга. Если после установки обновлений какой-либо сервис перестанет отвечать или потребуется перезагрузка, то администратор узнает об этом сразу, а не спустя несколько часов или дней.

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

 

 

 

 

FAQ или Частые вопросы

Можно ли полностью отказаться от ручных обновлений?

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

 

Насколько безопасны автоматические обновления?

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

 

Стоит ли автоматически обновлять абсолютно все пакеты?

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

 

Можно ли временно отключить автоматические обновления?

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

 

Заменяет ли Livepatch обычное обновление ядра?

Нет. Livepatch устанавливает только часть критических исправлений безопасности для поддерживаемых версий ядра. Но полноценные обновления ядра и плановые перезагрузки всё равно остаются необходимыми.

 

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

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

 

 

 

 

Выводы

Автоматическое обновление Ubuntu Server позволяет поддерживать систему в актуальном состоянии без постоянного участия администратора. Пакет unattended-upgrades самостоятельно устанавливает разрешённые обновления, needrestart помогает определить, какие службы требуют перезапуска, а Canonical Livepatch в ряде случаев позволяет обойтись без перезагрузки даже после исправления уязвимостей ядра.

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

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

3v-Hosting Team

Автор

3v-Hosting Team

Команда 3v-Hosting - это группа преданных своему делу инженеров и операторов, которые занимаются созданием и поддержкой основы наших сервисов. Каждый день мы погружаемся в мир виртуальных и выделенных серверов, занимаясь всем, от развертывания и мониторинга до устранения реальных проблем, возникающих в производственных средах. Большинство наших статей основано на практическом опыте, а не просто на теории. Мы делимся своими наблюдениями о проблемах, с которыми сталкиваемся: перебоях в производительности, ошибках в настройке, тонкостях сетевых решений и архитектурных выборах, влияющих на стабильность и надежность. Наша миссия проста - мы хотим делиться знаниями, которые позволят вам управлять своими проектами с меньшим количеством неожиданностей и гораздо большей предсказуемостью.