Aktuālā situācija: PHP2Shell. Divas kritiskas PHP ievainojamības (CVSS 9.2) ļauj izpildīt ļaunprātīgu kodu bez pieteikšanās. Ielāpi kopš 21.10.2026.Kas jādara tagad →

php.ini izskaidrots: uzbūve, līmeņi un prioritāte

Kur PHP atrod savus iestatījumus, kādā secībā tie iedarbojas un kam tos drīkst pārrakstīt. Pamats katrai nostiprināšanai un PHP2Shell pagaidu pasākumiem.

Aktuāls uz 4 min lasīšanas laiksPHP zināšanas

Īsi: php.ini ir PHP centrālais konfigurācijas fails. PHP to nolasa startējot, servera moduļiem vienreiz, CGI un CLI katrā izsaukumā. Klāt nāk papildu faili no skenēšanas direktorija, iestatījumi FPM pūlā vai Apache, .htaccess vai .user.ini un ini_set() kodā. Kurš līmenis vērtību drīkst mainīt, nosaka tās izmaiņu režīms, piemēram, INI_SYSTEM vai INI_PERDIR. Vērtības ar php_admin_value lietojumprogramma vairs nevar pārrakstīt.

Kas ir php.ini?

php.ini ir teksta fails ar ierakstiem pēc parauga name = wert. Tas nosaka, kā PHP uzvedas: cik daudz atmiņas skripts drīkst izmantot, vai kļūdas parādās pārlūkprogrammā, kā darbojas sesijas un kuri paplašinājumi tiek ielādēti. Komentāri sākas ar semikolu.

Saskaņā ar PHP rokasgrāmatu fails tiek nolasīts PHP startēšanas laikā. Servera moduļu, piemēram, mod_php, gadījumā tas notiek tikai vienreiz, startējot tīmekļa serveri, CGI un CLI katrā izsaukumā. PHP-FPM savu konfigurāciju nolasa startējot un pakalpojuma pārlādes laikā. Izmaiņa bez pārstartēšanas vai pārlādes tāpēc parasti nedarbojas.

Kopš PHP 8.3 saskaņā ar rokasgrāmatu ieraksts var atsaukties uz vides mainīgo ar aizstājējvērtību:

memory_limit = ${PHP_MEMORY_LIMIT}
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}

Kur PHP meklē php.ini?

Rokasgrāmata apraksta stingru secību. Vispirms spēkā ir skaidri norādīts ceļš, piemēram, PHPIniDir Apache vai opcija -c CGI un CLI gadījumā. Pretējā gadījumā PHP veido meklēšanas ceļu no:

  1. vides mainīgā PHPRC,
  2. sistēmā Windows reģistra ieraksta IniFilePath,
  3. pašreizējā darba direktorija, izņemot SAPI, kas to izslēdz, piemēram, CLI,
  4. PHP binārā faila vai moduļa direktorija,
  5. kompilēšanas laikā iestatītā ceļa --with-config-file-path.

Šajā meklēšanas ceļā PHP vispirms meklē failu php-SAPI.ini, piemēram, php-cli.ini, un tikai pēc tam php.ini. Pēc tam PHP alfabētiskā secībā nolasa visus .ini failus no skenēšanas direktorija, kas noteikts ar PHP_INI_SCAN_DIR vai kompilēšanas laikā ar --with-config-file-scan-dir. Kuri faili ielādēti, rāda php --ini vai funkcija php_ini_scanned_files().

php --ini
php -r 'var_dump(php_ini_loaded_file(), php_ini_scanned_files());'

Abas komandas rāda komandrindas stāvokli. Vietnei var būt spēkā cits fails, jo katrai SAPI var būt sava konfigurācija; vairāk sadaļā SAPI izskaidrota.

Izmaiņu režīmi: kam kuru vērtību drīkst iestatīt?

Ne katru iestatījumu drīkst iestatīt visur. Rokasgrāmata katrai direktīvai piešķir izmaiņu režīmu:

Režīms Kur vērtību drīkst iestatīt
INI_USER skriptos ar ini_set(), Windows reģistrā un failā .user.ini
INI_PERDIR php.ini, .htaccess, httpd.conf vai .user.ini
INI_SYSTEM tikai php.ini vai httpd.conf
INI_ALL visur

Piemēri no rokasgrāmatas: memory_limit ir režīms INI_ALL un noklusējums 128M, post_max_size ir INI_PERDIR un noklusējums 8M, upload_max_filesize ir INI_PERDIR un noklusējums 2M. expose_php drīkst atrasties tikai php.ini.

.user.ini faili saskaņā ar rokasgrāmatu tiek nolasīti tikai CGI un FastCGI SAPI, tātad arī PHP-FPM. PHP tos meklē no skripta direktorija uz augšu līdz Document Root un pēc noklusējuma nolasa no jauna ne biežāk kā ik pēc 300 sekundēm (user_ini.cache_ttl). Ar mod_php šo lomu pilda .htaccess.

Kura vērtība galu galā ir spēkā? Līmeņi pēc prioritātes

