De fleste vellykkede serverindbrud sker ikke gennem raffinerede udnyttelser, men gennem en sårbarhed, hvis rettelse udkom for flere måneder siden. Årsagen er sjældent dovenskab: at opdatere i hånden føles risikabelt, fordi apt upgrade på en driftsserver undertiden genstarter ting, man ikke har bedt om at få genstartet. Automatiske opdateringer løser sagen, men de har et dårligt ry — fortjent præcis i det omfang, de sættes op i hast.
Lad os gennemgå en opsætning, hvor sikkerhedsrettelser kommer ind af sig selv, mens PHP-versionen ikke skiftes om natten.
Installation
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
Dialogen opretter /etc/apt/apt.conf.d/20auto-upgrades. Kontrollér, hvad der havnede der:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Ettallerne betyder »dagligt«. Alt dette startes af en systemd-timer, ikke af klassisk cron:
systemctl list-timers | grep apt
Det vigtigste: kun sikkerhed
Hovedfilen er /etc/apt/apt.conf.d/50unattended-upgrades. Der findes listen Allowed-Origins (på Debian Origins-Pattern), og som standard er kun sikkerhedsarkivet slået til. Lad det blive sådan.
Fristelsen til at fjerne kommentaren på linjen med -updates er stor — »lad alt blive opdateret«. Gør det ikke: opdateringsarkivet leverer nye versioner og ikke kun rettelser, og det er derfra, nattens overraskelser kommer. Sikkerhed og friskhed er forskellige opgaver, og den anden klares bedst i hånden, mens du sidder ved tastaturet.
Hvis en pakke ikke må opdateres automatisk, findes der en sortliste:
Unattended-Upgrade::Package-Blacklist {
"mariadb-server";
"php8.3-fpm";
};
Brug den bevidst: hver linje her betyder »denne pakke opdaterer jeg selv« — og det løfte skal holdes.
Genstarter
Nøglelinjen:
Unattended-Upgrade::Automatic-Reboot "false";
At lade false stå er rigtigt for en server med en hjemmeside: en genstart klokken tre om natten uden varsel er værre end en kernerettelse, der udsættes et døgn. Men den beslutning har en obligatorisk anden halvdel, som man glemmer.
Når kernen, libc eller openssl opdateres, opretter systemet filen /var/run/reboot-required. Så længe genstarten ikke er sket, ligger den rettede version på disken, mens den gamle kører i hukommelsen — sårbarheden er altså stadig der, selv om pakken tælles som opdateret. Det skal kontrolleres udtrykkeligt:
ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs
Den anden fil opregner præcis, hvad genstarten skyldes. Reglen er enkel: ser du flaget — planlæg et vindue inden for et til to døgn, ikke »engang«.
Et særligt tilfælde er biblioteker. openssl opdateres, mens nginx og PHP-FPM fortsætter med den gamle version i hukommelsen, og noget genstartsflag dukker ikke op. Hvem der rent faktisk skal genstartes, viser needrestart:
sudo apt install needrestart
sudo needrestart -b
Stil den blot om til tilstanden »vis, spørg ikke« — ellers begynder den at stille spørgsmål midt i en ikke-interaktiv installation og låser den. Til det lægger man i /etc/needrestart/conf.d/ en fil med linjen $nrconf{restart} = 'l';.
Kontrollér at det overhovedet virker
En prøvekørsel uden installation:
sudo unattended-upgrade --dry-run --debug
I outputtet ses, hvilke pakker der passer til reglerne, og hvilke der er forkastet og hvorfor. Hvad der rent faktisk skete, står i logfilerne:
sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log
Hvor mange opdateringer der venter lige nu:
apt list --upgradable 2>/dev/null | grep -i security
Den sidste kommando er den nyttigste af alle. Opsatte automatiske opdateringer har for vane at gå stille i stykker: pladsen på /boot løb tør, arkivet skiftede nøgle, timeren blev slået fra efter en manuel ændring. Udadtil er alt i orden, og rettelser installeres ikke i månedsvis.
Pladsen på /boot
En klassiker: gamle kerner slettes ikke, partitionen /boot fyldes, installationen af den nye kerne mislykkes, og opdateringerne standser helt. Hver tredje eller fjerde måned er det værd at se efter:
df -h /boot
sudo apt autoremove --purge
Eller slå automatisk oprydning til i samme 50unattended-upgrades: Remove-Unused-Kernel-Packages "true" og Remove-Unused-Dependencies "true".
Hvad der bliver tilbage til mennesket
Automatiske opdateringer fjerner rutinen, men ikke behovet for at holde øje. To spørgsmål, du skal kunne svare på når som helst: hvor mange sikkerhedsopdateringer der venter, og om genstartsflaget står. Begge svar er én linje på en side, og hele pointen er, at den linje skal havne foran øjnene af sig selv og ikke på dit eget initiativ én gang i kvartalet.