# PHP alused adminnidele

> PHP alused adminnidele ilma arendajataustata: binaarid, php.ini tasemed, FPM-poolid, olulised käsud, logid ja kontrollnimekiri pärast PHP2Shelli.

Allikas: https://phpsos.de/et/php/php-grundwissen-admins/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**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](https://phpsos.de/et/php/php-fpm-erklaert/).

Millist varianti teie veebisaidid tegelikult teenindab, selgitate välja töötavate protsesside ja veebiserveri seadistuse kaudu:

```bash
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

```bash
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](https://phpsos.de/et/php/php-ini-erklaert/).

## PHP-FPM poolid lühidalt

Pool on workerite rühm oma kasutaja, oma sokli ja oma sätetega. Olulisemad direktiivid käsiraamatu järgi:

```ini
[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](https://phpsos.de/et/blog/webserver-startet-shell/).

## 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](https://phpsos.de/et/php2shell/php-version-pruefen/).

## Kuidas PHP SOS konkreetselt aitab?

[Turvahoolduslepingu](https://phpsos.de/et/leistungen/security-wartungsvertrag/) 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

- [PHP käsiraamat: käsurea valikud](https://www.php.net/manual/en/features.commandline.options.php)
- [PHP käsiraamat: FPM-i seadistus](https://www.php.net/manual/en/install.fpm.configuration.php)
- [PHP käsiraamat: tuumasätted](https://www.php.net/manual/en/ini.core.php)
- [php.net: turvateated](https://www.php.net/)
