Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Osnove PHP-a za administratore

Što administratori trebaju znati o PHP-u: koje binarne datoteke rade, kako djeluje konfiguracija, kako rade FPM poolovi i koje naredbe pomažu pri ažuriranjima poput onog za PHP2Shell.

Stanje 5 min čitanjaPHP znanje

Ukratko: Administratorima bez razvojne pozadine dovoljno je pet temelja za siguran rad PHP-a: PHP se sastoji od više programa (naredbeni redak, PHP-FPM, Apache modul), svaki s vlastitom verzijom; postavke djeluju u razinama od php.ini do aplikacije; PHP-FPM raspoređuje zahtjeve na workere u poolovima; ažuriranje djeluje tek nakon ponovnog pokretanja svih procesa; a zapisnici su najvažniji trag kad nešto nije u redu. Tko poznaje te točke, ranjivosti poput PHP2Shella može zatvoriti brzo i dokazivo.

Od čega se PHP sastoji na poslužitelju

PHP nije jedan program. Na tipičnom Linux poslužitelju nalazi se nekoliko varijanti koje su svaka povezana putem poslužiteljskog sučelja (SAPI):

Varijanta Tipičan naziv Čemu služi
Naredbeni redak (CLI) php, php8.3 cron poslovi, Composer, skripte za održavanje
PHP-FPM php-fpm, php-fpm8.3 web-zahtjevi iza Nginxa ili Apachea
Apache modul mod_php, libphp web-zahtjevi izravno u Apacheovu procesu
CGI php-cgi starije izvedbe

Svaka varijanta može imati drugu verziju i drugi php.ini. Na mnogim poslužiteljima uz to paralelno rade i višestruke verzije PHP-a, primjerice 8.2 i 8.4. Pri ažuriranju svaku treba promatrati zasebno. Kako sučelja rade, objašnjava PHP-FPM objašnjen.

Koja varijanta stvarno poslužuje Vaše web-stranice, doznajete preko pokrenutih procesa i konfiguracije web-poslužitelja:

ps -eo pid,user,lstart,cmd | grep -E "php|httpd|apache2" | grep -v grep
apachectl -M 2>/dev/null | grep -i php     # učitava li Apache PHP modul?
ls /run/php/ 2>/dev/null                    # FPM socketi, često po verziji i poolu

Stupac s vremenom pokretanja kasnije je važan pri ponovnom pokretanju: svi PHP procesi moraju biti pokrenuti nakon trenutka ažuriranja. Ako procesi rade pod različitim korisnicima, to upućuje na odvojene poolove, što je dobro. Ako se u Apacheu pojavi PHP modul iako sve web-stranice trebaju raditi preko FPM-a, to je pokazatelj naslijeđenog ostatka koji treba ukloniti. Za hosting sučelja poput Plesk ili cPanel vrijedi isto načelo, samo što sučelje prikazuje verzije i handlere po web-stranici; mjerodavno ipak ostaje što stvarno radi kao proces.

Najvažnije naredbe za administratore

php -v                    # verzija naredbenog retka
php --ini                 # učitani php.ini i dodatno čitani direktoriji
php --ini=diff            # od PHP-a 8.5: odstupanja od zadanog
php -m                    # ugrađeni i učitani moduli
php --ri session          # postavke jedne ekstenzije
php -l datei.php          # provjera sintakse bez izvršavanja
php-fpm8.3 -v             # verzija FPM binarne datoteke (naziv ovisi o distribuciji)
php-fpm8.3 -t             # testirati FPM konfiguraciju bez ponovnog pokretanja
systemctl status php8.3-fpm

Dvije napomene iz priručnika: php -l pronalazi sintaksne pogreške, ali ne pogreške koje nastaju tek pri izvršavanju. I php -i poziva phpinfo(); izlaz ne pripada u javne datoteke u web-direktoriju.

Kako djeluju PHP postavke

Postavka se može zadati na više mjesta. Tko gdje što smije mijenjati, uređuje način promjene svake direktive:

  1. php.ini i conf.d: osnovna konfiguracija po varijanti, čita se pri pokretanju.
  2. FPM pool: php_value i php_admin_value po poolu. Vrijednosti postavljene s php_admin_value aplikacija prema priručniku ne može prepisati s ini_set().
  3. Razina direktorija: .user.ini kod FPM-a ili .htaccess kod mod_php-a, samo za direktive u načinu INI_PERDIR ili INI_ALL.
  4. Aplikacija: ini_set() tijekom izvođenja, samo za direktive u načinu INI_ALL.

Primjer: memory_limit ima način INI_ALL, dakle aplikacija ga može promijeniti. post_max_size ima INI_PERDIR i ne može se promijeniti s ini_set(). Zato php.net kod prijelaznih mjera za PHP2Shell traži da se vrijednosti postave tako da ih aplikacije ne mogu prepisati. Pojedinosti o razinama objašnjava php.ini objašnjen.

