Одной из первейших задач, которые должен выполнить системный администратор при настройке ОС на новом сервере, наряду с настройкой пользователей и их разрешений ...
Блог компании 3v-Hosting
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";
Эта конфигурация означает следующее:
При желании расписание можно изменить. Например, запускать автоматическое обновление раз в несколько дней, вместо ежедневного расписания.
После настройки автоматического обновления будет не лишним убедиться, что всё действительно функционирует так как мы задумали. Для этого сначала можно посмотреть состояние основной службы с помощью команды:
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
Перезагрузка может потребоваться и после обновления некоторых системных компонентов, которые невозможно заменить "на лету". Обычно речь идёт о таких компонентах как:
Во всех остальных случаях достаточно перезапустить только нужные службы, не затрагивая работу всего сервера. Это позволяет устанавливать большинство обновлений без заметного простоя.
Чтобы сократить количество перезагрузок, Canonical разработала технологию Livepatch. Она позволяет применять многие критические исправления безопасности непосредственно к работающему ядру Linux, без остановки системы и без перезапуска сервера.
Как мы узнали выше, после обновления ядра новая версия начинает использоваться только после перезагрузки сервера. Но Livepatch делает так, что для поддерживаемых уязвимостей исправления загружаются в память и применяются к уже работающему ядру. Благодаря этому сервер продолжает обслуживать пользователей, а внеплановое окно обслуживания не требуется.
Для использования данной технологии понадобится учётная запись Ubuntu One. После регистрации достаточно установить на свой сервер клиент Livepatch, привязать сервер к своей учётной записи и активировать сервис. Дальнейшая установка поддерживаемых исправлений происходит автоматически в фоновом режиме.
Наибольшую пользу Livepatch приносит там, где даже короткий простой нежелателен. Например:
При этом нужно понимать, что возможности Livepatch не безграничны. Данная технология распространяется только на определённые исправления безопасности ядра и не заменяет полноценные обновления. Поэтому если выходит новая версия ядра, меняются внутренние механизмы его работы или устанавливаются крупные функциональные обновления, то плановая перезагрузка сервера всё равно остаётся необходимой. Именно поэтому Livepatch стоит рассматривать как способ сократить количество перезагрузок сервера, а не как способ отказаться от них полностью.
После установки некоторых обновлений 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 и выделенных серверов с высокой нагрузкой имеет смысл заранее планировать окна обслуживания. Большинство обновлений установится автоматически и без простоя, однако обновления ядра, проверка работоспособности сервисов или другие административные задачи всё равно удобнее выполнять по заранее согласованному расписанию.
Для большинства небольших серверов это вполне реально. Но если инфраструктура критична для бизнеса, то лучше периодически проверять её вручную, контролировать состояние сервисов и просматривать журналы после установки обновлений.
Обновления безопасности проходят тестирование перед публикацией, поэтому вероятность возникновения проблем невелика. Тем не менее резервные копии должны оставаться обязательной частью любой серверной инфраструктуры.
Не всегда. Многие администраторы разрешают автоматическую установку только обновлений безопасности, а функциональные изменения и переход на новые версии программ выполняют во время планового обслуживания.
Да. Иногда это делают перед крупными изменениями в инфраструктуре, миграцией сервисов или обновлением приложений. После завершения работ автоматическое обновление лучше снова включить, чтобы сервер не оставался без актуальных исправлений безопасности.
Нет. Livepatch устанавливает только часть критических исправлений безопасности для поддерживаемых версий ядра. Но полноценные обновления ядра и плановые перезагрузки всё равно остаются необходимыми.
Если сервер работает стабильно, обычно достаточно просматривать журналы раз в несколько недель или после получения уведомлений системы мониторинга. На серверах с высокой нагрузкой или критичными сервисами контроль логов нередко включают в регулярные регламентные проверки.
Автоматическое обновление Ubuntu Server позволяет поддерживать систему в актуальном состоянии без постоянного участия администратора. Пакет unattended-upgrades самостоятельно устанавливает разрешённые обновления, needrestart помогает определить, какие службы требуют перезапуска, а Canonical Livepatch в ряде случаев позволяет обойтись без перезагрузки даже после исправления уязвимостей ядра.
Но полностью отказаться от контроля всё же не получится. Резервное копирование, мониторинг, проверка журналов, контроль необходимости перезагрузки и плановые окна обслуживания остаются неотъемлемой частью эксплуатации любого сервера.
В результате администратор тратит меньше времени на рутинные задачи, а сервер быстрее получает исправления безопасности. Для VPS, выделенных серверов и любой современной инфраструктуры такой подход уже давно стал стандартной практикой, поэтому и вам стоит рассмотреть возможность реализации данного механизма в своей инфраструктуре, с учётом, конечно, всех практических рекомендаций, которые мы вам дали.
Настройка rate limiting в Nginx: как ограничить количество запросов, защитить сервер от простого DDoS, ботов и brute force. Примеры конфигурации и советы.
Как отключить IPv6 в Ubuntu Server 22.04 и 24.04: пошаговые инструкции через sysctl, Netplan и GRUB, проверка настроек и рекомендации для VPS и выделенных серве...
Настройка timezone и NTP на Linux-сервере: проверка времени, выбор часового пояса, синхронизация через Chrony и systemd-timesyncd, работа Docker и устранение ти...