# php_admin_value: beállítások zárolása a felülírás ellen

> A php_admin_value és a php_admin_flag: így zárolja a PHP-értékeket az FPM-poolban és az Apache-ban az ini_set(), a .htaccess és a .user.ini ellen.

Forrás: https://phpsos.de/hu/blog/php-admin-value-sperren/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**Röviden:** A `php_admin_value` és a `php_admin_flag` úgy állít be PHP-beállításokat a PHP-FPM-poolban vagy az Apache-konfigurációban, hogy az alkalmazások sem az `ini_set()`-tel, sem a `.htaccess`-szel ne módosíthassák őket. A php.net éppen ezt várja el a PHP2Shell-átmeneti intézkedésekhez, például a `memory_limit=-1` esetében. A beállítás után a szolgáltatást újra kell indítani, és az értéket webkörnyezetben ellenőrizni kell.

## Miért nem jelent a „beállítva” „zárolva” szót

A 2026. október 21. utáni napokban sok adminisztrátor beírta a php.net átmeneti intézkedéseit a php.ini-jébe. Az ajánlás egy részlete közben gyakran elveszett: a `memory_limit=-1` értéket úgy kell beállítani, hogy az alkalmazások ne írhassák felül. A php.net erre kifejezetten a `php_admin_value`-t nevezi meg az FPM-poolban vagy az Apache-konfigurációban.

Az ok egyszerű. Sok CMS, webshop és keretrendszer a saját értékeit állítja be, például magasabb memóriakorlátot importokhoz. Ha az érték csak a php.ini-ben áll, az alkalmazás a következő hívásnál felülírja. A védőintézkedés ekkor papíron létezik, de a futó folyamatban nem.

Ez nem csak a PHP2Shellre vonatkozik. Minden keményítés, a kikapcsolt hibakimenetektől a feltöltési határokig, csak annyira erős, mint a leggyengébb szintje.

## Ki módosíthatja egyáltalán a PHP-beállításokat

A PHP négy módosítási módot ismer. Minden beállításhoz tartozik egy, és ez határozza meg, mely helyeken állítható be. A jelentések a PHP kézikönyvéből származnak.

| Mód | Hol állítható be az érték | Példák |
|---|---|---|
| `INI_USER` | a szkriptben az `ini_set()`-tel és a `.user.ini`-ben | néhány futásidejű érték |
| `INI_PERDIR` | php.ini, `.htaccess`, `httpd.conf`, `.user.ini` | `post_max_size`, `session.upload_progress.enabled` |
| `INI_SYSTEM` | csak a php.ini vagy a `httpd.conf` | `file_uploads`, `disable_functions` |
| `INI_ALL` | mindenhol, az `ini_set()`-tel is | `memory_limit`, `display_errors`, `open_basedir` |

Különösen az `INI_ALL` értékek veszélyesek: bármelyik szkriptből módosíthatók. Az `INI_PERDIR` értékek ugyan nem módosíthatók az `ini_set()`-tel, de igen egy `.htaccess`-en keresztül mod_php esetén, vagy egy `.user.ini`-n keresztül PHP-FPM esetén. Aki írási joggal rendelkezik a webrootban, tehát a bejuttatott kód is, létrehozhat ilyen fájlokat.

## php_admin_value az FPM-poolban és az Apache-ban

A PHP-FPM-nél az értékek a pool fájljában állnak. A PHP kézikönyve rögzíti: a `php_admin_value`-val és a `php_admin_flag`-gel beállított értékek nem írhatók felül az `ini_set()`-tel. Be/ki értékekhez használja a `php_admin_flag`-et, az összes többihez a `php_admin_value`-t.

```ini
; /etc/php/8.3/fpm/pool.d/seite1.conf (részlet)
[seite1]
user = seite1
group = seite1
listen = /run/php/seite1.sock

php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 32M
php_admin_value[upload_max_filesize] = 24M
php_admin_flag[session.upload_progress.enabled] = off
php_admin_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php/seite1-fehler.log
php_admin_value[open_basedir] = /var/www/seite1/:/tmp/seite1/
```

