Введение
Автоматизируйте обновления безопасности в Ubuntu 24.04 с unattended-upgrades. В статье рассказываем, как настроить автоустановку критичных и необязательных патчей, как задать периодичность проверок и обновлений, как запретить обновление ядра Linux.
Между публикацией уязвимости и появлением эксплойтов может пройти всего несколько часов, и среднее время до начала эксплуатации неуклонно уменьшается. Поэтому обновления безопасности важно устанавливать как можно чаще, чтобы не допустить появления «окон уязвимости», — а это не всегда возможно вручную.
Пакет unattended-upgrades — стандартный инструмент Ubuntu для автоматической установки обновлений на VPS и выделенные серверы. В отличие от ручного запуска apt upgrade, он работает по расписанию, по умолчанию применяет только security-патчи — без риска случайного обновления некритичных компонентов — и интегрируется с системными сервисами через systemd и cron. Это снижает нагрузку на администраторов и гарантирует соблюдение политики безопасности даже в крупных кластерах.
Как работает unattended-upgrades
Пакет unattended-upgrades интегрирован в экосистему Ubuntu через три ключевых компонента:
- APT (Advanced Package Tool) — обеспечивает доступ к репозиториям, проверку подписей пакетов и разрешение зависимостей. Unattended-upgrades использует libapt-pkg для запроса списка обновлений с фильтрацией по критичности. Система по умолчанию игнорирует репозитории updates, backports и proposed, фокусируясь только на источниках с пометкой security.
- systemd — управляет фоновым сервисом unattended-upgrades.service, который запускает процесс установки обновлений. Сервис настроен на автоматический перезапуск при сбоях с интервалом в 1 час (опция Restart=on-failure в юните).
- systemd timer — ежедневно активирует скрипт, инициирующий проверку обновлений.
Unattended-upgrades разделяет апдейты на две категории, используя метаданные репозиториев:
- Security updates (критичные) — патчи для уязвимостей с CVE-идентификаторами, затрагивающие:
- ядро Linux (linux-image-*, linux-headers-*);
- криптографические библиотеки (OpenSSL, GnuTLS);
- сетевые сервисы (OpenSSH, Nginx, Bind9).
- Recommended updates (необязательные) — обратно совместимые исправления, не связанные с безопасностью:
- документация и локализация (-doc, -langpack пакеты);
- оптимизации производительности без изменения API.
Соответственно, в репозиториях есть специальные ветки:
- noble-security содержит обновления безопасности;
- noble-updates — некритичные улучшения и багфиксы.
Какие пакеты будут установлены, определяется в /etc/apt/apt.conf.d/50unattended-upgrades, например:
Unattended-Upgrade::Allowed-Origins {
"Ubuntu:noble-security";
"UbuntuESMApps:noble-apps-security";
};
Приоритет источников определяется порядком перечисления: в примере пакеты из noble-security устанавливаются первыми.
Логи лежат в /var/log/unattended-upgrades/.
Основной файл — unattended-upgrades.log, он содержит информацию о том, какие патчи были установлены, какие ошибки произошли во время обновления и другую диагностическую информацию.
unattended-upgrades-dpkg.log фиксирует вывод dpkg.
history.log — хранит сводку за все время (аналогичен apt history).
Базовая настройка unattended-upgrades в Ubuntu 24.04
В Ubuntu 24.04 unattended-upgrades включён в базовую комплектацию как серверной, так и десктопной редакций: установка через apt install не нужна — инструмент уже интегрирован и готов к настройке. Однако для полноценной работы необходимо дополнительно установить apt-listchanges, который обеспечивает отчётность об изменениях в обновляемых пакетах.
Обновление пакетных индексов (обязательный шаг):
sudo apt update
Установка компонента для отчётов:
sudo apt install apt-listchanges
При установке появится интерактивное меню выбора формата отчётов — для серверов рекомендуется выбрать mailx или stdout (без интерактивного режима).
Активация фонового сервиса:
sudo systemctl enable --now unattended-upgrades.service
Ключ --now гарантирует немедленный запуск службы без перезагрузки.
Проверьте статус сервиса командой:
systemctl status unattended-upgrades.service
Ожидаемый корректный вывод включает:
- Active: active (running) — сервис работает в фоне.
- CGroup: ... /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown — исполняемый процесс.
- Main PID: 1138 (python3) — идентификатор рабочего процесса.
Если сервис не активен, диагностируйте проблему через:
journalctl -u unattended-upgrades.service -xe --since "5 minutes ago"
Фильтры unattended-upgrades нужно настраивать вручную. Откройте файл конфигурации:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Убедитесь, что в нём есть строки, ограничивающие обновления security-репозиториями:
Unattended-Upgrade::Allowed-Origins {
"Ubuntu:noble-security";
};
Unattended-Upgrade::Package-Blacklist {
"linux-generic";
"linux-image-generic";
"linux-headers-generic";
"linux-modules-generic";
"linux-modules-extra-generic";
};
Пояснение параметров:
- Allowed-Origins — разрешает установку только критичных обновлений из noble-security, игнорируя noble-updates.
- Package-Blacklist — блокирует автоматический апдейт ядра (рекомендуется для серверов с кастомными модулями).
Для тестирования механизма принудительно запустите unattended-upgrade вне расписания:
sudo unattended-upgrade --dry-run
Флаг --dry-run покажет обновления без реальной установки.
После каждой установки обновлений утилита apt-listchanges генерирует отчёт, содержащий:
- список изменённых пакетов с версиями,
- выдержки из changelog (с фокусом на security-исправлениях),
- критические предупреждения о несовместимостях.
Отчёт отправляется на электронную почту администратора, если это указано в /etc/apt/listchanges.conf:
[apt]
frontend = mail
email_address = <ваш_email>
В Ubuntu 24.04 по умолчанию активирован только security-канал. Для включения noble-updates добавьте в конфиг строку "Ubuntu:noble-updates";.
Глубокая настройка unattended-upgrades
Файл /etc/apt/apt.conf.d/50unattended-upgrades определяет ключевые параметры работы утилиты. Все директивы пишутся на языке конфигурации APT с синтаксисом, аналогичным JavaScript-объектам.
Фильтрация по репозиториям (Allowed-Origins). Для разрешения исключительно security-обновлений используется конструкция:
Unattended-Upgrade::Allowed-Origins {
"Ubuntu:${distro_codename}-security";
};
Переменная ${distro_codename} заменяется на имя релиза — это удобно, когда нужно сохранить возможность переноса конфигурации на другие серверы. Для Ubuntu 24.04 переменная заменяется на noble; а фильтр Ubuntu:noble-security указывает на репозиторий http://security.ubuntu.com/ubuntu.
Варианты для расширенной поддержки (ESM):
"UbuntuESM:${distro_codename}-infra-security"; // Для инфраструктурных пакетов
"UbuntuESMApps:${distro_codename}-apps-security"; // Для приложений
Управление чёрным списком пакетов (Package-Blacklist). Блокировка обновления специфичных пакетов:
Unattended-Upgrade::Package-Blacklist {
"linux-generic";
"linux-image-generic";
"linux-headers-generic";
"linux-modules-generic";
"linux-modules-extra-generic";
"docker-ce";
};
Ядро Linux часто вносят в чёрный список из-за риска несовместимости с оборудованием или ПО и чтобы избежать простоя во время перезагрузки, которая нужна для применения таких обновлений.
Как указывать пакеты:
- используйте точные имена из apt list --installed;
- допустимы шаблоны, к примеру, "kube*" заблокирует все пакеты Kubernetes.
Дополнительные критичные параметры. Удаление неиспользуемых зависимостей:
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Автоматическое восстановление после сбоя обновлений:
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Файл расписания /etc/apt/apt.conf.d/20auto-upgrades управляет частотой проверок и запусков обновлений. Рассмотрим возможные настройки расписания.
Ежедневный апдейт списка пакетов:
APT::Periodic::Update-Package-Lists "1";
Запуск unattended-upgrades после обновления списков:
APT::Periodic::Unattended-Upgrade "1";
Автоочистка кеша раз в неделю (0 — отключено, 7 — день):
APT::Periodic::AutocleanInterval "7";
Случайная задержка перед запуском (в секундах):
APT::Periodic::RandomSleep "300";
Периодичность проверки обновлений ESM:
APT::Periodic::Enable "1";
Пример минимальной конфигурации
Файл /etc/apt/apt.conf.d/50unattended-upgrades:
Unattended-Upgrade::Allowed-Origins {
"Ubuntu:${distro_codename}-security";
"UbuntuESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
"linux-image-generic";
"linux-headers-generic";
};
Unattended-Upgrade::Automatic-Reboot "false";
Unattended-Upgrade::InstallOnShutdown "true";
Файл /etc/apt/apt.conf.d/20auto-upgrades:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "3";
APT::Periodic::RandomSleep "600";
Что значат эти настройки:
- установка только патчей из -security и ESM-источников;
- блокировка автоматических обновлений ядра (но это можно будет сделать вручную);
- InstallOnShutdown — установка обновлений при остановке системы, настройка полезна для рабочих станций, на серверах она может привести к длительной перезагрузке;
- Automatic-Reboot "false" — запрет неконтролируемых перезагрузок;
- RandomSleep "600" — случайная задержка 0-10 минут для распределения нагрузки в кластерах;
- AutocleanInterval "3" — очистка кеша раз в 3 дня.
Не забывайте проверять синтаксис конфигов после внесения изменений:
apt-config dump APT::Periodic
apt-config dump Unattended-Upgrade
Также не изменяйте файл /usr/share/unattended-upgrades/20auto-upgrades — это шаблон, перезаписываемый при обновлении пакета. Все кастомные настройки вносятся только в /etc/apt/apt.conf.d/.
Читайте в блоге:
- Docker на Ubuntu 24.04: установка, настройка, запуск контейнеров
- Обновление Ubuntu 22.04: установка критических обновлений и апгрейд до 24.04
- Вирусы на хостинге и сайтах: как избежать заражения и удалить вирус