Автоматические обновления Linux: Настройка unattended-upgrades и dnf-automatic для обновления серверов Linux
Уровень: Эксперт
Ориентировочное время: ~30 минут
Цель: Настроить масштабируемые автоматические обновления Linux без простоев с помощью unattended-upgrades и dnf-automatic в соответствии с принципами Infrastructure as Code (Инфраструктура как код).
Введение
Ручная установка патчей на серверы – это критическое узкое место в управлении любой продакшен-средой: без автоматизации надежно поддерживать безопасность и актуальность сотен узлов было бы крайне сложно. Уязвимое приложение может быть скомпрометировано за считанные минуты, и большинство эксплойтов нацелены на общеизвестные неисправленные уязвимости. Нам необходимо своевременно применять Security Updates (критические исправления, выпущенные для устранения известных уязвимостей в программном обеспечении), чтобы избежать нарушений безопасности. В этом руководстве мы настроим автоматические обновления Linux на сервере Linux с помощью unattended-upgrades и dnf-automatic. Этот подход стандартизирует обновления серверов Linux.
Что такое unattended-upgrades и dnf-automatic?
unattended-upgrades – это утилита Debian/Ubuntu, которая автоматизирует установку обновлений безопасности и других пакетов.
dnf-automatic – это компонент, обеспечивающий автоматическое обновление для систем RHEL/CentOS/Fedora.
Эти утилиты позволяют Automatic Updates (процессу получения и установки обновлений без вмешательства человека) беспрепятственно работать в фоновом режиме. Обычно они запускаются ежедневно с помощью Systemd Timer (юнита systemd, управляющего расписанием задач и заменяющего традиционные задачи cron).
Требования
Перед началом убедитесь, что выполнены следующие условия:
- Операционная система: Ubuntu 20.04/22.04/24.04 LTS, Debian 12/13 или RHEL/AlmaLinux 9/10
- Доступ: доступ sudo или root к серверу
- Сетевые требования: исходящий доступ по HTTPS к репозиториям пакетов (archive.ubuntu.com, security.debian.org, repo.almalinux.org)
- Необходимые знания: глубокое понимание системного администрирования, systemd и базового Patch Management (процесса распространения и применения обновлений к программному обеспечению) вместе с управлением патчами в Linux.
Шаг 1: Настройка автоматических обновлений Linux с помощью unattended-upgrades
Для систем, использующих APT (Advanced Package Tool) (основную систему управления пакетами, используемую в дистрибутивах на базе Debian), мы используем unattended-upgrades. Этот инструмент бесшовно интегрируется в вашу стратегию управления патчами в Linux.
1.1 Установка пакета
Сначала проверьте и установите необходимый пакет из Package Repository (централизованного хранилища, из которого извлекаются и устанавливаются пакеты программного обеспечения).
Выполните следующую команду:
sudo apt update && sudo apt install unattended-upgrades -y
Вы должны увидеть вывод, подтверждающий установку. Это гарантирует готовность системы к автоматическим обновлениям apt.
1.2 Настройка разрешенных источников (Allowed Origins)
Основной конфигурационный файл расположен по пути /etc/apt/apt.conf.d/50unattended-upgrades. Мы изменим конфигурацию так, чтобы устанавливались только Security Updates. Это минимизирует риск возникновения критических изменений при автоматическом обновлении пакетов.
Перед внесением изменений рекомендуется создать резервную копию оригинального конфигурационного файла:
sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak
Откройте конфигурационный файл:
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
Полностью замените содержимое блока Allowed-Origins и добавьте перечисленные имена в блок Package-Blacklist:
Для Ubuntu:
Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; };
Для Debian:
Unattended-Upgrade::Origins-Pattern { "origin=Debian,codename=${distro_codename},label=Debian-Security"; "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; };
Затем настройте черный список пакетов и поведение при перезагрузке:
Unattended-Upgrade::Package-Blacklist { "^nginx$"; "^mysql-server$"; "^mariadb-server$"; "postgresql*"; "docker*"; }; Unattended-Upgrade::Automatic-Reboot "false";
Package-Blacklist использует регулярные выражения. Запись вида "nginx" соответствует nginx-common, nginx-extras и т. д. Чтобы указать только конкретный пакет, используйте якоря регулярных выражений, например "^nginx$".
Это ограничивает автоматические обновления apt только исправлениями безопасности и исключает критические пакеты из автоматических обновлений, снижая риск прерывания работы служб при сохранении автоматизации исправлений безопасности.
Обновления ядра, libc и других низкоуровневых пакетов могут по-прежнему требовать перезагрузки. В продакшен-средах оставляйте автоматические перезагрузки отключенными, если окна обслуживания не обеспечиваются средствами оркестрации.
1.3 Включение автоматических обновлений
Создайте файл auto-upgrades, чтобы активировать Systemd Timer для APT.
Откройте файл:
sudo nano /etc/apt/apt.conf.d/20auto-upgrades
Вставьте внутрь следующее:
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::AutocleanInterval "7";
Эта конфигурация указывает системе:
Update-Package-Lists "1"– запускать ежедневное обновление списков пакетов.Unattended-Upgrade "1"– автоматически выполнять автоматические обновления apt.AutocleanInterval "7"– очищать кэш пакетов каждые 7 дней.
Шаг 2: Настройка dnf-automatic для обновления серверов Linux
Для систем, использующих DNF (Dandified YUM) (пакетный менеджер нового поколения для дистрибутивов на базе RHEL), dnf-automatic обеспечивает надежную автоматизацию обновлений dnf.
2.1 Установка пакета
Установите инструмент автоматизации из Package Repository.
Выполните следующую команду:
sudo dnf install dnf-automatic -y
Вы должны увидеть вывод, подтверждающий успешную установку пакета автоматизации обновлений dnf.
2.2 Настройка политик обновления
Основной конфигурационный файл расположен по пути /etc/dnf/automatic.conf. Настройте инструмент для загрузки и применения только Security Updates.
Перед внесением изменений создайте резервную копию конфигурационного файла и проверьте наличие уведомлений о безопасности для вашего дистрибутива:
sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo dnf updateinfo summary sudo dnf updateinfo list security
Откройте конфигурационный файл:
sudo nano /etc/dnf/automatic.conf
Настройте следующие параметры:
[commands] upgrade_type = security random_sleep = 3600 download_updates = yes apply_updates = yes [emitters] emit_via = stdio
Эта конфигурация указывает системе:
upgrade_type = security– ориентироваться исключительно на патчи безопасности.random_sleep = 3600– рандомизировать выполнение на время до 1 часа, распределяя нагрузку между масштабными развертываниями Infrastructure as Code, чтобы предотвратить пиковые нагрузки на репозиторий и одновременные каскадные сбои.download_updatesиapply_updates– автоматически скачивать и устанавливать обновления безопасности.
upgrade_type = security зависит от метаданных безопасности репозитория. Если уведомления о безопасности (security advisories) отсутствуют (что типично для свежей установки AlmaLinux 10), dnf-automatic с этой настройкой может вообще ничего не применить. Проверьте поддержку со стороны репозитория, прежде чем полагаться на обновления только безопасности в продакшене. В качестве альтернативы для продакшен-систем рассмотрите использование upgrade_type = security-severity:Critical или default-security.
2.3 Включение таймера systemd
Активируйте таймер, чтобы запланировать автоматизацию обновлений dnf.
Выполните следующую команду:
sudo systemctl enable --now dnf-automatic.timer
Вы должны увидеть вывод, указывающий на то, что таймер включен и запущен. Это активирует запланированные автоматические обновления пакетов для системы.
Шаг 3: Проверка конфигурации
После записи конфигурации ее необходимо проверить.
3.1 Проверка на Debian/Ubuntu
Выполните сухой запуск (dry run) для проверки конфигурации. Флаг -d (или --dry-run) запускает unattended-upgrades в режиме отладки (debug) – на самом деле ничего не меняется:
sudo unattended-upgrades --dry-run --debug
Флаг --dry-run выводит диагностическую информацию, но не изменяет никакие файлы. Убедитесь, что в очереди нет пакетов из черного списка.
На продакшене логи важнее сухих запусков. Проверьте, активны ли таймер и служба:
systemctl list-timers | grep apt systemctl status apt-daily-upgrade.service --no-pager
Затем проверьте последний вывод логов, чтобы подтвердить активность обновлений. На свеженастроенной системе лог может быть пустым. Для немедленной проверки выполните: sudo unattended-upgrade -v.
sudo tail -n 50 /var/log/unattended-upgrades/unattended-upgrades.log
3.2 Проверка таймера на RHEL/AlmaLinux
Проверьте статус таймера:
systemctl list-timers | grep dnf-automatic
Ожидаемый вывод:
Wed 2026-05-27 06:23:13 EEST 16h left - - dnf-automatic.timer dnf-automatic.service
Если таймер есть в списке, ваши обновления запланированы правильно.
3.3 Проверка необходимости перезагрузки
Обновления ядра и libc входят в очередь безопасности (например, в Debian linux-image-amd64 является частью обновлений безопасности). Поскольку установлено значение Automatic-Reboot=false, вам необходимо проверить, требуется ли ручная перезагрузка.
Для Debian/Ubuntu:
test -f /var/run/reboot-required && cat /var/run/reboot-required.pkgs
Для AlmaLinux/RHEL:
sudo dnf needs-restarting -r
3.4 Принудительный запуск для проверки
Вы можете не увидеть результат, пока не сработает таймер. Чтобы вручную запустить процесс обновления для проверки:
Для Debian/Ubuntu:
sudo unattended-upgrade -v
Для AlmaLinux/RHEL:
sudo dnf-automatic
Шаг 4: Расширенная настройка (уровень эксперта)
Чтобы соответствовать требованиям экспертного уровня, вы можете расширить настройку с помощью уведомлений и детального планирования расписания.
4.1 Email-уведомления
Чтобы получать отчеты об обновлениях:
Для Debian/Ubuntu:
В файле /etc/apt/apt.conf.d/50unattended-upgrades раскомментируйте и настройте:
Unattended-Upgrade::Mail "<YOUR_EMAIL>"; Unattended-Upgrade::MailReport "on-change";
Для AlmaLinux/RHEL:
В файле /etc/dnf/automatic.conf настройте раздел [email] и измените emitter:
[emitters] emit_via = email [email] email_from = [email protected] email_to = <YOUR_EMAIL> email_host = localhost
4.2 Расширенные таймеры dnf-automatic
dnf-automatic предлагает несколько таймеров для разделения этапов загрузки и установки, что обеспечивает больший контроль на продакшене:
- dnf-automatic.timer: таймер по умолчанию (скачивает и, если настроено, устанавливает).
- dnf-automatic-notifyonly.timer: только проверяет наличие обновлений и отправляет уведомление.
- dnf-automatic-download.timer: скачивает обновления, но не устанавливает их.
- dnf-automatic-install.timer: автоматически скачивает и устанавливает обновления (переопределяет параметр
apply_updatesв конфигурации).
Используйте конкретный таймер, соответствующий политике обслуживания вашего кластера.
Откат изменений
Чтобы отменить все внесенные изменения, просто удалите инструменты и конфигурации.
Debian/Ubuntu:
sudo apt purge unattended-upgrades -y sudo rm -rf /etc/apt/apt.conf.d/20auto-upgrades /var/log/unattended-upgrades/ /var/run/reboot-required* sudo mv /etc/apt/apt.conf.d/50unattended-upgrades.bak /etc/apt/apt.conf.d/50unattended-upgrades
RHEL/AlmaLinux:
sudo systemctl disable --now dnf-automatic.timer sudo mv /etc/dnf/automatic.conf.bak /etc/dnf/automatic.conf sudo dnf remove dnf-automatic -y
Удаление этих инструментов отключит автоматические обновления для всей системы, и серверы останутся уязвимыми, если их не обновлять вручную.
Заключение
На этом всё. Одна правильно настроенная система с unattended-upgrades или dnf-automatic, проверенная сухим запуском, – и дело сделано. Благодаря этой автоматизации исправлений безопасности автоматические обновления Linux применяются бесшовно, затраты на обслуживание остаются низкими, а обновления серверов Linux становятся предсказуемыми, а не реактивными. Для крупных сред сочетайте эту настройку с Infrastructure as Code и поэтапным развертыванием, чтобы избежать одновременного обновления каждого узла.
Версия документа: 1.0
Последнее обновление: Май 2026
Владелец: Команда технической документации