Aktuális helyzet: PHP2Shell. Két kritikus PHP-rés (CVSS 9,2) lehetővé teszi kártékony kód futtatását bejelentkezés nélkül. Javítások 2026. 10. 21. óta.Mi a teendő most →

A PHP fordítása forráskódból

A PHP a configure-ral és a make-kel magunk is megépíthető. Ez kontrollt ad a bővítmények és az opciók felett, de a biztonsági frissítésekért is teljes felelősséget.

Állapot 5 perc olvasási időPHP-tudástár

Röviden: A PHP fordítása azt jelenti, hogy letöltjük a php.net hivatalos forráscsomagját, a ./configure segítségével rögzítjük a kívánt felületeket és bővítményeket, a make paranccsal megépítjük, a make test paranccsal ellenőrizzük, majd telepítjük. Ez teljes kontrollt ad a verzió és a terjedelem felett. Ára: minden biztonsági frissítésért Ön felel, mint legutóbb a PHP2Shellnél, amikor újra kellett építeni, és az összes folyamatot újra kellett indítani.

Mikor értelmesek a saját PHP-buildek

A legtöbb szerver a PHP-t egy csomagforrásból szerzi be: a Linux-disztribúcióból, egy harmadik féltől származó tárolóból vagy egy konténerképen keresztül. A normál üzemhez ez többnyire a legjobb választás, mert a biztonsági javításokat automatikusan szállítják utólag.

A saját buildeknek ennek ellenére van helyük:

Helyzet Csomagforrás Saját build
Normál webszerver többnyire jobb ritkán szükséges
A verzió vagy opció nincs megbízható forrásban nem elérhető értelmes
Hibakeresés magán a PHP-n, debug-build korlátozott értelmes
Minimális funkciókészlet különleges rendszerekhez korlátozott értelmes
Biztonsági frissítések a forrással érkeznek saját feladat

Aki saját buildek mellett dönt, annak rögzített folyamat kell a frissítésekhez, különben az előny kockázattá válik.

Előfeltételek

A kézikönyv szerint GNU make és egy C-fordító szükséges; a PHP 8.4 óta a fordítónak támogatnia kell a C11-et. Aki kiadási csomag helyett a Git-tárolóból épít, annak emellett autoconf (2.68-tól), re2c (1.0.3-tól a PHP 8.3-hoz és újabbakhoz) és bison (3.0.0-tól) kell. A forráskódban lévő README Ubuntuhoz ezt a kezdést nevezi meg:

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

Minden további bővítményhez a megfelelő fejlesztői csomagok járulnak, például az OpenSSL-hez vagy a libsodiumhoz.

A forráskód letöltése és az eredetiség ellenőrzése

Egy saját építésű PHP csak annyira megbízható, mint a forráskódja. A php.net minden csomagot SHA-256-ellenőrzőösszeggel és GPG-aláírással kínál; a kiadásmenedzserek kulcsai a letöltési oldalon és a GPG-kulcsok oldalán találhatók.

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                     # összevetés a php.net-en lévő értékkel
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Csak ha az ellenőrzőösszeg és az aláírás egyezik, mehet tovább.

A PHP fordítása: configure, make, test

A folyamat négy lépésből áll:

  1. Konfigurálás: ./configure a kívánt opciókkal. Gitből építéskor előtte futtassa a ./buildconf parancsot.
  2. Építés: make -j"$(nproc)"; a jobok száma a README szerint értelemszerűen a processzormagok számával egyezik.
  3. Tesztelés: a make TEST_PHP_ARGS=-j4 test lefuttatja a PHP tesztkészletét.
  4. Telepítés: make install, a célkönyvtártól függően root-jogokkal.

Egy példa egy saját célkönyvtárú PHP-FPM-buildre:

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

A legfontosabb opciók áttekintése:

Opció Hatás
--enable-fpm megépíti a PHP-FPM-et; ehhez --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path könyvtár, amelyben a PHP a php.ini-t keresi
--with-openssl OpenSSL-támogatás; a PHP 7.4 óta az útvonalat a pkg-config találja meg
--with-sodium modern kriptográfia a libsodiummal
--disable-cgi lemond a CGI-változatról, ha nincs rá szükség
--enable-debug debug-szimbólumok, a README szerint fejlesztéshez ajánlott, éles üzemre nem
--enable-zts szálbiztonság szálakat használó üzemmódokhoz

