De fleste vellykkede serverinnbrudd skjer ikke gjennom raffinerte utnyttelser, men gjennom en sårbarhet som fikk en oppdatering for flere måneder siden. Årsaken er sjelden latskap: å oppdatere for hånd føles risikabelt, fordi apt upgrade på en driftsserver iblant starter om ting man ikke ba den om å starte om. Automatiske oppdateringer løser saken, men de har dårlig rykte — fortjent nøyaktig i den grad de settes opp i hui og hast.
La oss gå gjennom et oppsett der sikkerhetsoppdateringene kommer inn av seg selv, mens PHP-versjonen ikke byttes om natten.
Installasjon
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
Dialogen oppretter /etc/apt/apt.conf.d/20auto-upgrades. Kontroller hva som havnet der:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Ettallene betyr «daglig». Alt dette startes av en systemd-timer, ikke av klassisk cron:
systemctl list-timers | grep apt
Det viktigste: bare sikkerhet
Hovedfilen er /etc/apt/apt.conf.d/50unattended-upgrades. Der finnes listen Allowed-Origins (på Debian Origins-Pattern), og som standard er bare sikkerhetsarkivet slått på. La det bli slik.
Fristelsen til å fjerne kommentaren på linjen med -updates er stor — «la alt oppdateres». Ikke gjør det: oppdateringsarkivet leverer nye versjoner og ikke bare rettelser, og det er derfra nattens overraskelser kommer. Sikkerhet og ferskhet er ulike oppgaver, og den andre gjøres best for hånd mens du sitter ved tastaturet.
Hvis en pakke ikke kan oppdateres automatisk, finnes det en svarteliste:
Unattended-Upgrade::Package-Blacklist {
"mariadb-server";
"php8.3-fpm";
};
Bruk den bevisst: hver linje her betyr «denne pakken oppdaterer jeg selv» — og det løftet må holdes.
Omstarter
Nøkkellinjen:
Unattended-Upgrade::Automatic-Reboot "false";
Å la false stå er riktig for en server med et nettsted: en omstart klokken tre om natten uten forvarsel er verre enn en kjerneoppdatering som utsettes ett døgn. Men den beslutningen har en obligatorisk andre halvdel som man glemmer.
Når kjernen, libc eller openssl oppdateres, oppretter systemet filen /var/run/reboot-required. Så lenge omstarten ikke har skjedd, ligger den rettede versjonen på disken mens den gamle kjører i minnet — sårbarheten er altså fortsatt der, selv om pakken regnes som oppdatert. Det må kontrolleres uttrykkelig:
ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs
Den andre filen lister nøyaktig hva omstarten skyldes. Regelen er enkel: ser du flagget — planlegg et vindu innen ett eller to døgn, ikke «en gang».
Et eget tilfelle er biblioteker. openssl oppdateres mens nginx og PHP-FPM fortsetter å kjøre den gamle versjonen i minnet, og noe omstartsflagg dukker ikke opp. Hvem som faktisk må startes på nytt, viser needrestart:
sudo apt install needrestart
sudo needrestart -b
Bare still den om til modusen «vis, ikke spør» — ellers begynner den å stille spørsmål midt i en ikke-interaktiv installasjon og låser den. Til det legger man i /etc/needrestart/conf.d/ en fil med linjen $nrconf{restart} = 'l';.
Kontroller at det i det hele tatt virker
En prøvekjøring uten installasjon:
sudo unattended-upgrade --dry-run --debug
I utdataene ses hvilke pakker som passer reglene, og hvilke som er forkastet og hvorfor. Hva som faktisk skjedde, står i loggene:
sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log
Hvor mange oppdateringer som venter akkurat nå:
apt list --upgradable 2>/dev/null | grep -i security
Den siste kommandoen er den nyttigste av alle. Oppsatte automatiske oppdateringer har for vane å gå stille i stykker: plassen på /boot tok slutt, arkivet byttet nøkkel, timeren ble slått av etter en manuell endring. Utad er alt i orden, og oppdateringer installeres ikke på måneder.
Plassen på /boot
En klassiker: gamle kjerner slettes ikke, partisjonen /boot fylles, installasjonen av den nye kjernen mislykkes, og oppdateringene stopper helt. Hver tredje eller fjerde måned er det verdt å se etter:
df -h /boot
sudo apt autoremove --purge
Eller slå på automatisk opprydding i samme 50unattended-upgrades: Remove-Unused-Kernel-Packages "true" og Remove-Unused-Dependencies "true".
Hva som blir igjen til mennesket
Automatiske oppdateringer fjerner rutinen, men ikke behovet for å følge med. To spørsmål du skal kunne svare på når som helst: hvor mange sikkerhetsoppdateringer som venter, og om omstartsflagget står. Begge svarene er én linje på en side, og hele poenget er at den linjen skal havne foran øynene av seg selv og ikke på ditt eget initiativ én gang i kvartalet.