Vienkāršoti: jo vēlāk līmenis iedarbojas, jo lielāka iespēja, ka tā vērtība uzvar, ja izmaiņu režīms to atļauj.

  1. attiecīgās SAPI php.ini
  2. papildu faili no skenēšanas direktorija, alfabētiski
  3. servera konfigurācija: FPM pūls ar php_value vai php_admin_value, Apache VirtualHost
  4. direktorija līmenis: .htaccess ar mod_php, .user.ini ar FPM un CGI
  5. izpildes laiks: ini_set() lietojumprogrammas kodā

Izņēmums ir izšķirošs: vērtības ar php_admin_value vai php_admin_flag saskaņā ar rokasgrāmatu nevar pārrakstīt ar ini_set(). Tā administratori bloķē drošībai svarīgus iestatījumus pret lietojumprogrammu. Detalizēti tas aprakstīts sadaļā php_admin_value: iestatījumu bloķēšana pret pārrakstīšanu.

php.ini pēc PHP2Shell: kas ir mainījies

php.net pagaidu pasākumi pret PHP2Shell gandrīz visi ir INI iestatījumi: memory_limit=-1 iestatīts bloķēti pret pārrakstīšanu, ierobežots post_max_size, session.upload_progress.enabled=0 un PHP 8.5 fatal_error_backtraces=0. php.net uzsver, ka session.upload_progress.enabled nevajadzētu iestatīt ar ini_set() vai .user.ini, bet php.ini, FPM pūlā vai servera konfigurācijā, ar sekojošu visu darbprocesu pārstartēšanu. Pilns saraksts atrodas sadaļā Tūlītēji pasākumi, ja vēl nevarat ielāpot.

Ar labotajām versijām 8.5.12, 8.4.27, 8.3.36 un 8.2.35 saskaņā ar rokasgrāmatu mainījies arī memory_limit: tagad tā ir mīkstā robeža. Jaunais iestatījums memory_hard_limit_percent nosaka cieto robežu. Bez savas vērtības tā ir divkāršs memory_limit, ja vairāk par 1G, tad vērtība plus 1G. Ja tā tiek pārsniegta, process nekavējoties beidzas ar izejas statusu 137. Kā abas robežas izvēlēties saprātīgi, izskaidro memory_limit pareiza iestatīšana.

Padoms

Saskaņā ar rokasgrāmatu ir spēkā: ja PHP versija memory_hard_limit_percent nepazīst, to skar CVE-2026-109618 un CVE-2026-109619. Distributīvos ar backport labojumiem stāvokli papildus pierāda pakotnes changelog.

Kā PHP SOS palīdz konkrēti?

  • Noteikt spēkā esošās vērtības: Mēs katrai SAPI nolasām, kuri faili tiek ielādēti un kura vērtība galu galā ir spēkā.
  • Sakopt līmeņus: Mēs noņemam pretrunīgus ierakstus no paneļiem, pūliem, .htaccess un .user.ini.
  • Iestatīt bloķējumus: Servera nostiprināšanas ietvaros mēs drošībai svarīgas vērtības nofiksējam ar php_admin_value.
  • Pierādīt: Mēs dokumentējam iestatījumus un pārstartēšanu, lai stāvokli vēlāk varētu pierādīt.

Biežāk uzdotie jautājumi

Kur atrodas php.ini?

Tas atkarīgs no operētājsistēmas, pakotnes un SAPI. Debian un Ubuntu katrai versijai un SAPI ir savas mapes, piemēram, /etc/php/8.3/fpm/php.ini un /etc/php/8.3/cli/php.ini. Komandrindā php --ini rāda ielādētos failus, vietnei palīdz php_ini_loaded_file() īslaicīgā pārbaudes failā.

Kādā secībā tiek nolasīti faili conf.d mapē?

Saskaņā ar PHP rokasgrāmatu PHP nolasa visus failus ar paplašinājumu .ini skenēšanas direktorijā alfabētiskā secībā. Vēlāki faili pārraksta agrāko vērtības. Tāpēc daudzu failu nosaukumos ir skaitļi, piemēram, 20- vai 99-.

Kāpēc manas php.ini izmaiņas nedarbojas?

Biežākie iemesli: mainīts citas SAPI fails, pakalpojums nav pārstartēts, vērtību pārraksta iestatījums FPM pūlā, Apache konfigurācijā vai failā .user.ini, vai arī hostinga panelis nākamajā saglabāšanā failu uzraksta no jauna.

Kas ir memory_hard_limit_percent?

Jauns iestatījums, kas saskaņā ar PHP rokasgrāmatu ieviests ar drošības izlaidumiem 2026. gada 21. oktobrī. Tas nosaka cieto atmiņas robežu kā memory_limit procentuālu daļu. Rokasgrāmata norāda, ka PHP versija, kas šo iestatījumu nepazīst, ir PHP2Shell ievainojamību skarta.

Avoti

Tūlītējs kontakts

Katra stunda ir svarīga. Rakstiet mums tūlīt.

Īsi aprakstiet sistēmu, PHP versiju un novēroto. Mēs sazināsimies, noskaidrosim situāciju un strādāsim attālināti, līdz incidents ir slēgts un dokumentēts.

Tūlītēja palīdzība