A `memory_limit=-1` a php.net szerint csak konténeren vagy cgroupon keresztüli memóriahatárral együtt való a konfigurációba. Hogyan sikerül ez a systemd-vel, azt a [Memóriahatárok beállítása systemd-vel és cgroupokkal](https://phpsos.de/hu/blog/speichergrenzen-systemd-cgroups/) cikk írja le.

Az Apache-ban mod_php esetén a direktívák a szerverkonfigurációba vagy a VirtualHostba valók. A PHP kézikönyve szerint a `.htaccess`-ben nem engedélyezettek, és egyszer beállítva sem a `.htaccess`, sem az `ini_set()` nem módosíthatja őket.

```apache
<VirtualHost *:443>
    ServerName www.example.de
    DocumentRoot /var/www/seite1/public
    <IfModule php_module>
        php_admin_value memory_limit -1
        php_admin_value post_max_size 32M
        php_admin_value upload_max_filesize 24M
        php_admin_flag session.upload_progress.enabled off
        php_admin_flag display_errors off
    </IfModule>
</VirtualHost>
```

Két finomság a kézikönyvből: egy korábban beállított érték törléséhez használja a `none` értéket. A PHP-állandóknak, mint az `E_ALL`, nincs jelentésük az Apache-konfigurációban; az `error_reporting`-hoz ott a számértéket kell megadni.

## Mely értékeket érdemes zárolni

Nem minden beállítást kell zárolni. Értelmes mindazt, ami a biztonságot érinti, vagy átmeneti intézkedésként szolgál:

1. A php.net PHP2Shell-átmeneti értékei: `memory_limit`, `post_max_size`, `upload_max_filesize`, `session.upload_progress.enabled`, és PHP 8.5-ön a `fatal_error_backtraces`.
2. Hibakimenet és naplózás: `display_errors`, `display_startup_errors`, `log_errors`, `error_log`.
3. Fájlhozzáférés és elkülönítés: `open_basedir`, `upload_tmp_dir`, `session.save_path`.
4. Hálózati hozzáférések a PHP-ból: `allow_url_include`, és ha az alkalmazásnak nincs rá szüksége, `allow_url_fopen`.
5. A `disable_functions` útján letiltott függvények, amelyek a poolban a kézikönyv szerint kiegészítik a php.ini listáját, nem helyettesítik. Részletek a [A disable_functions helyes használata](https://phpsos.de/hu/ratgeber/disable-functions/) útmutatóban.

A `session.upload_progress.enabled` esetében a zárolás különösen fontos, mert az érték különben egy `.user.ini`-n keresztül újra bekapcsolható lenne. Bővebben a [session.upload_progress kikapcsolása: helyesen és tartósan](https://phpsos.de/hu/blog/session-upload-progress-abschalten/) cikkben.

## Ellenőrzés, hogy a zárolás hat-e

Minden módosítás után indítsa újra a szolgáltatást, és ellenőrizze az értéket webkörnyezetben. Egy rövid, azonnal ismét törölt ellenőrző fájl megmutatja, hogy a pool megtartja-e az értéket akkor is, ha az alkalmazás módosítani akarja:

```php
<?php
// Ellenőrző fájl: rövid időre elhelyezni, egyszer meghívni a domainen keresztül, azonnal törölni
header('Content-Type: text/plain');
$vorher = ini_get('memory_limit');
$versuch = @ini_set('memory_limit', '256M');
echo "memory_limit: $vorher\n";
echo 'Änderung per ini_set() ', ($versuch === false ? 'blockiert' : 'MÖGLICH'), "\n";
```

Elvárt a `-1` és a „blockiert”. Ha a kimenet „MÖGLICH”, az érték nincs a `php_admin_value`-n keresztül beállítva, vagy a szolgáltatást még nem indították újra. Ismételje meg az ellenőrzést minden poolra és minden PHP-verzióra.

> **Tipp:**
> A zárolt értékeket tartsa nyilván központilag, például egy pool-sablonban vagy a konfigurációkezelésében. A tárhelypanelek részben felülírják a kézzel módosított pool-fájlokat a következő mentéskor; ott az értékek a panel által előirányzott mezőkbe valók.

Hogyan rendezi a PHP összességében a konfigurációs szintjeit, azt [A php.ini magyarázata: felépítés, szintek és elsőbbség](https://phpsos.de/hu/php/php-ini-erklaert/) írja le. A teljes átmeneti intézkedések az [Azonnali intézkedések, ha még nem tud javítani](https://phpsos.de/hu/php2shell/sofortmassnahmen-ohne-patch/) oldalon találhatók.

## Összegzés: csak a zárolt érték van valóban beállítva

A php.net PHP2Shellre vonatkozó átmeneti intézkedései tudatosítottak egy megkülönböztetést, amelyet korábban gyakran átnéztek: sok beállításnál a php.ini-ben lévő érték csak javaslat, a `php_admin_value`-ban lévő érték viszont előírás. Az olyan kényelmi értékeknél, mint az időzóna, a különbség lényegtelen. A biztonsági beállításoknál és az átmeneti intézkedéseknél azon múlik, hogy az intézkedés egyáltalán hat-e az éles üzemben.

A ráfordítás áttekinthető: egy maroknyi sor poolonként vagy VirtualHostonként, egy újraindítás, egy rövid ellenőrzés. Tartsa kicsinek és megindokoltnak a zárolt értékek listáját, hogy a fejlesztők megérthessék, miért nem módosíthat az alkalmazásuk egy értéket. És gondozza a listát a sablonjaiban, hogy az új weboldalak automatikusan örököljék.

## Hogyan segít konkrétan a PHP SOS?

- **A szintek kiolvasása:** Minden weboldalra megállapítjuk, mely értékek érvényesek ténylegesen a php.ini-ből, a poolból, az Apache-ból, a `.htaccess`-ből vagy a `.user.ini`-ből.
- **Zárolások beállítása:** A biztonsági szempontból lényeges értékeket és a PHP2Shell-átmeneti intézkedéseket `php_admin_value` illetve `php_admin_flag` formájában beírjuk, és a szolgáltatásokat újraindítjuk.
- **Az alkalmazás tesztelése:** Ellenőrizzük, hogy az alkalmazás hibátlanul fut-e a zárolt értékekkel, és kiértékeljük a hibanaplót.
- **A sablonok gondozása:** A [szerverkeményítés](https://phpsos.de/hu/leistungen/server-haertung/) keretében átvesszük az értékeket a pool-sablonokba és a dokumentációba.


## Gyakori kérdések

**Mi a különbség a php_value és a php_admin_value között?**  
Mindkettő egy PHP-beállítást állít be. A php_value értékeit az alkalmazás később újra megváltoztathatja, például az ini_set()-tel vagy a .htaccess-szel. A php_admin_value és a php_admin_flag értékei a PHP kézikönyve szerint zároltak az ini_set() számára, az Apache-nál a .htaccess számára is.

**Írhatom a php_admin_value-t egy .htaccess fájlba?**  
Nem. A PHP kézikönyve szerint a php_admin_value nem engedélyezett a .htaccess fájlokban. Az Apache szerverkonfigurációjába vagy a VirtualHostba való, PHP-FPM esetén a pool fájljába.

**Mi történik, ha egy alkalmazás egy zárolt értéket akar módosítani?**  
Az ini_set() hívása meghiúsul és false értéket ad vissza, a zárolt érték megmarad. A jól programozott alkalmazások ezzel boldogulnak. Az átállás után mégis ellenőrizze a hibanaplót és a legfontosabb funkciókat.

**Újra kell indítani egy módosítás után a poolt?**  
Igen. A PHP-FPM a pool fájljait induláskor vagy a szolgáltatás újratöltésekor olvassa be. Az Apache mod_php-val ugyanez érvényes a szerverkonfigurációra. Újraindítás nélkül a régi érték fut tovább.

**Bővíthető a disable_functions a poolban?**  
Igen, egy különlegességgel: a PHP kézikönyve szerint a disable_functions az FPM-poolban nem írja felül a php.ini értékeit, hanem kiegészíti őket. A pool tehát további függvényeket tilthat le, de egyet sem oldhat fel.

## Források

- [PHP kézikönyv: FPM-konfiguráció](https://www.php.net/manual/en/install.fpm.configuration.php)
- [PHP kézikönyv: a konfiguráció módosítása](https://www.php.net/manual/en/configuration.changes.php)
- [PHP kézikönyv: a beállítások módosítási módjai](https://www.php.net/manual/en/configuration.changes.modes.php)
- [php.net: biztonsági közlemények](https://www.php.net/)
