Stručně: Běží-li na serveru více verzí PHP, je nutné po PHP2Shell každou zvlášť zkontrolovat, aktualizovat a restartovat. Typickými zdroji jsou operační systém, hostingové panely jako Plesk nebo cPanel, zdroje třetích stran jako sury.org nebo Remi, CloudLinux, LiteSpeed a samostatně kompilované verze. Teprve úplný seznam sestavený z balíčků, souborů a běžících procesů ukáže, zda nebyla opravdu přehlédnuta žádná verze.
Zapomenutá verze
Server, který běží několik let, sbírá verze PHP jako půda starý nábytek. Panel přinesl tři větve, pro jednoho zákazníka přibyla starší verze ze zdroje třetí strany, operační systém má svou vlastní. Každá z nich byla jednou nainstalována z dobrého důvodu. Jen dnes už nikdo neví, která se ještě používá.
Po PHP2Shell je to právě problém. Opravy vyšly 21. října 2026 pro PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Každá instalace na serveru je ale dostává vlastní cestou, od vlastního správce balíčků a v jiný čas. Pro PHP 8.1 a starší existují jen minimální backporty zdrojového kódu. Kdo aktualizuje jen hlavní verzi, nechá ostatní otevřené.
Odkud se berou ty mnohé verze
Následující přehled uvádí typické zdroje a příklady cest. Přesné cesty se liší podle verze a distribuce.
| Zdroj | Příklad cesty | Kdo dodává záplatu |
|---|---|---|
| Operační systém Debian/Ubuntu | /usr/bin/php8.3, /etc/php/8.3/ |
distribuce |
| Operační systém, rodina RHEL | /usr/bin/php, /etc/php-fpm.d/ |
distribuce |
| Plesk | /opt/plesk/php/8.3/ |
Plesk |
| cPanel (EasyApache 4) | /opt/cpanel/ea-php83/ |
cPanel |
| CloudLinux alt-php | /opt/alt/php83/ |
CloudLinux |
| Software Collection od Remi | /opt/remi/php83/ |
Remi |
| sury.org | /usr/bin/php8.3 jako u systému |
sury.org |
| LiteSpeed | /usr/local/lsws/lsphp83/ |
LiteSpeed, resp. zdroj balíčků |
| Samostatně kompilováno | často /usr/local/bin/php |
vy sami |
| Kontejner | v image | vydavatel image, nový build zajišťujete vy |
Zvlášť záludné jsou balíčky ze sury.org, protože používají stejné cesty jako distribuce. Zda php8.3 pochází z Debianu, nebo ze sury.org, ukáže teprve zdroj balíčku. Zvláštnosti popisují články Repozitář sury.org a Repozitář Remi. Jak Plesk spravuje své verze, popisuje stránka Servery Plesk: kontrola a záplatování verzí PHP.
Najít všechny instalace PHP
Spolehlivý seznam vznikne ze tří pohledů. Příkazy jsou čistě čtecí a podle serveru mohou chvíli běžet.
# 1. Balíčky: co zná správa balíčků
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. Soubory: spustitelné binárky PHP, i mimo správu balíčků
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: co skutečně běží právě teď, s časem spuštění
ps -eo pid,user,lstart,cmd | grep -E "[p]hp-fpm|[p]hp-cgi|[l]sphp|[a]pache2|[h]ttpd|[f]rankenphp"
Porovnejte tyto tři seznamy. Soubor bez balíčku naznačuje samostatně kompilovanou nebo ručně zkopírovanou verzi. Proces bez odpovídajícího souboru může ukazovat na smazanou, ale stále běžící instalaci. U Apache zkontrolujte navíc, zda je načten modul PHP, například pomocí apache2ctl -M nebo httpd -M. Kontejnery a pody Kubernetes se v těchto seznamech objeví jen částečně a vyžadují vlastní kontrolu imagí.
Každou verzi zaplatovat zvlášť
Má-li každá instalace v seznamu řádek, následuje pro každou stejný postup:
- Ujasnit odpovědnost: Pochází záplata od distribuce, od panelu, ze zdroje třetí strany, nebo od vás samotných?
- Posoudit stav: oficiální opravená verze, potvrzený backport, nevyjasněno, nebo otevřeno.
- Aktualizovat: cestou příslušného zdroje, ne jinou.
- Restartovat: službu této verze, nejen hlavní službu. U mod_php webový server. Podrobnosti najdete v článku Restart PHP-FPM a všech workerů.
- Zkontrolovat: porovnat čas spuštění procesů s okamžikem aktualizace.
- Zdokumentovat: verze, stav balíčku, doklad, čas restartu.
Pro verze, pro které záplata neexistuje, platí do migrace přechodná opatření od php.net. Nastavte je pro každou verzi zvlášť, protože každá instalace má vlastní php.ini a vlastní pooly.
Nezapomeňte na příkazovou řádku. Cron úlohy a skripty často běží s jinou verzí PHP než web. I tato verze musí být na opraveném stavu, i když nezpracovává webové požadavky.
Kterou verzi používá příkazová řádka a kterou kontejner?
Dvě oblasti při hledání nejčastěji propadnou sítem. První je příkazová řádka. U Debianu a Ubuntu rozhoduje systém alternativ, která binárka stojí za příkazem php. update-alternatives --display php ukáže, které verze jsou zaregistrovány a která právě platí. Cron úlohy, které volají pevnou cestu jako /usr/bin/php7.4, však toto nastavení obcházejí. Proto stojí za to nahlédnout do crontabů všech uživatelů a do konfigurace panelů, které zakládají vlastní cron úlohy.
Druhou oblastí jsou kontejnery. Kontejner Docker na serveru přináší vlastní verzi PHP, která se v žádném seznamu balíčků hostitele neobjeví. docker ps zobrazí běžící kontejnery; zda v nich PHP je a v jaké verzi, prozradí pohled do image nebo php -v v kontejneru. Záplata se tam neprovádí na hostiteli, ale novým sestavením image a výměnou kontejneru.
Méně je bezpečnější
Nejlepší kontrola je ta, kterou není nutné dělat. Každá nainstalovaná verze PHP zdvojnásobuje práci při další zranitelnosti. Po PHP2Shell se proto vyplatí jasné pravidlo: každá verze na serveru potřebuje účel a odpovědnou osobu. Co je nemá, se nejprve deaktivuje a po době sledování odstraní. Více v článku Vypněte staré verze PHP v hostingovém panelu.
Jak konkrétně pomáhá PHP SOS?
- Pro vaše servery vytvoříme úplný seznam všech instalací PHP z balíčků, souborů, procesů a kontejnerů.
- U každé verze objasníme původ, odpovědnost a stav záplat.
- V rámci PHP Patch Service aktualizujeme každou verzi, restartujeme každou službu a doložíme stav.
- Společně s vámi stanovíme, které verze zůstanou, a ostatní kontrolovaně odstraníme.
Časté dotazy
Proč na mém serveru běží více verzí PHP?
Častými důvody jsou hostingové panely, které přinášejí vlastní buildy PHP, zdroje třetích stran jako sury.org nebo Remi pro novější verze a starší aplikace, které vyžadují určitou verzi. Často k tomu přibývá ještě verze PHP z operačního systému.
Je nebezpečná verze PHP, kterou žádný web nepoužívá?
Dokud je nainstalovaná a aktivní jako služba, může být dosažitelná, například přes testovací doménu, zapomenutý pool nebo cron úlohu. Navíc může být později omylem přiřazena nějakému webu. Nepotřebné verze byste měli odstranit.
Jak najdu všechny instalace PHP na serveru s Linuxem?
Spojte tři pohledy: nainstalované balíčky, spustitelné soubory PHP v souborovém systému a běžící procesy. Teprve když všechny tři dávají stejný obraz, je seznam úplný.
Musím po aktualizaci restartovat každou verzi zvlášť?
Ano. Každá verze má zpravidla vlastní službu FPM, LiteSpeed vlastní procesy lsphp, mod_php žije v procesu Apache. Restart hlavní služby ostatní neobnoví.