Stručně: Kdo chce provést hardening serveru pro PHP, dbá na to, aby jedna zranitelnost neotevřela celý server. Weby od sebe oddělíme, PHP a webový server bezpečně nastavíme, omezíme oprávnění a přístupy a každou změnu zdokumentujeme. Škody pak zůstanou menší, i kdyby se něco přece stalo.
Proč je hardening po PHP2Shell důležitější
PHP2Shell ukázal, jak rychle se zranitelnost přímo v PHP stane problémem pro všechny weby na serveru. S CVE-2026-109618 a CVE-2026-109619 mohou útočníci spouštět kód bez přihlášení. Záplata tyto dveře zavře. Hardening odpovídá na jinou otázku: co může udělat ten, kdo se přesto dostane dovnitř, ať touto, nebo příští zranitelností?
Na nezabezpečeném serveru často všechny weby běží pod stejným uživatelem, PHP smí spouštět systémové příkazy a přístupové údaje leží čitelné pro všechny procesy. Průnik do malého vedlejšího webu pak dosáhne až k e-shopu. Dobrý hardening tyto oblasti odděluje. Není to jednorázová akce, ale základní stav, který se musí zachovat při každém novém webu a každé změně verze.
Hardening serveru pro PHP: co konkrétně upravujeme
Izolace každého webu
Každý web dostane vlastního systémového uživatele a vlastní pool PHP-FPM. Pomocí open_basedir a vhodných oprávnění k souborům vidí aplikace jen svůj vlastní adresář. Více najdete na stránce open_basedir a izolace každého webu.
Bezpečná konfigurace PHP
Soubor php.ini a konfiguraci poolu nastavíme tak, aby aplikace nemohly bezpečnostně důležité hodnoty samy přepsat. Ukázka, jak to může vypadat v poolu FPM:
; Hodnoty v poolu FPM pevně zadat, nelze je měnit přes ini_set()
php_admin_flag[expose_php] = off
php_admin_flag[display_errors] = off
php_admin_flag[log_errors] = on
php_admin_value[open_basedir] = /var/www/kunde1/:/tmp/
php_admin_flag[session.upload_progress.enabled] = off
php_admin_flag[allow_url_include] = off
Které funkce lze navíc zablokovat, závisí na aplikaci. Pokyny najdete na stránkách Bezpečná konfigurace php.ini a Správné použití disable_functions.
Oprávnění k souborům a zápis
Webový server smí zapisovat jen tam, kde je to nutné, například do složky s nahranými soubory. Ve složkách s nahranými soubory se zakáže spouštění PHP. Programový kód patří jinému uživateli, než pod kterým běží PHP. Zásady vysvětluje stránka Oprávnění k souborům na webovém serveru.
Přístupy, služby a protokoly
SSH jen s klíčem, administrátorská rozhraní s dvoufázovým ověřením, nepotřebné služby a porty zavřené. Logy se uchovávají a zálohují tak, aby po incidentu stále existovaly. Zálohy kontrolujeme z hlediska možnosti obnovy.
Webový server a bezpečnostní hlavičky
K hardeningu patří i samotný webový server: skrýt údaje o verzích, vypnout výpisy adresářů, zablokovat přístup ke konfiguračním souborům, zálohám a souborům správy verzí a administrátorské oblasti navíc zabezpečit, například povolením jen určitých IP adres. Bezpečnostní hlavičky, jako je Content-Security-Policy nebo HSTS, chrání návštěvníky vašeho webu v prohlížeči.
Co při inventuře často nacházíme
Mnoho slabin se opakuje server od serveru. Typické je více webů pod společným uživatelem, veřejně dostupná rozhraní databází, staré testovací instalace v podsložkách, zapomenuté verze PHP vedle aktuální a zálohy uložené ve webovém adresáři, které lze stáhnout. Často také chybí jakékoli protokolování přihlášení, nebo se logy po několika dnech mažou.
Žádný z těchto bodů sám o sobě není pozoruhodný. Dohromady ale rozhodují o tom, zda průnik zůstane omezen na jeden web, nebo zasáhne celý server.
Jak konkrétně pomáhá PHP SOS?
- Inventura: Zjistíme operační systém, webový server, verze PHP, weby, uživatele, otevřené služby a existující zálohy.
- Plán opatření: Obdržíte prioritizovaný seznam s náročností a možnými dopady u každého bodu. Vy rozhodnete, co se provede.
- Provedení po krocích: Konfigurace měníme po dohodě, po každém kroku testujeme weby a zaznamenáváme, jak lze každou změnu vrátit zpět.
- Kontrola: Po provedení ověříme účinek, například zda web opravdu už nemůže číst cizí adresáře.
- Předání: Obdržíte dokumentaci nového stavu, kterou pochopí i váš poskytovatel hostingu nebo agentura.
Co získáte a co potřebujeme
Získáte zprávu o hardeningu s výchozí situací, provedenými opatřeními, vědomě ponechanými otevřenými body s odůvodněním a doporučením pro pravidelnou kontrolu. Změny v konfiguračních souborech jsou dohledatelně zdokumentovány.
Od vás potřebujeme:
- přístup root nebo administrátora k serveru, u panelů navíc přístup do panelu
- seznam aplikací a jejich zvláštností, například nahrávání souborů, rozhraní, cron úlohy
- technickou kontaktní osobu, která po změnách potvrdí funkce
- servisní okna pro restarty
- aktuální zálohu nebo zadání, aby se předtím vytvořila
Co neslibujeme
Hardening neučiní server nenapadnutelným. Zmenšuje plochu pro útok a omezuje škody, ale nenahrazuje aktualizace ani sledování. Nezáplatovaná verze PHP zůstává zranitelná, bez ohledu na to, jak dobře je nastaveno vše ostatní. Proto hardening spojujeme se službou záplatování PHP a poté doporučujeme průběžnou péči prostřednictvím smlouvy o bezpečnostní údržbě.
U sdíleného hostingu lze mnoho věcí jen těžko nastavit, protože konfiguraci určuje poskytovatel hostingu. Ukážeme vám pak, co je v rámci vašeho balíčku možné a kde by dával smysl přechod na vlastní nebo spravovaný server.
Časté dotazy
Co znamená provést hardening serveru?
Hardening znamená vypnout nebo omezit vše, co není pro provoz nutné. Patří k tomu nadbytečné služby, příliš široká oprávnění, otevřené porty a nebezpečná výchozí nastavení. Cílem je, aby jedna chyba neotevřela hned celý server.
Zabránil by hardening zranitelnosti PHP2Shell?
Ne, proti zranitelnosti přímo v PHP pomáhá jen záplata. Hardening ale omezuje, čeho může útočník po úspěšném průniku dosáhnout, například zda se dostane k jiným webům nebo přístupovým údajům.
Nerozbije hardening můj web?
Riziko existuje, pokud se nastavení mění bez testu. Změny nasazujeme postupně, po každém kroku ověřujeme funkce a zaznamenáváme, jak lze každou změnu vrátit zpět.
Jak často by se měl hardening přezkoumat?
Nejpozději po větších aktualizacích, při změně verze PHP nebo při nových aplikacích na serveru. Rozumná je pravidelná kontrola v rámci průběžné údržby.