Stručne: Kto chce spevniť server pre PHP, dbá o to, aby jediná zraniteľnosť neotvorila celý server. Weby od seba oddelíme, PHP a webový server nastavíme bezpečne, obmedzíme práva a prístupy a zdokumentujeme každú zmenu. Škoda tak zostane menšia, ak sa predsa niečo stane.
Prečo je spevnenie po PHP2Shell dôležitejšie
PHP2Shell ukázalo, ako rýchlo sa zraniteľnosť v samotnom PHP stane problémom pre všetky weby na serveri. Cez CVE-2026-109618 a CVE-2026-109619 môžu útočníci bez prihlásenia spúšťať kód. Záplata tieto dvere zatvára. Spevnenie odpovedá na inú otázku: čo môže robiť ten, kto sa dostane dnu aj tak, cez túto alebo ďalšiu zraniteľnosť?
Na nespevnenom serveri často bežia všetky weby pod tým istým používateľom, PHP smie spúšťať systémové príkazy a prístupové údaje ležia čitateľné pre všetky procesy. Vlámanie do malého vedľajšieho webu potom siaha až k internetovému obchodu. Dobré spevnenie tieto oblasti oddeľuje. Nie je to jednorazová akcia, ale základný stav, ktorý sa musí zachovať pri každom novom webe a každej zmene verzie.
Spevnenie servera pre PHP: čo konkrétne upravujeme
Izolácia každého webu
Každý web dostane vlastného systémového používateľa a vlastný pool PHP-FPM. Vďaka open_basedir a vhodným právam k súborom vidí aplikácia iba svoj vlastný adresár. Viac nájdete na stránke open_basedir a izolácia pre každý web.
Bezpečná konfigurácia PHP
Php.ini a konfiguráciu poolu nastavíme tak, aby aplikácie nemohli bezpečnostne relevantné hodnoty samy prepísať. Ukážka, ako to môže vyzerať v poole FPM:
; Hodnoty v poole FPM pevne zadať, nie je možné meniť cez 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
Ktoré funkcie sa dajú navyše zakázať, závisí od aplikácie. Upozornenia k tomu nájdete na stránkach Bezpečná konfigurácia php.ini a Správne použitie disable_functions.
Práva k súborom a zápis
Webový server smie zapisovať iba tam, kde je to nutné, napríklad do priečinka na nahrávanie. V adresároch na nahrávanie sa zakáže spúšťanie PHP. Programový kód patrí inému používateľovi, než pod ktorým beží PHP. Zásady vysvetľuje stránka Práva k súborom na webovom serveri.
Prístupy, služby a protokoly
SSH iba s kľúčom, administrátorské rozhrania s dvojfaktorovým prihlásením, nepotrebné služby a porty zatvorené. Logy sa uchovávajú a zálohujú tak, aby po incidente ešte existovali. Zálohy kontrolujeme z hľadiska obnoviteľnosti.
Webový server a bezpečnostné hlavičky
K spevneniu patrí aj samotný webový server: skryť údaje o verzii, vypnúť zoznamy adresárov, zablokovať prístup ku konfiguračným súborom, zálohám a súborom správy verzií a administrátorské oblasti zabezpečiť dodatočne, napríklad povolením podľa IP adresy. Bezpečnostné hlavičky, ako Content-Security-Policy alebo HSTS, chránia návštevníkov vášho webu v prehliadači.
Čo pri inventúre často nachádzame
Mnohé slabiny sa opakujú od servera k serveru. Typické sú viaceré weby pod spoločným používateľom, verejne dostupné rozhrania databáz, staré testovacie inštalácie v podadresároch, zabudnuté verzie PHP popri aktuálnej a zálohy, ktoré ležia vo webovom adresári a dajú sa stiahnuť. Často úplne chýba aj záznam o prihláseniach, alebo sa logy mažú po niekoľkých dňoch.
Žiadny z týchto bodov nie je sám osebe pozoruhodný. Dohromady však rozhodujú o tom, či vlámanie zostane obmedzené na jeden web, alebo zasiahne celý server.
Ako konkrétne pomáha PHP SOS?
- Inventúra: Zaznamenáme operačný systém, webový server, verzie PHP, weby, používateľov, otvorené služby a existujúce zálohy.
- Plán opatrení: Dostanete prioritizovaný zoznam s náročnosťou a možnými dopadmi pri každom bode. Vy rozhodnete, čo sa zrealizuje.
- Realizácia po krokoch: Konfigurácie meníme po dohode, po každom kroku testujeme weby a zaznamenávame, ako sa dá každá zmena vrátiť späť.
- Kontrola: Po realizácii preveríme účinok, napríklad či web naozaj už nemôže čítať cudzie adresáre.
- Odovzdanie: Dostanete dokumentáciu nového stavu, ktorej porozumie aj váš poskytovateľ hostingu alebo vaša agentúra.
Čo dostanete a čo potrebujeme
Dostanete správu o spevnení s východiskovým stavom, zrealizovanými opatreniami, vedome ponechanými otvorenými bodmi s odôvodnením a odporúčaním na pravidelnú kontrolu. Zmeny v konfiguračných súboroch sú zdokumentované a dajú sa dohľadať.
Od vás potrebujeme:
- prístup root alebo administrátora na server, pri paneloch navyše prístup do panelu
- zoznam aplikácií a ich osobitostí, napríklad nahrávanie súborov, rozhrania, cronjoby
- technickú kontaktnú osobu, ktorá po zmenách vie potvrdiť funkcie
- servisné okná na reštarty
- aktuálnu zálohu alebo zadanie, aby sa predtým vytvorila
Čo nesľubujeme
Spevnenie nerobí server nenapadnuteľným. Zmenšuje plochu útoku a obmedzuje škody, nenahrádza však aktualizácie ani monitorovanie. Nezáplatovaná verzia PHP zostáva zraniteľná, bez ohľadu na to, ako dobre je nastavené všetko ostatné. Preto spevnenie spájame so službou záplatovania PHP a potom odporúčame priebežnú starostlivosť prostredníctvom zmluvy o bezpečnostnej údržbe.
Pri zdieľanom hostingu sa mnohé nedá nastaviť, pretože konfiguráciu určuje poskytovateľ hostingu. Potom ukážeme, čo je v rámci vášho balíka možné a kde by mal zmysel prechod na vlastný alebo spravovaný server.
Časté otázky
Čo znamená spevniť (hardening) server?
Spevnenie znamená vypnúť alebo obmedziť všetko, čo nie je pre prevádzku nutné. Patria sem nadbytočné služby, príliš široké práva, otvorené porty a nebezpečné štandardné nastavenia. Cieľom je, aby jediná chyba neotvorila hneď celý server.
Zabránilo by spevnenie PHP2Shell?
Nie, proti zraniteľnosti v samotnom PHP pomôže iba záplata. Spevnenie však obmedzuje, čo môže útočník dosiahnuť po úspešnom vniknutí, napríklad či sa dostane k iným webom alebo prístupovým údajom.
Pokazí sa mi kvôli spevneniu web?
Riziko existuje, ak sa nastavenia menia bez testu. Zmeny zavádzame po krokoch, po každom kroku kontrolujeme funkcie a zaznamenávame, ako sa dá každá zmena vrátiť späť.
Ako často by sa malo spevnenie preverovať?
Najneskôr po väčších aktualizáciách, zmene verzie PHP alebo po pridaní nových aplikácií na server. Zmysluplná je pravidelná kontrola v rámci priebežnej údržby.