Automatické aktualizace na Ubuntu: unattended-upgrades bez obav
Nastavte unattended-upgrades jen pro bezpečnostní záplaty, automatický restart v noci, výjimky pro kritické balíčky a kontrolu, že aktualizace opravdu běží.
Většina napadených serverů nepadne kvůli sofistikovanému útoku, ale kvůli známé zranitelnosti, na kterou dávno existuje záplata. Ubuntu má pro automatickou instalaci bezpečnostních aktualizací nástroj unattended-upgrades. Správně nastavený vám ušetří práci a riziko je minimální.
Instalace a zapnutí
Na Ubuntu Server je balíček obvykle už nainstalovaný. Pro jistotu:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Druhý příkaz vytvoří (nebo upraví) soubor /etc/apt/apt.conf.d/20auto-upgrades:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
1 znamená „každý den“.
Hlavní konfigurace
Nastavení je v /etc/apt/apt.conf.d/50unattended-upgrades. Nejdůležitější je sekce povolených zdrojů:
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
// "${distro_id}:${distro_codename}-updates";
};
Výchozí nastavení instaluje jen bezpečnostní aktualizace (-security). Řádek -updates (běžné opravy chyb) je zakomentovaný. Pro produkční server je to rozumné – bezpečnostní záplaty jsou malé a cílené.
Konfigurační soubor patří balíčku. Abyste se vyhnuli konfliktům při jeho aktualizaci, můžete vlastní nastavení dát do samostatného souboru s vyšším číslem, např. /etc/apt/apt.conf.d/52unattended-upgrades-local. Pozor ale: seznamy jako Allowed-Origins nebo Package-Blacklist se ze všech souborů slučují, takže položku z výchozího souboru takto neodeberete. Jednoduché volby ("true", čas) z pozdějšího souboru výchozí hodnotu přepíšou.
Užitečné volby
// Nikdy automaticky neaktualizovat tyto balíčky (regulární výrazy)
Unattended-Upgrade::Package-Blacklist {
"mariadb-server";
"docker-ce";
};
// Odstranit nepotřebné závislosti a stará jádra
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
// Automatický restart, pokud je potřeba (nové jádro, libc)
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
// Upozornění e-mailem (vyžaduje funkční odesílání pošty)
Unattended-Upgrade::Mail "[email protected]";
Unattended-Upgrade::MailReport "only-on-error";
Restartovat automaticky, nebo ne?
Aktualizace jádra se projeví až po restartu. Bez něj server běží se zranitelným jádrem dál.
| Přístup | Kdy se hodí |
|---|---|
Automatic-Reboot "true" v noci |
samostatný VPS s webem, krátký výpadek ve 4:00 nevadí |
| Ruční restart | databázový server, služby, které po startu vyžadují zásah |
| Livepatch (Ubuntu Pro) | záplaty jádra bez restartu u podporovaných jader |
Pokud restartujete ručně, kontrolujte, jestli je restart potřeba:
cat /var/run/reboot-required 2>/dev/null
cat /var/run/reboot-required.pkgs 2>/dev/null
Když necháte automatický restart zapnutý, ujistěte se, že všechny služby mají systemctl enable a po startu naběhnou samy. Otestujte si to jedním ručním restartem.
Restart služeb po aktualizaci knihoven
Když se aktualizuje třeba OpenSSL, běžící procesy dál používají starou verzi v paměti. Ubuntu na to má needrestart, který po aktualizaci zjistí, které služby restartovat. V Ubuntu 24.04 je ve výchozím stavu nastavený tak, aby služby restartoval automaticky. Ručně:
sudo needrestart -r l # jen vypsat
Test nanečisto
sudo unattended-upgrade --dry-run --debug
Výstup ukáže, které zdroje jsou povolené a které balíčky by se instalovaly. Hledejte řádky Allowed origins are: a Packages that will be upgraded:.
Ověření, že aktualizace běží
Spouštění řídí systemd timery:
systemctl list-timers apt-daily.timer apt-daily-upgrade.timer
Logy:
less /var/log/unattended-upgrades/unattended-upgrades.log
grep -h "upgrade " /var/log/dpkg.log | tail
Časté problémy
Zamčený dpkg – po startu serveru můžete narazit na Could not get lock /var/lib/dpkg/lock-frontend. Právě běží automatická aktualizace. Počkejte pár minut; zámek ručně nemažte.
Balíčky z cizích repozitářů se neaktualizují – PPA nebo repozitář Dockeru nejsou v Allowed-Origins. Můžete je přidat (zdroj zjistíte přes apt-cache policy <balíček>), ale zvažte riziko neotestovaných aktualizací.
Přerušené aktualizace – pokud server restartujete během aktualizace, zkontrolujte stav:
sudo dpkg --configure -a
sudo apt -f install
Doporučené minimum
- Zapnuté
unattended-upgradesjen pro-security. - Automatický restart v noci, nebo pravidelná ruční kontrola
reboot-required. - Jednou za čas
sudo apt update && sudo apt upgraderučně pro ostatní opravy. - Pravidelné zálohy – kdyby aktualizace přece jen něco rozbila.