PHP-FPM poolovi ukratko

Pool je skupina workera s vlastitim korisnikom, vlastitim socketom i vlastitim postavkama. Najvažnije direktive prema priručniku:

[shop]
user = shop
group = shop
listen = /run/php/shop.sock
pm = dynamic                 ; static, dynamic ili ondemand
pm.max_children = 20         ; najviše 20 istodobnih zahtjeva
pm.max_requests = 500        ; obnoviti worker nakon 500 zahtjeva
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

Vlastiti pool po web-stranici s vlastitim korisnikom razdvaja web-stranice jednu od druge. security.limit_extensions prema zadanim je postavkama .php .phar i sprječava FPM da izvršava druge nastavke datoteka osim PHP-a. clear_env prema zadanim je postavkama uključen i drži varijable okruženja podalje od workera.

Zapisnici: gdje administratori trebaju gledati

PHP pogreške zapisuje na odredište određeno s error_log, PHP-FPM dodatno u vlastiti zapisnik, a kod sporih zahtjeva u slowlog s backtraceom. Tu su i zapisnici pristupa i pogrešaka web-poslužitelja. Pazite da je display_errors u produkciji isključen, a log_errors uključen: pogreške pripadaju u zapisnik, a ne na web-stranicu. Zapisnike treba i rotirati te čuvati određeno razdoblje kako bi u kriznom slučaju još postojali. Nakon PHP2Shella stručni tisak preporučuje čuvanje zapisnika poslužitelja od 20. 10. 2026. Snažan znak upozorenja je PHP-FPM ili proces web-poslužitelja koji pokreće shell; kako to prepoznati, piše na stranici Znak upozorenja: web-poslužitelj pokreće shell.

Popis provjere za administratore nakon PHP2Shella

  1. Popisati sve PHP varijante i verzije na poslužitelju, i one koje se ne koriste.
  2. Provjeriti stanje paketa; kod backportova distribucije pretražiti changelog za CVE-2026-109618 i CVE-2026-109619.
  3. Ažurirati na 8.5.12, 8.4.27, 8.3.36 ili 8.2.35 odnosno potvrđeni backport.
  4. Ponovno pokrenuti PHP-FPM, Apache i LiteSpeed i provjeriti vremena pokretanja procesa.
  5. Protuprovjera s php -r 'var_dump(ini_get("memory_hard_limit_percent"));'; bool(false) prema priručniku znači pogođenu verziju.
  6. Osigurati zapisnike i provjeriti ima li neobičnosti.

Kako pouzdano dokazati verziju i razinu zakrpa, opisuje Ispravna provjera verzije i razine zakrpa PHP-a.

Kako PHP SOS konkretno pomaže?

U sigurnosnom ugovoru o održavanju osnovnu brigu o PHP-u preuzimamo zajedno s Vašim timom:

  • Inventar: sve PHP varijante, verzije, poolovi i mjesta konfiguracije po poslužitelju.
  • Konfiguracija: sigurnosno relevantne vrijednosti postavljene s php_admin_value, poolovi razdvojeni po web-stranici.
  • Ažuriranja: instalacija, ponovno pokretanje, kontrola i dokumentacija pri svakom sigurnosnom izdanju.
  • Prijenos znanja: objašnjavamo Vašim administratorima što smo promijenili i zašto.

Česta pitanja

Zašto php -v prikazuje drukčiju verziju od web-stranice?

Naredbeni redak, PHP-FPM i Apache modul zasebni su programi s vlastitom verzijom i vlastitim php.ini. php -v prikazuje samo naredbeni redak. Za web-stranicu vrijedi verzija binarne datoteke koja stvarno obrađuje zahtjeve.

Koji php.ini vrijedi na mom poslužitelju?

To pokazuje php --ini za naredbeni redak. Za PHP-FPM uglavnom postoji vlastiti php.ini i dodatne datoteke poolova. Od PHP-a 8.5 php --ini=diff prikazuje koje se vrijednosti razlikuju od zadanih.

Koja je razlika između php_value i php_admin_value?

Oba postavljaju postavke u FPM poolu. Vrijednosti postavljene s php_admin_value aplikacija prema priručniku ne može prepisati s ini_set(). Za sigurnosno relevantne postavke php_admin_value je stoga prava mjera.

Je li dovoljno ažuriranje bez ponovnog pokretanja?

Ne. Pokrenuti PHP procesi zadržavaju stari kod u memoriji. Nakon ažuriranja moraju se ponovno pokrenuti PHP-FPM, Apache s mod_php-om ili LiteSpeed, inače nastavlja raditi ranjiva verzija.

Izvori

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć