Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

PHP alused adminnidele

Mida adminnid peavad PHP-st teadma: millised binaarid töötavad, kuidas seadistus mõjub, kuidas FPM-poolid töötavad ja millised käsud aitavad uuenduste puhul nagu PHP2Shelli korral.

Seis Lugemisaeg 4 minPHP teadmised

Lühidalt: Adminnidele ilma arendajataustata piisab viiest alusest, et PHP-d turvaliselt käitada: PHP koosneb mitmest programmist (käsurida, PHP-FPM, Apache'i moodul), igaühel oma versioon; sätted mõjuvad tasemetena php.ini-st rakenduseni; PHP-FPM jagab päringud poolides workeritele; uuendus mõjub alles kõigi protsesside taaskäivitusel; ja logid on olulisim vihje, kui midagi ei klapi. Kes need punktid teab, saab turvauksed nagu PHP2Shell kiiresti ja tõendatult sulgeda.

Millest PHP serveris koosneb

PHP ei ole üksik programm. Tüüpilises Linuxi serveris leidub mitu varianti, mis on igaüks ühendatud serveriliidese (SAPI) kaudu:

Variant Tüüpiline nimi Milleks
Käsurida (CLI) php, php8.3 cron-tööd, Composer, hooldusskriptid
PHP-FPM php-fpm, php-fpm8.3 veebipäringud Nginxi või Apache'i taga
Apache'i moodul mod_php, libphp veebipäringud otse Apache'i protsessis
CGI php-cgi vanemad ülesehitused

Igal variandil võib olla teine versioon ja teine php.ini. Paljudes serverites töötab lisaks paralleelselt mitu PHP versiooni, näiteks 8.2 ja 8.4. Uuenduse korral tuleb iga eraldi vaadelda. Kuidas liidesed töötavad, selgitab PHP-FPM selgitus.

Millist varianti teie veebisaidid tegelikult teenindab, selgitate välja töötavate protsesside ja veebiserveri seadistuse kaudu:

ps -eo pid,user,lstart,cmd | grep -E "php|httpd|apache2" | grep -v grep
apachectl -M 2>/dev/null | grep -i php     # kas Apache laeb PHP mooduli?
ls /run/php/ 2>/dev/null                    # FPM-soklid, sageli versiooni ja pooli kaupa

Käivitusaja veerg on hiljem taaskäivituse juures oluline: kõik PHP protsessid peavad olema käivitatud pärast uuenduse ajahetke. Kui protsessid töötavad erinevate kasutajatena, viitab see eraldi poolidele, mis on hea. Kui Apache'is ilmub PHP moodul, kuigi kõik veebisaidid peaksid töötama FPM-i kaudu, on see vihje vanale koormale, mis tuleb eemaldada. Majutuse liideste nagu Plesk või cPanel puhul kehtib sama põhimõte, ainult et liides näitab versioone ja käsitlejaid veebisaidi kaupa; otsustav jääb siiski see, mis tegelikult protsessina töötab.

Adminnide olulisemad käsud

php -v                    # käsurea versioon
php --ini                 # laaditud php.ini ja lisaks loetud kataloogid
php --ini=diff            # alates PHP 8.5-st: kõrvalekalded vaikeväärtusest
php -m                    # sisse kompileeritud ja laaditud moodulid
php --ri session          # laiendi sätted
php -l datei.php          # süntaksikontroll käivitamata
php-fpm8.3 -v             # FPM-binaari versioon (nimi distributsiooni järgi)
php-fpm8.3 -t             # FPM-i seadistuse testimine ilma taaskäivituseta
systemctl status php8.3-fpm

Kaks märkust käsiraamatust: php -l leiab süntaksivead, kuid mitte vigu, mis tekivad alles täitmisel. Ja php -i kutsub välja phpinfo(); väljund ei kuulu avalikesse failidesse veebikataloogis.

Kuidas PHP sätted mõjuvad

Sätet saab seada mitmes kohas. Kes kus mida muuta tohib, reguleerib iga direktiivi muutmisrežiim:

  1. php.ini ja conf.d: põhiseadistus variandi kohta, loetakse käivitamisel.
  2. FPM-pool: php_value ja php_admin_value pooli kohta. Väärtusi, mis on seatud php_admin_value'ga, ei saa rakendus käsiraamatu järgi ini_set()-iga üle kirjutada.
  3. Kataloogi tase: .user.ini FPM-i puhul või .htaccess mod_php puhul, ainult direktiividele režiimis INI_PERDIR või INI_ALL.
  4. Rakendus: ini_set() täitmisajal, ainult direktiividele režiimis INI_ALL.

Näide: memory_limit on režiimis INI_ALL, seega saab rakendus seda muuta. post_max_size on INI_PERDIR ja seda ei saa ini_set()-iga muuta. Seetõttu nõuab php.net PHP2Shelli ajutiste meetmete puhul väärtuste seadmist nii, et rakendused ei saa neid üle kirjutada. Tasemete üksikasju selgitab php.ini selgitus.

PHP-FPM poolid lühidalt

Pool on workerite rühm oma kasutaja, oma sokli ja oma sätetega. Olulisemad direktiivid käsiraamatu järgi:

[shop]
user = shop
group = shop
listen = /run/php/shop.sock
pm = dynamic                 ; static, dynamic või ondemand
pm.max_children = 20         ; kuni 20 samaaegset päringut
pm.max_requests = 500        ; worker uuendada 500 päringu järel
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/shop-slow.log
php_admin_value[error_log] = /var/log/php-fpm/shop-error.log
php_admin_flag[log_errors] = on

Oma pool iga veebisaidi jaoks oma kasutajaga eraldab veebisaidid üksteisest. security.limit_extensions on vaikimisi .php .phar ja takistab FPM-il täitmast muid faililaiendeid peale PHP. clear_env on vaikimisi sisse lülitatud ja hoiab keskkonnamuutujad workerist eemal.

Logid: kuhu adminnid vaatama peavad

PHP kirjutab vead sihtkohta, mis on määratud sättega error_log, PHP-FPM lisaks oma logisse ja aeglaste päringute korral slowlogi backtrace'iga. Lisaks tulevad veebiserveri ligipääsu- ja vealogid. Jälgige, et display_errors oleks tootmises välja ja log_errors sisse lülitatud: vead kuuluvad logisse, mitte veebilehele. Logid peaksid lisaks olema roteeritud ja kindlaks määratud aja jooksul säilitatud, et need tõsises olukorras veel olemas oleksid. Pärast PHP2Shelli soovitab erialaajakirjandus serverilogisid alates 20.10.2026 säilitada. Tugev hoiatusmärk on PHP-FPM-i või veebiserveri protsess, mis käivitab shelli; kuidas seda tuvastada, on lehel Hoiatusmärk: veebiserver käivitab shelli.

Adminnide kontrollnimekiri pärast PHP2Shelli

  1. Loetleda kõik PHP variandid ja versioonid serveris, ka kasutamata.
  2. Kontrollida paketiseisu; distributsiooni backportide puhul otsida muudatuslogist CVE-2026-109618 ja CVE-2026-109619.
  3. Uuendada versioonile 8.5.12, 8.4.27, 8.3.36 või 8.2.35 või kinnitatud backportile.
  4. Käivitada PHP-FPM, Apache ja LiteSpeed uuesti ning kontrollida protsesside käivitusaegu.
  5. Vastukatse käsuga php -r 'var_dump(ini_get("memory_hard_limit_percent"));'; bool(false) tähendab käsiraamatu järgi mõjutatud versiooni.
  6. Kindlustada logid ja kontrollida neid kõrvalekallete suhtes.

Kuidas versiooni ja paigaseisu usaldusväärselt tõendada, kirjeldab PHP versiooni ja paigaseisu õige kontrollimine.

Kuidas PHP SOS konkreetselt aitab?

Turvahoolduslepingu raames võtame PHP põhihoolduse üle koos teie tiimiga:

  • Inventar: kõik PHP variandid, versioonid, poolid ja seadistuskohad serveri kohta.
  • Seadistus: turvalisuse jaoks olulised väärtused seatud php_admin_value'ga, poolid veebisaidi kaupa eraldatud.
  • Uuendused: paigaldamine, taaskäivitus, kontroll ja dokumenteerimine igal turvaväljalaskel.
  • Teadmiste edasiandmine: Selgitame teie adminnidele, mida muutsime ja miks.

Korduma kippuvad küsimused

Miks näitab php -v teist versiooni kui veebisait?

Käsurida, PHP-FPM ja Apache'i moodul on eraldi programmid oma versiooni ja oma php.ini-ga. php -v näitab ainult käsurida. Veebisaidi jaoks loeb selle binaari versioon, mis päringuid tegelikult töötleb.

Milline php.ini minu serveris kehtib?

Seda näitab php --ini käsurea jaoks. PHP-FPM-il on enamasti oma php.ini ja lisaks pooli failid. Alates PHP 8.5-st näitab php --ini=diff, millised väärtused vaikeväärtusest erinevad.

Mis vahe on php_value'il ja php_admin_value'l?

Mõlemad seavad sätteid FPM-poolis. Väärtusi, mis on seatud php_admin_value'ga, ei saa rakendus käsiraamatu järgi ini_set()-iga üle kirjutada. Turvalisuse jaoks olulisteks sätteteks on php_admin_value seetõttu õige valik.

Kas uuendusest piisab ilma taaskäivituseta?

Ei. Töötavad PHP protsessid hoiavad vana koodi mälus. Pärast uuendust tuleb PHP-FPM, Apache koos mod_php-ga või LiteSpeed uuesti käivitada, muidu töötab haavatav versioon edasi.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi