Većina uspešnih provala servera ne dešava se preko domišljatih eksploatacija nego preko ranjivosti čija je zakrpa izašla nekoliko meseci ranije. Uzrok obično nije lenjost: ručno ažuriranje na radnom serveru je zastrašujuće, jer apt upgrade ponekad ponovo pokrene stvari koje niko nije tražio. Automatska ažuriranja zatvaraju to pitanje, ali imaju lošu reputaciju — zasluženu tačno u meri u kojoj se podešavaju na brzinu.

Pređimo kroz raspored u kojem bezbednosne zakrpe stižu same, a verzija PHP-a se preko noći ne menja.

Instalacija

sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades

Dijalog kreira /etc/apt/apt.conf.d/20auto-upgrades. Proverite šta je iz njega ispalo:

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

Jedinice znače „svakodnevno". Sve to pokreće systemd tajmer, a ne klasični cron:

systemctl list-timers | grep apt

Glavno: samo bezbednost

Glavni fajl je /etc/apt/apt.conf.d/50unattended-upgrades. Sadrži listu Allowed-Origins (na Debianu Origins-Pattern), a podrazumevano je tamo uključeno samo bezbednosno skladište. Ostavite to tako.

Iskušenje da otkomentarišete red -updates — „neka se sve ažurira" — jako je. Nemojte: skladište ažuriranja donosi nove verzije, a ne samo ispravke, i upravo odatle dolaze noćna iznenađenja. Bezbednost i svežina su različiti poslovi, a drugi se bolje radi rukom dok ste za tastaturom.

Ako se neki paket ne sme ažurirati automatski, za to postoji crna lista:

Unattended-Upgrade::Package-Blacklist {
    "mariadb-server";
    "php8.3-fpm";
};

Koristite je svesno: svaki red ovde znači „ovo ažuriram sam" — a to je obećanje koje ćete morati da održite.

Ponovna pokretanja

Ključni red:

Unattended-Upgrade::Automatic-Reboot "false";

Ostaviti ga na false ispravno je za server sa sajtom: nenajavljeno ponovno pokretanje u tri ujutru gore je od zakrpe odložene za jedan dan. Ali ta odluka ima obaveznu drugu polovinu, i to je polovina koja se zaboravlja.

Kada se ažuriraju jezgro, libc ili openssl, sistem kreira fajl /var/run/reboot-required. Dok se ne izvrši ponovno pokretanje, ispravljena verzija je na disku a stara radi u memoriji — to jest ranjivost nije nikuda otišla, iako se paket smatra ažuriranim. Proverite izričito:

ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs

Drugi fajl navodi tačno šta je učinilo ponovno pokretanje neophodnim. Pravilo je jednostavno: čim vidite zastavicu, isplanirajte prozor u naredna dan-dva, a ne „nekad".

Biblioteke su poseban slučaj. openssl se ažurira dok nginx i PHP-FPM nastavljaju da rade sa starom verzijom u memoriji, a nikakva zastavica ponovnog pokretanja se ne pojavljuje. Kome treba ponovno pokretanje pokazuje needrestart:

sudo apt install needrestart
sudo needrestart -b

Samo ga stavite u režim „javi, ne pitaj" — inače će početi da postavlja pitanja usred neinteraktivne instalacije i obesiti je. Za to ostavite fajl u /etc/needrestart/conf.d/ sa redom $nrconf{restart} = 'l';.

Proverite da li uopšte radi

Probno pokretanje bez instalacije:

sudo unattended-upgrade --dry-run --debug

Izlaz pokazuje koji paketi odgovaraju pravilima i koji su odbijeni i zašto. Šta se zaista dogodilo nalazi se u dnevnicima:

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

Koliko ažuriranja čeka upravo sada:

apt list --upgradable 2>/dev/null | grep -i security

Ta poslednja komanda najkorisnija je od svih. Podešena automatska ažuriranja imaju naviku da se tiho pokvare: /boot se napunio, skladište je promenilo ključ, tajmer je isključen posle neke ručne izmene. Spolja je sve u redu, a zakrpe nisu instalirane mesecima.

Prostor na /boot

Klasika: stara jezgra se ne uklanjaju, particija /boot se puni, instalacija novog jezgra ne uspeva i ažuriranja staju u celini. Jednom u nekoliko meseci vredi pogledati:

df -h /boot
sudo apt autoremove --purge

Ili uključite automatsko čišćenje u istom 50unattended-upgrades: Remove-Unused-Kernel-Packages "true" i Remove-Unused-Dependencies "true".

Šta ostaje čoveku

Automatska ažuriranja uklanjaju rutinu ali ne i praćenje. Dva pitanja na koja u svakom trenutku treba da umete da odgovorite: koliko bezbednosnih ažuriranja čeka i da li je postavljena zastavica ponovnog pokretanja. Oba odgovora su po jedan red na stranici, a sav smisao je u tome da vam taj red sam zapadne za oko umesto na vašu inicijativu jednom u tri meseca.