Поддержка сервера Ubuntu 22.04

Этот материал предоставит вам несколько рекомендаций по поддержке сервера Ubuntu 22.04 в актуальном состоянии. Чтобы ваши серверы продолжали безопасно работать без вашего вмешательства в будущем, вы можете предпринять множество шагов.

Читайте такжеПовышение безопасности клиента OpenSSH в Ubuntu

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

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

Требования

Для работы вам понадобится свежий сервер Ubuntu 22.04 и пользователь с привилегиями sudo. Узнать больше о настройке сервера можно в этом руководстве.

1: Рекомендации по управлению приложениями

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

Приложения в стеке по возможности должны управляться системой инициализации вашего сервера. В большинстве современных дистрибутивов Linux (в том числе и в Ubuntu) этой системой является systemd. Она предоставляет systemctl – это команда для взаимодействия с запущенными сервисами и для их автоматического перезапуска по мере необходимости. Практически все программы, которые были установлены через менеджер пакетов и которые работают в фоновом режиме, автоматически поставляются с сервисом systemd и конфигурационным файлом.

Читайте также:

Когда вы запускаете свое собственное ПО или программы, развернутые из репозиториев Git, рекомендуем написать пользовательские юнит-файлы для интеграции с systemd. В качестве упрощенного аналога можно также использовать supervisor или системный планировщик cron с @reboot.

Когда конфигурация будет готова, обязательно проверьте ее после перезагрузки. Чтобы перезагрузить сервер, запустите:

sudo shutdown now -r

Данная команда остановит все запущенные процессы и перезагрузит машину. Вместо now можно указать время (в формате чч:мм) или период (в минутах), по прошествии которого нужно перезапустить сервер. Производственные развертывания, как правило, не требуют постороннего вмешательства после каких-либо незапланированных простоев – обычно все необходимые сервисы и конечные точки восстанавливаются автоматически.

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

2: Настройка автоматических обновлений

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

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

sudo apt update

sudo apt install unattended-upgrades

После установки проверьте, работает ли сервис unattended-upgrades, через systemctl:

sudo systemctl status unattended-upgrades.service

Вы получите такой вывод:

unattended-upgrades.service - Unattended Upgrades Shutdown
     Loaded: loaded (/lib/systemd/system/unattended-upgrades.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-02-14 17:51:49 UTC; 3h 4min ago
       Docs: man:unattended-upgrade(8)
   Main PID: 829 (unattended-upgr)
      Tasks: 2 (limit: 1137)
     Memory: 10.6M
     CGroup: /system.slice/unattended-upgrades.service

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

Конфигурация хранится в файле /etc/apt/apt.conf.d/50unattended-upgrades. Откройте его с помощью nano или другого текстового редактора:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Данный файл хорошо прокомментирован, строки комментариев начинаются с // и объясняют функциональность всех настроек. Первый блок определяет, какие пакеты будут обновляться автоматически. Он работает согласно шаблону для имен репозиториев пакетов Ubuntu. Файлы в основном репозитории и в репозитории -security будут обновлены. Строки, содержащие репозитории -updates, -proposed и -backports, по умолчанию закомментированы – они отключены потому, что они, скорее всего, содержат критические изменения в ваших установленных пакетах. Их автоматическое обновление можно включить вручную, если это требуется, для этого следует удалить символы // из этих строк.

// Automatically upgrade packages from these (origin:archive) pairs
//
// Note that in Ubuntu security updates may pull in new dependencies
// from non-security sources (e.g. chromium). By allowing the release
// pocket these get automatically pulled in.
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}";
        "${distro_id}:${distro_codename}-security";
        // Extended Security Maintenance; doesn't necessarily exist for
        // every release and this system may not have it installed, but if
        // available, the policy for updates is such that unattended-upgrades
        // should also install from here by default.
        "${distro_id}ESMApps:${distro_codename}-apps-security";
        "${distro_id}ESM:${distro_codename}-infra-security";
//      "${distro_id}:${distro_codename}-updates";
//      "${distro_id}:${distro_codename}-proposed";
//      "${distro_id}:${distro_codename}-backports";
};
…

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

// Automatically reboot *WITHOUT CONFIRMATION* if
//  the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

Сохраните и закройте файл, когда закончите его редактировать.

Если вы внесли изменения в конфигурацию, перезагрузите сервис unattended-upgrades, чтобы новые параметры вступили в силу:

sudo systemctl reload unattended-upgrades.service

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

3: Обновление и исправление ядра

Ядро системы нужно обновлять реже, чем все остальные пакеты. В Linux ядро содержит (почти) все рабочие аппаратные драйверы и отвечает за большинство низкоуровневых системных взаимодействий. Обычно ядро необходимо обновлять только в том случае, если на сервере обнаружена уязвимость и ее нужно устранить, если вам нужно добавить новую функцию ядра или если ядро ​​сильно устарело и на нем скопилось множество ошибок.

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

Если ваше приложение готово выделить некоторое время на простой, то обновить ядро ​​несложно: apt можно настроить на установку и подготовку новых ядер вместе с другими пакетами, а после перезагрузки ваш сервер будет сразу использовать новое ядро. В большинстве производственных развертываний необходим дополнительный уровень перезагрузки, чтобы обеспечить доступность сервиса. К примеру, с помощью балансировщика нагрузки можно настроить автоматическое перенаправление трафика на серверы, которые могут обеспечить нужную функциональность в горизонтально масштабируемом развертывании – такие серверы будут перезагружаться по отдельности, что позволит нам избежать простоя.

Читайте такжеАрхитектурное проектирование приложений в Kubernetes

Включение Livepatch

Избежать простоев во время обновления ядра можно с помощью функции ядра Linux под названием Livepatch. Она позволяет выполнять обновления ядра без перезагрузки. Есть два основных мейнтейнера: Canonical Livepatch Service для Ubuntu и KernelCare, которая поддерживает Ubuntu вместе с большинством других основных дистрибутивов Linux. Оба варианта доступны только по регистрации. Сервис Canonical является бесплатным для индивидуального использования.

Зарегистрироваться для получения ключа Livepatch можно здесь. После регистрации можно установить пакет canonical-livepatch. Snap — еще один менеджер пакетов Ubuntu, который работает вместе с apt.

sudo snap install canonical-livepatch

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

sudo canonical-livepatch enable your-key

Вывод должен содержать сообщение Successfully enabled device. С этого момента сервис будет работать в фоновом режиме. Вы можете проверить его статус, используя команду:

sudo canonical-livepatch status

Она вернет:

last check: 50 seconds ago
kernel: 5.15.0-25-generic
server check-in: succeeded
patch state: ✓ all applicable livepatch modules inserted
patch version: 84.1
tier: updates (Free usage; This machine beta tests new patches.)
machine id: 2565a9e7fc9f4405a167e4caf9b9dcf3

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

Заключение

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

Читайте такжеПакетирование и публикация приложения Snap в Ubuntu 18.04

 

Tags: ,

Добавить комментарий