В этом руководстве вы найдете несколько рекомендаций по поддержке сервера Ubuntu 20.04 в актуальном состоянии. Как и в случае усиления сетевой безопасности, вы можете предпринять множество шагов, чтобы ваши серверы продолжали безопасно работать без вашего вмешательства в будущем.
Читайте также: Повышение безопасности клиента OpenSSH в Ubuntu
Существует ряд инструментов и конфигураций, которые вы можете применить к большинству серверов Ubuntu помимо автоматических и стандартных параметров. Если вы занимаетесь администрированием своего сервера самостоятельно, ручная настройка всех ваших сред может быть довольно разрушительной и привести к появлению ошибок.
В этом мануале мы рассмотрим тестирование плавной перезагрузки в соответствии с рекомендациями по управлению приложениями (что сведет к минимуму любые сложности, связанные с обновлениями), настройку автоматических обновлений для большинства пакетов и библиотек на вашем сервере исправление ядра в реальном времени и многое другое.
Требования
Для работы вам нужен сервер Ubuntu 20.04 и пользователь с привилегиями sudo. Узнать больше о том, как настроить пользователя с этими привилегиями, можно в этом руководстве.
1: Рекомендации по управлению приложениями
Фундаментальной частью настройки сервера для автоматического обновления является обеспечение возможности корректного перезапуска всех приложений после незапланированного простоя или перезагрузки. Менеджеры пакетов Linux поддерживают свою бесперебойную работу в фоновом режиме, поэтому необходимое обслуживание не влечет за собой установку дополнительных пакетов. Несмотря на это, не всегда ясно, как сервер будет вести себя после перезапуска, и это является одной из наиболее распространенных причин отсутствия хорошей стратегии обновления.
По возможности приложения в вашем стеке должны управляться системой инициализации вашего сервера. В большинстве современных дистрибутивов Linux, включая Ubuntu, этой системой является systemd. Systemd предоставляет команду systemctl для взаимодействия с запущенными сервисами и их автоматического перезапуска по мере необходимости. Практически все программы, устанавливаемые с помощью менеджера пакетов и предназначенные для работы в фоновом режиме, автоматически предоставляют сервис systemd и конфигурационный файл.
Читайте также:
- Управление сервисами и юнитами Systemd с помощью Systemctl
- Установка и управление Supervisor на сервере Ubuntu и Debian
При запуске собственного программного обеспечения или программ, развернутых из репозиториев 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";
Сохраните и закройте файл, когда закончите его редактирование. Если вы используете nano, нажмите Ctrl+X, затем Y и Enter.
Если вы внесли изменения в конфигурацию, перезагрузите сервис 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: 55 seconds ago kernel: 5.4.0-26.30-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: d56589e7fa994005a266d4caf9b9dcf7
Итак, вы настроили автоматическое обновление ядра сервера, а это означает, что больше не нужно перезагружаться, чтобы поддерживать безопасную и актуальную среду.
Заключение
В этом руководстве вы изучили несколько стратегий автоматического обновления серверов Ubuntu. Вы также узнали некоторые нюансы о работе репозиториев пакетов, обновлении ядра и перезагрузке сервера. Это важные навыки DevOps и работы с серверами в более широком смысле, на этих концепциях основаны почти все производственные конфигурации.
Читайте также: Пакетирование и публикация приложения Snap в Ubuntu 18.04