A --prefix segítségével több saját építésű verzió telepíthető egymás mellé, például az /opt/php-8.3 és az /opt/php-8.4 alatt. Ez megkönnyíti az átállásokat, de fegyelmet kíván: minden telepített verzió saját szoftver, amelyet minden biztonsági kiadásnál újra kell építeni, akkor is, ha éppen egyetlen weboldal sem használja. A már nem szükséges buildeket teljesen el kell távolítani. Hogy egy meglévő buildnek milyen opciói vannak, azt a php -i mutatja a „Configure Command” sorban; ez a legjobb sablon a következő újraépítéshez.

Megjegyzés az OPcache-hez: a PHP 8.5 óta az OPcache az elfogadott RFC szerint fixen bele van fordítva. A régebbi verzióknál bővítményként építik, és a zend_extension segítségével töltik be. Hogy mik a bővítmények és a felületek, azt a PHP-bővítmények megértése és a SAPI elmagyarázva oldal magyarázza.

Saját buildek és biztonság: a kötelezettségek a PHP2Shell után

Az önállóan fordított PHP-nak valódi biztonsági előnye van: csak azt építi meg, amire szüksége van. Minden meg nem épített bővítmény és minden meg nem épített üzemmód olyan kód, amely nem tartalmazhat rést. Egy CGI nélküli, kevés bővítményes, világos útvonalú build áttekinthető.

Ezzel kemény kötelezettség áll szemben. A disztribúciók a PHP2Shellnél a backportokat részben 2026. október 21-én szállították; aki maga épít, semmit nem kap automatikusan. Konkrétan ez azt jelentette:

  1. A javított verzió forráskódját le kellett tölteni és ellenőrizni.
  2. Azonos opciókkal újra kellett építeni; a php -i megmutatja az eredeti configure-sort.
  3. Futtatni a teszteket és telepíteni.
  4. Az összes PHP-folyamatot újra kellett indítani, ahogyan a A PHP-FPM és az összes worker újraindítása oldalon le van írva.
  5. Ellenőrizni a futó verziót, ahogyan a PHP-verzió és javítási állapot helyes ellenőrzése oldal elmagyarázza.
Fontos

Egy saját építésű PHP egyetlen csomagkezelőben sem jelenik meg. Vezessen leltárt arról, mely szervereken fut saját build milyen verzióban, különben a következő résnél észrevétlen marad.

Hogyan segít konkrétan a PHP SOS?

A PHP-javítási szolgáltatáson keresztül támogatjuk a saját buildek üzemeltetőit:

  • Az állomány felmérése: Megtaláljuk a saját építésű PHP-verziókat, és kiolvassuk a build-opcióikat.
  • Újraépítés: Javított verzió ellenőrzött aláírással, azonos opciókkal és teljes tesztfuttatással.
  • Kiadás és újraindítás: Telepítés, az összes folyamat újraindítása, a futó verzió ellenőrzése.
  • Egyszerűsítés: Ahol egy gondozott csomagforrás ugyanazt a célt szolgálja, megmutatjuk az átállást.

Gyakori kérdések

Mikor éri meg magunknak lefordítani a PHP-t?

Ha egy szükséges verzió vagy opció nem érhető el egyetlen megbízható csomagforrásban sem, magán a PHP-n végzett fejlesztéshez és hibakereséshez, vagy nagyon karcsú, különleges buildekhez. Normál webszervereken a gondozott csomagok többnyire a jobb választás.

Hogyan ellenőrzöm, hogy a PHP forráskódja valódi?

A php.net minden forráscsomaghoz SHA-256-ellenőrzőösszeget és GPG-aláírást kínál. Vesse össze az ellenőrzőösszeget, és ellenőrizze az aláírást a php.net-en közzétett, a kiadásmenedzserek kulcsaival.

Biztonsági kiadás után újra kell fordítani?

Igen. Egy saját építésű PHP nem kap frissítéseket a disztribúciótól. A PHP2Shell után ez azt jelentette: a 8.5.12, 8.4.27, 8.3.36 vagy 8.2.35 forráskódját meg kellett építeni, telepíteni, és az összes PHP-folyamatot újra kellett indítani.

Hol találom az összes configure-opciót?

A ./configure --help paranccsal a forráskönyvtárban. A kézikönyv megnevezi a legfontosabb alapopciókat, a bővítmények opciói azok kézikönyvoldalain találhatók.

Források

Azonnali kapcsolat

Minden óra számít. Írjon nekünk most.

Ismertesse röviden a rendszert, a PHP-verziót és a megfigyelését. Jelentkezünk, tisztázzuk a helyzetet, és távolról dolgozunk, amíg az incidens le nem zárul és dokumentálva nem lesz.

Azonnali segítség