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 kompilēšana no pirmkoda

PHP var uzbūvēt pats ar configure un make. Tas dod kontroli pār paplašinājumiem un opcijām, bet arī pilnu atbildību par katru drošības atjauninājumu.

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

Īsi: PHP kompilēt nozīmē lejupielādēt oficiālo pirmkoda pakotni no php.net, ar ./configure noteikt vēlamās saskarnes un paplašinājumus, ar make uzbūvēt, ar make test pārbaudīt un tad instalēt. Tas dod pilnu kontroli pār versiju un apjomu. Cena: par katru drošības atjauninājumu esat atbildīgs pats, kā nesen PHP2Shell gadījumā, kad bija jābūvē no jauna un jāpārstartē visi procesi.

Kad savi PHP būvējumi ir lietderīgi

Lielākā daļa serveru PHP saņem no pakotņu avota: no Linux distributīva, trešās puses repozitorija vai ar konteinera attēlu. Parastai darbībai tā parasti ir labākā izvēle, jo drošības labojumi tiek piegādāti automātiski.

Savi būvējumi tomēr ir vietā:

Situācija Pakotņu avots Savs būvējums
Parasts tīmekļa serveris parasti labāk reti vajadzīgs
Versija vai opcija nav uzticamā avotā nav pieejama lietderīgi
Kļūdu meklēšana pašā PHP, debug būvējums ierobežoti lietderīgi
Minimāls funkciju apjoms īpašām sistēmām ierobežoti lietderīgi
Drošības atjauninājumi nāk ar avotu paša uzdevums

Kas izvēlas savus būvējumus, tam vajadzīgs stingrs process atjauninājumiem, citādi priekšrocība kļūst par risku.

Priekšnosacījumi

Saskaņā ar rokasgrāmatu vajadzīgs GNU make un C kompilators; kopš PHP 8.4 kompilatoram jāatbalsta C11. Kas būvē no Git repozitorija, nevis no izlaiduma pakotnes, tam papildus vajadzīgs autoconf (no 2.68), re2c (no 1.0.3 PHP 8.3 un jaunākām) un bison (no 3.0.0). README pirmkodā Ubuntu min šādu sākumu:

sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev

Katram papildu paplašinājumam pievienojas atbilstošās izstrādes pakotnes, piemēram, OpenSSL vai libsodium.

Pirmkoda lejupielāde un īstuma pārbaude

Pašbūvēts PHP ir tikpat uzticams kā tā pirmkods. php.net katru pakotni piedāvā ar SHA-256 kontrolsummu un GPG parakstu; izlaidumu pārvaldnieku atslēgas ir lejupielādes lapā un GPG atslēgu lapā.

curl -O https://www.php.net/distributions/php-8.4.27.tar.xz
curl -O https://www.php.net/distributions/php-8.4.27.tar.xz.asc
sha256sum php-8.4.27.tar.xz                     # salīdzināt ar vērtību php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Tikai tad, kad kontrolsumma un paraksts sakrīt, var turpināt.

PHP kompilēšana: configure, make, test

Norisei ir četri soļi:

  1. Konfigurēt: ./configure ar vēlamajām opcijām. Būvējot no Git, iepriekš izpildīt ./buildconf.
  2. Būvēt: make -j"$(nproc)"; darbu skaitam saskaņā ar README lietderīgi atbilst procesora kodolu skaitam.
  3. Testēt: make TEST_PHP_ARGS=-j4 test palaiž PHP testu komplektu.
  4. Instalēt: make install, atkarībā no mērķa direktorija ar root tiesībām.

PHP-FPM būvējuma piemērs ar savu mērķa direktoriju:

tar xf php-8.4.27.tar.xz && cd php-8.4.27
./configure --prefix=/opt/php-8.4 \
  --with-config-file-path=/opt/php-8.4/etc \
  --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-fpm-systemd \
  --with-openssl --with-sodium \
  --disable-cgi
make -j"$(nproc)"
make TEST_PHP_ARGS=-j4 test
sudo make install
/opt/php-8.4/bin/php -v

Svarīgākās opcijas pārskatā:

Opcija Iedarbība
--enable-fpm būvē PHP-FPM; papildus --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path direktorijs, kurā PHP meklē php.ini
--with-openssl OpenSSL atbalsts; kopš PHP 7.4 ceļu atrod ar pkg-config
--with-sodium moderna kriptogrāfija ar libsodium
--disable-cgi atsakās no CGI varianta, ja tas nav vajadzīgs
--enable-debug debug simboli, saskaņā ar README ieteicami izstrādei, nevis produkcijai
--enable-zts pavedienu drošība darbības režīmiem ar pavedieniem

