Röviden: A PHP-frissítés után újra kell indítania a PHP-FPM-et és az összes többi szolgáltatást, amely PHP-t tölt be. Az új fájlok a merevlemezen nem elegendők, amíg régi PHP-folyamatok futnak a memóriában. Csak az újraindítás után dolgozik a szerver a PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35 vagy a szolgáltatója backportjának javított kódjával.
Miért kell újraindítania a PHP-FPM-et
Egy csomagfrissítés a merevlemezen lévő fájlokat cseréli le. A már futó folyamatok azonban a régi programkódot már betöltötték a memóriába, és azzal dolgoznak tovább. A PHP-FPM, az Apache mod_php-val vagy a LiteSpeed a workereit gyakran napokig életben tartja.
A PHP2Shell esetében ez különösen fontos. A CVE-2026-109619 rés éppen azon az állapoton múlik, amely a kérések között ugyanabban a workerben megmarad. Egy régi kódú worker sebezhető marad, bármelyik verzió van a lemezen. A php.net szerint ezért minden workert és folyamatot újra kell indítani.
Egyes csomagkezelők a frissítéskor automatikusan újraindítják a szolgáltatásokat, mások nem. Ne bízzon ebben, hanem ellenőrizze az eredményt.
Egy tipikus kép a mindennapokból: a csomagkezelő azt jelenti, hogy „PHP frissítve“, a monitoring nem mutat hibát, a weboldal működik. Ennek ellenére a régi workerek továbbra is minden kérést kiszolgálnak, mert senki sem indította újra a szolgáltatást. Kívülről ez az állapot nem ismerhető fel. Ezért minden frissítéshez hozzátartozik a folyamatok indulási idejének ellenőrzése.
Mely szolgáltatások töltenek be PHP-t?
| Üzemmód | Mit kell újraindítani | Tipikus parancs (a nevek disztribúciónként eltérnek) |
|---|---|---|
| PHP-FPM | minden FPM-szolgáltatást, telepített verziónként | systemctl restart php8.3-fpm vagy systemctl restart php-fpm |
| Apache mod_php-val | az Apache-ot | systemctl restart apache2 vagy systemctl restart httpd |
| php-cgi | a hívó webszervert, illetve a FastCGI-wrappert | a beállítástól függően |
| LiteSpeed | a LiteSpeedet és az lsphp-folyamatokat | a LiteSpeed-kezelőfelületen vagy szolgáltatásán keresztül |
| FrankenPHP | a FrankenPHP szolgáltatást vagy konténert | systemctl restart frankenphp vagy a konténer újralétrehozása |
| Docker, Kubernetes | a konténereket új image-ből újra létrehozni | lásd PHP javítása Docker-konténerekben |
A mod_php esetében: a frissítés magát az Apache-ot érinti, mert a PHP minden Apache-folyamatban benne van. Hogy miért különösen kényes ez az üzemmód, azt a Miért a mod_php viseli a legnagyobb kockázatot oldal írja le. A LiteSpeedről a LiteSpeed és LSAPI oldalon talál részleteket.
A PHP-FPM újraindítása: a parancsok
Először keresse meg a szerveren az összes PHP-szolgáltatást. A Plesk, a cPanel és más felületek saját PHP-szolgáltatásokat hoznak magukkal saját nevekkel; a lista ezeket is megmutatja.
systemctl list-units --type=service | grep -i -E "php|lsws|litespeed|frankenphp|apache2|httpd"
Ezután minden megtalált PHP-szolgáltatást indítson újra, ne csak az elsőt:
sudo systemctl restart php8.3-fpm
sudo systemctl restart php8.2-fpm # ha telepítve van egy második ág
sudo systemctl restart apache2 # mod_php esetén; RHEL-család: httpd
A restartot ajánljuk a reload helyett. A reloadnál a főfolyamat megmarad; ez konfigurációs változtatásokhoz való. Egy biztonsági frissítés után biztosra akar menni, hogy minden folyamat új.
Ha emellett átmeneti intézkedéseket is beállított, például session.upload_progress.enabled=0 értéket vagy rögzített memóriahatárokat, ezek is csak az újraindítás után érvényesülnek. Egy újraindítás mindkettőt elvégzi egy lépésben.
Az ellenőrzés, hogy nem fut már régi worker
Vesse össze a folyamatok indulási idejét a frissítés időpontjával. Minden parancs kizárólag olvasó.
ps -o pid,lstart,cmd -C php-fpm8.3 # unter RHEL: -C php-fpm
systemctl status php8.3-fpm # a „Active: … since …“ sor
needrestart -r l # Debian/Ubuntu, ha telepítve van
Ha egy folyamat régebbi a frissítésnél, azt nem fogta el az újraindítás. Gyakori okok az elfelejtett második PHP-ág, egy hosting-panelből származó saját pool-szolgáltatás, vagy egy konténer, amelyet csak újraindítottak, ahelyett hogy az új image-ből hoztak volna létre. Hogy a helyes verzió fut-e, azt a PHP-verzió és javítási állapot helyes ellenőrzése oldal mutatja.
Az újraindítás dokumentálása
Szerverenként jegyezze fel a frissítés és az újraindítás időpontját. Ez a pillanat választja el azt az időt, amikor a szerver sebezhető volt, attól, ami utána jön. Egy későbbi nyomellenőrzéshez, a biztosítóknak és egy lehetséges GDPR szerinti bejelentéshez ez a legfontosabb vonatkoztatási pont. Őrizze meg emellett a szervernaplókat október 20-tól, ahogy a szakmai sajtó ajánlja.
Sok weboldalt kiszolgáló szervereken érdemes egy rövid táblázatot vezetni: szerver, szolgáltatás, PHP-verzió, csomagverzió, az újraindítás időpontja és a személy, aki újraindított. Így gyorsan feltűnnek a lefedettség hézagai, például egy elfelejtett pool, vagy egy tesztrendszer, amely senki jegyzékén nem szerepelt.
Hogyan segít konkrétan a PHP SOS?
A PHP-javítási szolgáltatás keretében a frissítést és az újraindítást összefüggő folyamatként vesszük át:
- A szolgáltatások megállapítása: Megtalálunk minden PHP-t betöltő folyamatot, a hosting-panelekből és konténerekből származókat is.
- Ellenőrzött újraindítás, Önnel egyeztetve megfelelő időpontban, a folyamatban lévő rendelésekre vagy űrlapokra tekintettel.
- Utóellenőrzés, hogy egyetlen folyamat sem régebbi a frissítésnél, és a weboldal normálisan válaszol.
- Jegyzőkönyvezés: verziók, csomagállapotok és újraindítási időpontok szerverenként.
Gyakori kérdések
Elég a systemctl reload a restart helyett?
A PHP2Shell esetében a restartot ajánljuk. A reload a workereket többnyire újraindítja ugyan, de a főfolyamat tovább futhat. A restarttal biztos lehet benne, hogy nem marad folyamat régi kóddal. A rövid megszakítással szemben világos igazolás áll.
Újra kell indítanom az egész szervert a PHP-frissítés után?
Általában nem. Elég újraindítani az összes szolgáltatást, amely PHP-t tölt be: a PHP-FPM-et, mod_php esetén az Apache-ot, a LiteSpeedet, a FrankenPHP-t vagy az érintett konténereket. Az egész szerver újraindítása az egyszerű változat, ha bizonytalan abban, mely szolgáltatások használnak PHP-t.
Újraindítja a tárhelyszolgáltatóm automatikusan a PHP-t a frissítés után?
Ez a szolgáltatótól függ. Kérdezzen rá konkrétan, hogy a javítás után újraindították-e az összes PHP-folyamatot, és kérje ennek írásos megerősítését.