Automatyczne aktualizacje Linuksa: unattended-upgrades i dnf-automatic | INTROSERV
EUR
european

EUR

usa

USD

Poland Pl
Ex. VAT Ex. VAT 0%

Automatyczne aktualizacje Linuksa: konfiguracja unattended-upgrades i dnf-automatic do aktualizacji serwerów Linux

Poziom: Ekspert
Szacowany czas: ok. 30 minut
Cel: Skonfigurować skalowalne, bezprzestojowe automatyczne aktualizacje Linuksa przy użyciu unattended-upgrades i dnf-automatic, zgodnie z zasadami Infrastructure as Code.

Wprowadzenie

Ręczne instalowanie poprawek na serwerach to krytyczne wąskie gardło w zarządzaniu każdym środowiskiem produkcyjnym: bez automatyzacji niezawodne utrzymywanie setek węzłów w stanie zabezpieczonym i aktualnym byłoby bardzo trudne. Podatna aplikacja może zostać przejęta w ciągu kilku minut, a większość exploitów wykorzystuje dobrze znane, niezałatane luki. Aby uniknąć naruszeń bezpieczeństwa, trzeba na bieżąco instalować aktualizacje bezpieczeństwa (krytyczne poprawki wydawane w celu usunięcia znanych luk w oprogramowaniu). W tym poradniku skonfigurujemy automatyczne aktualizacje Linuksa na serwerze Linux za pomocą unattended-upgrades i dnf-automatic. To podejście ujednolica aktualizacje serwerów Linux.

Czym są unattended-upgrades i dnf-automatic?

unattended-upgrades to narzędzie dla Debiana/Ubuntu, które automatyzuje instalację aktualizacji bezpieczeństwa i innych aktualizacji pakietów.

dnf-automatic to komponent zapewniający automatyczne aktualizacje w systemach RHEL/CentOS/Fedora.

Narzędzia te pozwalają płynnie uruchamiać w tle automatyczne aktualizacje (proces pobierania i instalowania aktualizacji bez udziału człowieka). Zwykle są uruchamiane codziennie przez timer systemd (jednostkę systemd sterującą harmonogramem zadań, zastępującą tradycyjne zadania cron).

Wymagania wstępne

Przed rozpoczęciem upewnij się, że spełnione są następujące warunki:

  • System operacyjny: Ubuntu 20.04/22.04/24.04 LTS, Debian 12/13 lub RHEL/AlmaLinux 9/10
  • Dostęp: dostęp sudo lub root do serwera
  • Wymagania sieciowe: wychodzący dostęp HTTPS do repozytoriów pakietów (archive.ubuntu.com, security.debian.org, repo.almalinux.org)
  • Wymagana wiedza: zaawansowana znajomość administracji systemami, systemd oraz podstaw zarządzania poprawkami (proces dystrybucji i instalowania aktualizacji oprogramowania), a także zarządzania poprawkami w Linuksie.

Krok 1: Konfiguracja automatycznych aktualizacji Linuksa z unattended-upgrades

W systemach korzystających z APT (Advanced Package Tool) (podstawowego systemu zarządzania pakietami w dystrybucjach opartych na Debianie) używamy unattended-upgrades. To narzędzie płynnie wpisuje się w Twoją strategię zarządzania poprawkami w Linuksie.

1.1 Instalacja pakietu

Najpierw sprawdź i zainstaluj wymagany pakiet z repozytorium pakietów (scentralizowanej lokalizacji, z której pobierane i instalowane są pakiety oprogramowania).

Uruchom następujące polecenie:

sudo apt update && sudo apt install unattended-upgrades -y

Powinieneś zobaczyć komunikat potwierdzający instalację. Dzięki temu system jest gotowy do automatycznych aktualizacji APT.

1.2 Konfiguracja dozwolonych źródeł

Główny plik konfiguracyjny znajduje się w /etc/apt/apt.conf.d/50unattended-upgrades. Zmodyfikujemy konfigurację tak, aby instalowane były wyłącznie aktualizacje bezpieczeństwa. Minimalizuje to ryzyko zmian łamiących zgodność podczas automatycznych aktualizacji pakietów.

Przed wprowadzeniem zmian dobrą praktyką jest utworzenie kopii zapasowej oryginalnego pliku konfiguracyjnego:

sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak

Otwórz plik konfiguracyjny:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Całkowicie zastąp zawartość bloku Allowed-Origins i dopisz podane nazwy do bloku Package-Blacklist:

Dla Ubuntu:

Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; };

Dla Debiana:

Unattended-Upgrade::Origins-Pattern { "origin=Debian,codename=${distro_codename},label=Debian-Security"; "origin=Debian,codename=${distro_codename}-security,label=Debian-Security"; };

Następnie skonfiguruj czarną listę pakietów i zachowanie dotyczące restartu:

Unattended-Upgrade::Package-Blacklist { "^nginx$"; "^mysql-server$"; "^mariadb-server$"; "postgresql*"; "docker*"; }; Unattended-Upgrade::Automatic-Reboot "false";

