Stručne: Ak na serveri beží viac verzií PHP, treba po PHP2Shell každú skontrolovať, aktualizovať a reštartovať zvlášť. Typické zdroje sú operačný systém, hostingové panely ako Plesk alebo cPanel, externé zdroje ako sury.org alebo Remi, CloudLinux, LiteSpeed a verzie zostavené vlastnoručne. Až úplný zoznam z balíkov, súborov a bežiacich procesov ukáže, či sa naozaj nezabudlo na žiadnu verziu.
Zabudnutá verzia
Server, ktorý beží niekoľko rokov, zbiera verzie PHP ako povala staré kusy nábytku. Panel priniesol tri vetvy, pre jedného zákazníka pribudla staršia verzia z externého zdroja, operačný systém má svoju vlastnú. Každá z nich bola raz nainštalovaná z dobrého dôvodu. Len dnes už nikto nevie, ktorá sa ešte používa.
Po PHP2Shell je to presne problém. Opravy vyšli 21. októbra 2026 pre PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Každá inštalácia na serveri ich však dostáva vlastnou cestou, od vlastného správcu balíkov a vo vlastnom čase. Pre PHP 8.1 a staršie existujú len minimálne backporty zdrojového kódu. Kto aktualizuje len hlavnú verziu, nechá ostatné otvorené.
Odkiaľ sa berie toľko verzií
Nasledujúci prehľad uvádza typické zdroje a príklady ciest. Presné cesty sa líšia podľa verzie a distribúcie.
| Zdroj | Príklad cesty | Kto dodáva záplatu |
|---|---|---|
| Operačný systém Debian/Ubuntu | /usr/bin/php8.3, /etc/php/8.3/ |
distribúcia |
| Operačný systém rodiny RHEL | /usr/bin/php, /etc/php-fpm.d/ |
distribúcia |
| Plesk | /opt/plesk/php/8.3/ |
Plesk |
| cPanel (EasyApache 4) | /opt/cpanel/ea-php83/ |
cPanel |
| CloudLinux alt-php | /opt/alt/php83/ |
CloudLinux |
| Remi Software Collection | /opt/remi/php83/ |
Remi |
| sury.org | /usr/bin/php8.3 ako pri systéme |
sury.org |
| LiteSpeed | /usr/local/lsws/lsphp83/ |
LiteSpeed resp. zdroj balíkov |
| Zostavené vlastnoručne | často /usr/local/bin/php |
vy sami |
| Kontajner | v obraze | vydavateľ obrazu, nové zostavenie robíte vy |
Obzvlášť zákerné sú balíky zo sury.org, pretože používajú rovnaké cesty ako distribúcia. Či php8.3 pochádza z Debianu alebo zo sury.org, ukáže až zdroj balíka. Zvláštnosti opisujú články Repozitár sury.org a Repozitár Remi. Ako Plesk spravuje svoje verzie, opisuje stránka Server Plesk: kontrola a záplatovanie verzií PHP.
Nájdenie všetkých inštalácií PHP
Spoľahlivý zoznam vznikne z troch pohľadov. Príkazy sú výlučne čítacie a podľa servera môžu bežať dlhší čas.
# 1. Balíky: čo pozná správa balíkov
dpkg-query -W -f='${Package}\t${Version}\n' '*php*' 2>/dev/null | grep -E "fpm|cli|cgi|mod-php|lsphp"
rpm -qa 2>/dev/null | grep -iE "php.*(fpm|cli|cgi|litespeed)|^php-[0-9]|^ea-php|^alt-php" | sort
# 2. Súbory: spustiteľné binárky PHP, aj mimo správy balíkov
find / -xdev -type f \( -name 'php' -o -name 'php[0-9]*' -o -name 'php-fpm*' -o -name 'php-cgi*' -o -name 'lsphp*' \) -perm -u+x 2>/dev/null
# 3. Procesy: čo naozaj práve beží, s časom spustenia
ps -eo pid,user,lstart,cmd | grep -E "[p]hp-fpm|[p]hp-cgi|[l]sphp|[a]pache2|[h]ttpd|[f]rankenphp"
Porovnajte tieto tri zoznamy. Súbor bez balíka naznačuje vlastnoručne zostavenú alebo ručne skopírovanú verziu. Proces bez zodpovedajúceho súboru môže poukazovať na vymazanú, ale stále bežiacu inštaláciu. Pri Apache navyše skontrolujte, či je načítaný modul PHP, napríklad pomocou apache2ctl -M alebo httpd -M. Kontajnery a pody Kubernetes sa v týchto zoznamoch objavia len sčasti a vyžadujú vlastnú kontrolu obrazov.
Každú verziu zaplátať zvlášť
Ak má každá inštalácia vo vašom zozname riadok, nasleduje pre každú ten istý postup:
- Objasnite zodpovednosť: Pochádza záplata od distribúcie, od panela, z externého zdroja alebo od vás samotných?
- Zhodnoťte stav: oficiálna opravená verzia, potvrdený backport, nevyjasnené alebo otvorené.
- Aktualizujte: cestou príslušného zdroja, nie cez iný.
- Reštartujte: službu tejto verzie, nielen hlavnú službu. Pri mod_php webový server. Podrobnosti sú v časti Reštart PHP-FPM a všetkých workerov.
- Skontrolujte: porovnajte čas spustenia procesov s časom aktualizácie.
- Zdokumentujte: verzia, stav balíka, doklad, čas reštartu.
Pre verzie, pre ktoré záplata neexistuje, platia do migrácie prechodné opatrenia z php.net. Nastavte ich pre každú verziu osobitne, pretože každá inštalácia má vlastný súbor php.ini a vlastné pooly.
Nezabúdajte na príkazový riadok. Cronjoby a skripty často bežia s inou verziou PHP než web. Aj táto verzia musí byť na opravenom stave, hoci nespracúva žiadne webové požiadavky.
Ktorú verziu používa príkazový riadok a ktorú kontajner?
Dve oblasti sa pri hľadaní najčastejšie prepadnú sitom. Prvou je príkazový riadok. V Debiane a Ubuntu rozhoduje systém alternatív, ktorá binárka sa skrýva za príkazom php. Príkaz update-alternatives --display php ukáže, ktoré verzie sú zaregistrované a ktorá práve platí. Cronjoby, ktoré volajú pevnú cestu, ako /usr/bin/php7.4, však toto nastavenie obchádzajú. Preto sa oplatí pozrieť do crontabov všetkých používateľov a do konfigurácie panelov, ktoré vytvárajú vlastné cronjoby.
Druhou oblasťou sú kontajnery. Kontajner Docker na serveri prináša vlastnú verziu PHP, ktorá sa neobjaví v žiadnom zozname balíkov hostiteľa. docker ps ukáže bežiace kontajnery; či sa v nich nachádza PHP a v ktorej verzii, prezradí pohľad do obrazu alebo php -v v kontajneri. Záplata sa tam nerobí na hostiteľovi, ale novým zostavením obrazu a výmenou kontajnera.
Menej je bezpečnejšie
Najlepšia kontrola je tá, ktorú nie je treba robiť. Každá nainštalovaná verzia PHP zdvojnásobuje námahu pri ďalšej zraniteľnosti. Po PHP2Shell sa preto oplatí jasné pravidlo: každá verzia na serveri potrebuje účel a zodpovednú osobu. Čo ich nemá, najprv sa deaktivuje a po období pozorovania odstráni. Viac v článku Vypnutie starých verzií PHP v hostingovom paneli.
Ako konkrétne pomáha PHP SOS?
- Vytvoríme pre vaše servery úplný zoznam všetkých inštalácií PHP z balíkov, súborov, procesov a kontajnerov.
- Pri každej verzii objasníme pôvod, zodpovednosť a stav záplat.
- V rámci služby záplatovania PHP aktualizujeme každú verziu, reštartujeme každú službu a doložíme stav.
- Spolu s vami určíme, ktoré verzie ostanú, a ostatné kontrolovane odstránime.
Časté otázky
Prečo na mojom serveri beží viac verzií PHP?
Časté dôvody sú hostingové panely, ktoré prinášajú vlastné zostavenia PHP, externé zdroje ako sury.org alebo Remi pre novšie verzie a staršie aplikácie, ktoré potrebujú konkrétnu verziu. Často k tomu pribúda ešte verzia PHP operačného systému.
Je nebezpečná verzia PHP, ktorú nepoužíva žiadny web?
Pokiaľ je nainštalovaná a aktívna ako služba, môže byť dosiahnuteľná, napríklad cez testovaciu doménu, zabudnutý pool alebo cronjob. Navyše ju možno neskôr omylom priradiť nejakému webu. Nepotrebné verzie by ste mali odstrániť.
Ako nájdem všetky inštalácie PHP na serveri s Linuxom?
Skombinujte tri pohľady: nainštalované balíky, spustiteľné súbory PHP v súborovom systéme a bežiace procesy. Zoznam je úplný, až keď všetky tri ukazujú ten istý obraz.
Musím po aktualizácii reštartovať každú verziu zvlášť?
Áno. Každá verzia má spravidla vlastnú službu FPM, LiteSpeed vlastné procesy lsphp a mod_php žije v procese Apache. Reštart hlavnej služby ostatné neobnoví.