Väčšina úspešných prienikov na servery sa nedeje cez rafinované exploity, ale cez zraniteľnosť, ku ktorej vyšla záplata pred niekoľkými mesiacmi. Príčinou zvyčajne nie je lenivosť: aktualizovať ručne je strašidelné, lebo apt upgrade na prevádzkovom serveri občas reštartuje to, čo nikto reštartovať nežiadal. Automatické aktualizácie vec riešia, ale majú zlú povesť — zaslúženú presne v tej miere, v akej sa nastavujú narýchlo.
Prejdime si nastavenie, pri ktorom bezpečnostné záplaty prichádzajú samy a verzia PHP sa v noci nemení.
Inštalácia
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
Dialóg vytvorí /etc/apt/apt.conf.d/20auto-upgrades. Skontrolujte, čo v ňom vzniklo:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Jednotky znamenajú „denne“. Celé to spúšťa časovač systemd, nie klasický cron:
systemctl list-timers | grep apt
Hlavná vec: len bezpečnosť
Hlavný súbor je /etc/apt/apt.conf.d/50unattended-upgrades. Je v ňom zoznam Allowed-Origins (na Debiane Origins-Pattern) a v predvolenom stave je tam zapnutý iba bezpečnostný repozitár. Tak to nechajte.
Pokušenie odkomentovať riadok s -updates je veľké — „nech sa aktualizuje všetko“. Nerobte to: repozitár aktualizácií prináša nové verzie, nielen opravy, a práve odtiaľ prilietajú nočné prekvapenia. Bezpečnosť a novosť sú rôzne úlohy a druhá sa lepšie robí ručne, keď sedíte pri klávesnici.
Ak nejaký balík nesmie byť aktualizovaný automaticky, je na to čierna listina:
Unattended-Upgrade::Package-Blacklist {
"mariadb-server";
"php8.3-fpm";
};
Používajte ju uvedomele: každý riadok tu znamená „tento balík aktualizujem sám“ — a ten sľub bude treba plniť.
Reštarty
Kľúčový riadok:
Unattended-Upgrade::Automatic-Reboot "false";
Ponechať false je pre server s webom správne: reštart o tretej ráno bez varovania je horší než o deň odložená záplata jadra. Toto rozhodnutie má však povinnú druhú polovicu, na ktorú sa zabúda.
Keď sa aktualizuje jadro, libc alebo openssl, systém vytvorí súbor /var/run/reboot-required. Kým reštart neprebehol, na disku leží opravená verzia a v pamäti beží stará — zraniteľnosť teda nikam nezmizla, hoci balík je vedený ako aktualizovaný. Kontrolovať treba výslovne:
ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs
Druhý súbor vymenúva, kvôli čomu presne je reštart potrebný. Pravidlo je jednoduché: uvideli ste príznak — naplánujte okno na najbližší deň až dva, nie „niekedy“.
Zvláštnym prípadom sú knižnice. Aktualizoval sa openssl, ale nginx a PHP-FPM ďalej bežia so starou verziou v pamäti a pritom sa žiadny príznak reštartu neobjaví. Kto presne reštart potrebuje, ukáže needrestart:
sudo apt install needrestart
sudo needrestart -b
Len ho prepnite do režimu „ukazovať, nie pýtať sa“ — inak sa začne pýtať uprostred neinteraktívnej inštalácie a zasekne ju. Na to sa do /etc/needrestart/conf.d/ uloží súbor s riadkom $nrconf{restart} = 'l';.
Overiť, že to vôbec funguje
Skúšobný beh bez inštalácie:
sudo unattended-upgrade --dry-run --debug
Vo výstupe je vidieť, ktoré balíky vyhovujú pravidlám a ktoré boli zamietnuté a prečo. Čo sa naozaj dialo — v logoch:
sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log
Koľko aktualizácií čaká práve teraz:
apt list --upgradable 2>/dev/null | grep -i security
Posledný príkaz je zo všetkých najužitočnejší. Nastavené automatické aktualizácie majú vo zvyku sa ticho pokaziť: došlo miesto na /boot, repozitár zmenil kľúč, časovač bol po nejakej ručnej úprave vypnutý. Navonok je všetko v poriadku a záplaty sa neinštalujú mesiace.
Miesto na /boot
Klasika: staré jadrá sa nemažú, oddiel /boot sa zaplní, inštalácia nového jadra zlyhá a aktualizácie sa zastavia úplne. Raz za pár mesiacov sa oplatí nazrieť:
df -h /boot
sudo apt autoremove --purge
Alebo zapnúť automatické čistenie v tom istom 50unattended-upgrades: Remove-Unused-Kernel-Packages "true" a Remove-Unused-Dependencies "true".
Čo zostáva na človeku
Automatické aktualizácie zbavujú rutiny, ale nenahrádzajú sledovanie. Dve otázky, na ktoré treba vedieť kedykoľvek odpovedať: koľko bezpečnostných aktualizácií čaká na inštaláciu a či je nastavený príznak reštartu. Obe odpovede sú jeden riadok na stránke a celý zmysel je v tom, aby ten riadok padol do oka sám, a nie z vašej iniciatívy raz za štvrťrok.