Info

Package-Blacklist korzysta z wyrażeń regularnych. Wpis taki jak "nginx" pasuje także do nginx-common, nginx-extras itd. Aby wskazać wyłącznie konkretny pakiet, użyj kotwic regex, np. "^nginx$".

Ogranicza to automatyczne aktualizacje APT wyłącznie do poprawek bezpieczeństwa i wyklucza krytyczne pakiety z automatycznej aktualizacji, zmniejszając ryzyko przerw w działaniu usług przy zachowaniu automatyzacji poprawek bezpieczeństwa.

Warning

Aktualizacje jądra, libc i innych pakietów niskiego poziomu nadal mogą wymagać restartu. W środowiskach produkcyjnych pozostaw automatyczne restarty wyłączone, chyba że okna serwisowe są wymuszane przez orkiestrację.

1.3 Włączenie automatycznych aktualizacji

Utwórz plik auto-upgrades, aby aktywować timer systemd dla APT.

Otwórz plik:

sudo nano /etc/apt/apt.conf.d/20auto-upgrades

Wklej do niego poniższą zawartość:

APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1"; APT::Periodic::AutocleanInterval "7";

Ta konfiguracja nakazuje systemowi:

  • Update-Package-Lists "1" - codziennie aktualizować listy pakietów.
  • Unattended-Upgrade "1" - automatycznie wykonywać automatyczne aktualizacje APT.
  • AutocleanInterval "7" - czyścić pamięć podręczną pakietów co 7 dni.

Krok 2: Konfiguracja dnf-automatic dla aktualizacji serwerów Linux

W systemach korzystających z DNF (Dandified YUM) (menedżera pakietów nowej generacji w dystrybucjach opartych na RHEL) dnf-automatic zapewnia niezawodną automatyzację aktualizacji DNF.

2.1 Instalacja pakietu

Zainstaluj narzędzie do automatyzacji z repozytorium pakietów.

Uruchom następujące polecenie:

sudo dnf install dnf-automatic -y

Powinieneś zobaczyć komunikat potwierdzający pomyślną instalację pakietu do automatyzacji aktualizacji DNF.

2.2 Konfiguracja zasad aktualizacji

Główny plik konfiguracyjny znajduje się w /etc/dnf/automatic.conf. Skonfiguruj narzędzie tak, aby pobierało i instalowało wyłącznie aktualizacje bezpieczeństwa.

Przed wprowadzeniem zmian wykonaj kopię zapasową pliku konfiguracyjnego i sprawdź, czy dla Twojej dystrybucji dostępne są biuletyny bezpieczeństwa (security advisories):

sudo cp /etc/dnf/automatic.conf /etc/dnf/automatic.conf.bak sudo dnf updateinfo summary sudo dnf updateinfo list security

Otwórz plik konfiguracyjny:

sudo nano /etc/dnf/automatic.conf

Dostosuj następujące parametry:

[commands] upgrade_type = security random_sleep = 3600 download_updates = yes apply_updates = yes [emitters] emit_via = stdio

Ta konfiguracja nakazuje systemowi:

  • upgrade_type = security - uwzględniać wyłącznie poprawki bezpieczeństwa.
  • random_sleep = 3600 - losowo opóźniać uruchomienie nawet o 1 godzinę, rozkładając obciążenie w wielkoskalowych wdrożeniach Infrastructure as Code, aby uniknąć skoków obciążenia repozytoriów i jednoczesnych awarii kaskadowych.
  • download_updates i apply_updates - automatycznie pobierać i instalować aktualizacje bezpieczeństwa.

Info

upgrade_type = security zależy od metadanych bezpieczeństwa repozytorium. Jeśli biuletyny bezpieczeństwa są niedostępne (co jest typowe dla świeżej instalacji AlmaLinux 10), dnf-automatic z tym ustawieniem może nie zastosować żadnych aktualizacji. Zanim w środowisku produkcyjnym zaczniesz polegać na aktualizacjach wyłącznie bezpieczeństwa, sprawdź obsługę po stronie repozytorium. Alternatywnie w systemach produkcyjnych rozważ użycie upgrade_type = security-severity:Critical lub default-security.

2.3 Włączenie timera systemd

Aktywuj timer, aby zaplanować automatyzację aktualizacji DNF.

Uruchom następujące polecenie:

sudo systemctl enable --now dnf-automatic.timer

Powinieneś zobaczyć komunikat informujący, że timer został włączony i uruchomiony. Aktywuje to zaplanowane automatyczne aktualizacje pakietów w systemie.

Krok 3: Weryfikacja konfiguracji

Po zapisaniu konfiguracji należy ją zweryfikować.

3.1 Weryfikacja w Debianie/Ubuntu

Wykonaj uruchomienie próbne (dry run), aby zweryfikować konfigurację. Flaga -d (lub --dry-run) uruchamia unattended-upgrades w trybie debugowania - nic nie jest faktycznie zmieniane:

sudo unattended-upgrades --dry-run --debug

Info

Flaga --dry-run wypisuje informacje diagnostyczne, ale nie modyfikuje żadnych plików. Upewnij się, że w kolejce nie ma pakietów z czarnej listy.

W środowisku produkcyjnym logi są ważniejsze niż uruchomienia próbne. Sprawdź, czy timer i usługa są aktywne:

systemctl list-timers | grep apt systemctl status apt-daily-upgrade.service --no-pager

Następnie sprawdź ostatnie wpisy w logu, aby potwierdzić aktywność aktualizacji. W świeżo skonfigurowanym systemie log może być pusty. Aby sprawdzić od razu, uruchom: sudo unattended-upgrade -v.

sudo tail -n 50 /var/log/unattended-upgrades/unattended-upgrades.log

3.2 Weryfikacja timera w RHEL/AlmaLinux

Sprawdź status timera:

systemctl list-timers | grep dnf-automatic

Oczekiwany wynik:

Wed 2026-05-27 06:23:13 EEST 16h left - - dnf-automatic.timer dnf-automatic.service

Jeśli timer jest widoczny na liście, aktualizacje zostały zaplanowane poprawnie.

3.3 Sprawdzanie, czy potrzebny jest restart

Aktualizacje jądra i libc trafiają do kolejki aktualizacji bezpieczeństwa (na przykład w Debianie linux-image-amd64 jest częścią aktualizacji bezpieczeństwa). Ponieważ ustawiono Automatic-Reboot=false, musisz samodzielnie sprawdzić, czy wymagany jest ręczny restart.

Dla Debiana/Ubuntu:

test -f /var/run/reboot-required && cat /var/run/reboot-required.pkgs

Dla AlmaLinux/RHEL:

sudo dnf needs-restarting -r

3.4 Wymuszone uruchomienie w celu weryfikacji

Wynik może być niewidoczny, dopóki nie zadziała timer. Aby ręcznie uruchomić proces aktualizacji w celu weryfikacji:

Dla Debiana/Ubuntu:

sudo unattended-upgrade -v

Dla AlmaLinux/RHEL:

sudo dnf-automatic

Krok 4: Konfiguracja zaawansowana (poziom ekspercki)

Aby sprostać wymaganiom na poziomie eksperckim, możesz rozszerzyć konfigurację o powiadomienia i szczegółowe planowanie.

4.1 Powiadomienia e-mail

Aby otrzymywać raporty o aktualizacjach:

Dla Debiana/Ubuntu:

W pliku /etc/apt/apt.conf.d/50unattended-upgrades odkomentuj i dostosuj:

Unattended-Upgrade::Mail "<YOUR_EMAIL>"; Unattended-Upgrade::MailReport "on-change";

Dla AlmaLinux/RHEL:

W pliku /etc/dnf/automatic.conf skonfiguruj sekcję [email] i zmień emiter (emitter):

[emitters] emit_via = email [email] email_from = [email protected] email_to = <YOUR_EMAIL> email_host = localhost

4.2 Zaawansowane timery dnf-automatic

dnf-automatic udostępnia kilka timerów, które pozwalają rozdzielić fazy pobierania i instalacji, co zapewnia większą kontrolę w środowisku produkcyjnym:

  • dnf-automatic.timer: domyślny timer (pobiera i opcjonalnie instaluje, jeśli tak skonfigurowano).
  • dnf-automatic-notifyonly.timer: tylko sprawdza dostępność aktualizacji i wysyła powiadomienie.
  • dnf-automatic-download.timer: pobiera aktualizacje, ale ich nie instaluje.
  • dnf-automatic-install.timer: pobiera i automatycznie instaluje aktualizacje (nadpisuje ustawienie apply_updates w konfiguracji).

Użyj timera odpowiadającego polityce serwisowej Twojego klastra.

Wycofanie zmian (rollback)

Aby cofnąć wszystkie wykonane czynności, wystarczy usunąć narzędzia i konfiguracje.

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

Warning

Usunięcie tych narzędzi wyłączy automatyczne aktualizacje w całym systemie, pozostawiając serwery podatne na ataki, o ile nie będą łatane ręcznie.

Podsumowanie

To wszystko. Jeden prawidłowo skonfigurowany system z unattended-upgrades lub dnf-automatic, sprawdzony uruchomieniem próbnym - i gotowe. Dzięki tej automatyzacji poprawek bezpieczeństwa automatyczne aktualizacje Linuksa są stosowane bezproblemowo, nakład pracy utrzymaniowej pozostaje niski, a aktualizacje serwerów Linux stają się przewidywalne, zamiast być reaktywne. W większych środowiskach połącz tę konfigurację z Infrastructure as Code i etapowymi wdrożeniami, aby nie aktualizować wszystkich węzłów jednocześnie.

Wersja dokumentu: 1.0
Ostatnia aktualizacja: maj 2026
Właściciel: Zespół dokumentacji technicznej

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA