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.