Ar --prefix var blakus instalēt vairākas pašbūvētas versijas, piemēram, zem /opt/php-8.3 un /opt/php-8.4. Tas atvieglo pārslēgšanos, bet prasa disciplīnu: katra instalētā versija ir sava programmatūra, kas pie katra drošības izlaiduma jābūvē no jauna, arī ja pašlaik neviena vietne to neizmanto. Vairs nevajadzīgi būvējumi pilnībā jānoņem. Kādas opcijas ir esošam būvējumam, rāda php -i rindā „Configure Command“; tā ir labākā veidne nākamajai pārbūvei.

Norāde par OPcache: kopš PHP 8.5 saskaņā ar pieņemto RFC OPcache ir cieši iekompilēts. Vecākās versijās to būvē kā paplašinājumu un ielādē ar zend_extension. Kas ir paplašinājumi un saskarnes, izskaidro PHP paplašinājumu izpratne un SAPI izskaidrots.

Savi būvējumi un drošība: pienākumi pēc PHP2Shell

Pašam kompilētam PHP ir īsta drošības priekšrocība: jūs būvējat tikai to, kas vajadzīgs. Katrs nebūvētais paplašinājums un katrs nebūvētais darbības režīms ir kods, kurā nevar būt ievainojamības. Būvējums bez CGI, ar nedaudziem paplašinājumiem un skaidriem ceļiem ir pārskatāms.

Tam pretī stāv stingrs pienākums. Distributīvi PHP2Shell backport daļēji piegādāja 21.10.2026; kas būvē pats, tas neko nesaņem automātiski. Konkrēti tas nozīmēja:

  1. Lejupielādēt un pārbaudīt labotās versijas pirmkodu.
  2. Pārbūvēt ar identiskām opcijām; php -i rāda sākotnējo configure rindu.
  3. Palaist testus un instalēt.
  4. Pārstartēt visus PHP procesus, kā aprakstīts sadaļā PHP-FPM un visu darbprocesu pārstartēšana.
  5. Pārbaudīt darbojošos versiju, kā izskaidrots sadaļā PHP versijas un ielāpu stāvokļa pareiza pārbaude.
Svarīgi

Pašbūvēts PHP neparādās nevienā pakotņu pārvaldniekā. Vediet uzskaiti, kuros serveros kādā versijā darbojas savi būvējumi, citādi nākamās ievainojamības gadījumā tie tiks palaisti garām.

Kā PHP SOS palīdz konkrēti?

Ar PHP ielāpu servisu mēs atbalstām savu būvējumu operatorus:

  • Uzskaitīt esošo: mēs atrodam pašbūvētās PHP versijas un nolasām to būvēšanas opcijas.
  • Būvēt no jauna: labotā versija ar pārbaudītu parakstu, tām pašām opcijām un pilnu testu palaišanu.
  • Izvietot un pārstartēt: instalēšana, visu procesu pārstartēšana, darbojošās versijas kontrole.
  • Vienkāršot: kur uzturēts pakotņu avots kalpo tam pašam mērķim, mēs parādām pāreju uz to.

Biežāk uzdotie jautājumi

Kad ir vērts PHP kompilēt pašam?

Ja vajadzīgā versija vai opcija nav pieejama nevienā uzticamā pakotņu avotā, pašam PHP izstrādei un kļūdu meklēšanai vai ļoti vieglām, īpašām būvēm. Parastiem tīmekļa serveriem uzturētas pakotnes parasti ir labāka izvēle.

Kā pārbaudīt, ka PHP pirmkods ir īsts?

php.net katrai pirmkoda pakotnei piedāvā SHA-256 kontrolsummu un GPG parakstu. Salīdziniet kontrolsummu un pārbaudiet parakstu ar php.net publicētajām izlaidumu pārvaldnieku atslēgām.

Vai pēc drošības izlaiduma jākompilē no jauna?

Jā. Pašbūvēts PHP atjauninājumus no distributīva nesaņem. Pēc PHP2Shell tas nozīmēja: uzbūvēt pirmkodu no 8.5.12, 8.4.27, 8.3.36 vai 8.2.35, instalēt un pārstartēt visus PHP procesus.

Kur atrast visas configure opcijas?

Ar ./configure --help pirmkoda direktorijā. Rokasgrāmata min svarīgākās kodola opcijas, paplašinājumu opcijas ir to rokasgrāmatas lapās.

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