A sikeres szerverbetörések többsége nem kifinomult exploitokon keresztül történik, hanem olyan sebezhetőségen, amelyhez hónapokkal ezelőtt jelent meg javítás. Az ok általában nem lustaság: kézzel frissíteni ijesztő, mert az apt upgrade egy éles szerveren néha olyat is újraindít, amit senki nem kért. Az automatikus frissítések megoldják a kérdést, de rossz hírük van — pontosan olyan mértékben megérdemelten, amennyire kapkodva állítják be őket.
Nézzük végig azt a beállítást, amelynél a biztonsági javítások maguktól érkeznek, a PHP verziója viszont éjjel nem változik meg.
Telepítés
sudo apt install unattended-upgrades apt-listchanges
sudo dpkg-reconfigure -plow unattended-upgrades
A párbeszédablak létrehozza az /etc/apt/apt.conf.d/20auto-upgrades fájlt. Ellenőrizd, mi került bele:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
Az egyesek jelentése „naponta”. Mindezt systemd-időzítő indítja, nem a klasszikus cron:
systemctl list-timers | grep apt
A lényeg: csak biztonság
A fő fájl az /etc/apt/apt.conf.d/50unattended-upgrades. Ebben van az Allowed-Origins lista (Debianon Origins-Pattern), és alapból kizárólag a biztonsági tároló van bekapcsolva. Hagyd is így.
A kísértés nagy, hogy kikommentezd a -updates sort — „frissüljön minden”. Ne tedd: a frissítési tároló új verziókat hoz, nem csak javításokat, és éppen onnan érkeznek az éjszakai meglepetések. A biztonság és a frissesség különböző feladatok, és a másodikat jobb kézzel elvégezni, amikor a billentyűzetnél ülsz.
Ha valamelyik csomagot nem szabad automatikusan frissíteni, van rá feketelista:
Unattended-Upgrade::Package-Blacklist {
"mariadb-server";
"php8.3-fpm";
};
Tudatosan használd: minden sor itt azt jelenti, hogy „ezt a csomagot magam frissítem” — és ezt az ígéretet teljesíteni is kell.
Újraindítások
A kulcssor:
Unattended-Upgrade::Automatic-Reboot "false";
A false meghagyása helyes egy webhelyet futtató szerveren: a hajnali három órai, előzetes figyelmeztetés nélküli újraindítás rosszabb, mint egy nappal elhalasztott kernelfrissítés. Ennek a döntésnek azonban van egy kötelező második fele, amelyről meg szoktak feledkezni.
Amikor a kernel, a libc vagy az openssl frissül, a rendszer létrehozza a /var/run/reboot-required fájlt. Amíg nem történt újraindítás, a lemezen a javított verzió van, a memóriában viszont a régi fut — a sebezhetőség tehát sehová nem tűnt, noha a csomag frissítettként szerepel. Ezt kifejezetten ellenőrizni kell:
ls -l /var/run/reboot-required
cat /var/run/reboot-required.pkgs
A második fájl felsorolja, pontosan mi miatt szükséges az újraindítás. A szabály egyszerű: ha látod a jelzést — tervezz ablakot a következő egy-két napra, ne „valamikorra”.
Külön eset a könyvtárak. Frissült az openssl, az nginx és a PHP-FPM viszont továbbra is a régi verzióval fut a memóriában, és eközben semmilyen újraindítási jelzés nem jelenik meg. Hogy pontosan mit kell újraindítani, azt a needrestart mutatja meg:
sudo apt install needrestart
sudo needrestart -b
Csak állítsd át „mutasson, ne kérdezzen” üzemmódba — különben nem interaktív telepítés közepén kezd kérdezni, és megakasztja azt. Ehhez az /etc/needrestart/conf.d/ könyvtárba kerül egy fájl a $nrconf{restart} = 'l'; sorral.
Ellenőrizd, hogy egyáltalán működik-e
Próbafuttatás telepítés nélkül:
sudo unattended-upgrade --dry-run --debug
A kimenetben látszik, mely csomagok felelnek meg a szabályoknak, és melyeket vetett el, és miért. Hogy valójában mi történt — a naplókban:
sudo tail -50 /var/log/unattended-upgrades/unattended-upgrades.log
Hány frissítés vár éppen most:
apt list --upgradable 2>/dev/null | grep -i security
Ez az utolsó parancs a leghasznosabb mind közül. A beállított automatikus frissítéseknek megvan az a szokásuk, hogy csendben elromlanak: elfogyott a hely a /boot partíción, a tároló kulcsot cserélt, az időzítőt egy kézi módosítás után kikapcsolták. Kívülről minden rendben, a javítások viszont hónapokig nem települnek.
Hely a /boot partíción
Klasszikus: a régi kernelek nem törlődnek, a /boot partíció megtelik, az új kernel telepítése elbukik, és a frissítések teljesen leállnak. Néhány havonta érdemes ránézni:
df -h /boot
sudo apt autoremove --purge
Vagy kapcsold be az automatikus takarítást ugyanabban az 50unattended-upgrades fájlban: Remove-Unused-Kernel-Packages "true" és Remove-Unused-Dependencies "true".
Mi marad az emberre
Az automatikus frissítések leveszik a rutint, de nem helyettesítik a figyelést. Két kérdés, amelyre bármikor tudni kell a választ: hány biztonsági frissítés vár telepítésre, és fel van-e állítva az újraindítási jelzés. Mindkét válasz egyetlen sor egy oldalon, és az egész lényeg az, hogy ez a sor magától kerüljön a szemed elé, ne a te kezdeményezésedre negyedévente egyszer.