Автоматичні оновлення 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
Власник: Команда технічної документації