Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

PHP kompileerimine lähtekoodist

PHP saab ise ehitada käskudega configure ja make. See annab kontrolli laiendite ja valikute üle, kuid ka täieliku vastutuse iga turvauuenduse eest.

Seis Lugemisaeg 4 minPHP teadmised

Lühidalt: PHP kompileerimine tähendab ametliku lähtekoodipaketi allalaadimist php.net-ist, soovitud liideste ja laiendite määramist käsuga ./configure, ehitamist käsuga make, kontrollimist käsuga make test ja seejärel paigaldamist. See annab täieliku kontrolli versiooni ja mahu üle. Hind: iga turvauuenduse eest vastutate ise, nagu viimati PHP2Shelli puhul, mil tuli uuesti ehitada ja kõik protsessid uuesti käivitada.

Millal on oma PHP ehitused mõistlikud

Enamik servereid saab PHP paketiallikast: Linuxi distributsioonist, kolmanda osapoole hoidlast või konteinerikujutise kaudu. See on tavatööks enamasti parim valik, sest turvaparandused tarnitakse automaatselt.

Oma ehitustel on siiski oma koht:

Olukord Paketiallikas Oma ehitus
Tavaline veebiserver enamasti parem harva vajalik
Versioon või valik ei ole usaldusväärses allikas ei ole saadaval mõistlik
Veaotsing PHP enda juures, debug-ehitus piiratud mõistlik
Minimaalne funktsioonide maht erisüsteemidele piiratud mõistlik
Turvauuendused tulevad allikaga oma ülesanne

Kes otsustab oma ehituste kasuks, vajab uuenduste jaoks kindlat protsessi, muidu muutub eelis riskiks.

Eeldused

Käsiraamatu järgi on vaja GNU make'i ja C-kompilaatorit; alates PHP 8.4-st peab kompilaator toetama C11. Kes ehitab Git-hoidlast, mitte väljalaskepaketist, vajab lisaks autoconf'i (alates 2.68), re2c'd (alates 1.0.3 PHP 8.3 ja uuema jaoks) ja bison'i (alates 3.0.0). Lähtekoodi README nimetab Ubuntu jaoks selle sissejuhatuse:

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

Iga täiendava laiendi jaoks lisanduvad sobivad arenduspaketid, näiteks OpenSSL-i või libsodiumi jaoks.

Lähtekoodi allalaadimine ja ehtsuse kontroll

Ise ehitatud PHP on nii usaldusväärne kui selle lähtekood. php.net pakub iga paketti SHA-256 kontrollsumma ja GPG allkirjaga; release-managerite võtmed on allalaadimislehel ja GPG-võtmete lehel.

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                     # võrrelda php.net-is oleva väärtusega
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Alles siis, kui kontrollsumma ja allkiri klapivad, minnakse edasi.

PHP kompileerimine: configure, make, test

Kulg koosneb neljast sammust:

  1. Seadistamine: ./configure soovitud valikutega. Git-ist ehitamisel enne käivitada ./buildconf.
  2. Ehitamine: make -j"$(nproc)"; tööde arv vastab README järgi mõistlikult protsessorituumade arvule.
  3. Testimine: make TEST_PHP_ARGS=-j4 test käivitab PHP testikomplekti.
  4. Paigaldamine: make install, olenevalt sihtkataloogist root-õigustega.

Näide PHP-FPM ehituse kohta oma sihtkataloogiga:

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

Olulisemad valikud ülevaatlikult:

Valik Mõju
--enable-fpm ehitab PHP-FPM-i; lisaks --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path kataloog, kust PHP otsib php.ini
--with-openssl OpenSSL-i tugi; alates PHP 7.4-st leitakse tee pkg-config'i kaudu
--with-sodium kaasaegne krüptograafia libsodiumiga
--disable-cgi jätab CGI variandi ehitamata, kui seda ei vajata
--enable-debug silumissümbolid, README järgi soovitatav arenduseks, mitte tootmiseks
--enable-zts lõimeohutus lõimedega töörežiimide jaoks

Valikuga --prefix saab mitu ise ehitatud versiooni kõrvuti paigaldada, näiteks kataloogidesse /opt/php-8.3 ja /opt/php-8.4. See lihtsustab ümberlülitusi, kuid nõuab distsipliini: iga paigaldatud versioon on oma tarkvara, mis tuleb igal turvaväljalaskel uuesti ehitada, isegi kui ükski veebisait seda parajasti ei kasuta. Enam mittevajalikud ehitused tuleb täielikult eemaldada. Milliseid valikuid olemasolev ehitus kasutab, näitab php -i real „Configure Command“; see on parim mall järgmiseks uuesti ehitamiseks.

Märkus OPcache'i kohta: alates PHP 8.5-st on OPcache vastu võetud RFC järgi kindlalt sisse kompileeritud. Vanemate versioonide puhul ehitatakse see laiendusena ja laaditakse käsuga zend_extension. Mis on laiendused ja liidesed, selgitavad PHP laiendite mõistmine ja SAPI selgitus.

Oma ehitused ja turvalisus: kohustused pärast PHP2Shelli

Ise kompileeritud PHP-l on tõeline turvaeelis: ehitate ainult seda, mida vajate. Iga ehitamata laiendus ja iga ehitamata töörežiim on kood, mis ei saa turvaauku sisaldada. Ehitus ilma CGI-ta, vähese arvu laiendite ja selgete teedega on ülevaatlik.

Sellele vastandub range kohustus. Distributsioonid tarnisid PHP2Shelli backport'e osaliselt 21.10.2026; kes ehitab ise, ei saa midagi automaatselt. Konkreetselt tähendas see:

  1. Laadida parandatud versiooni lähtekood ja kontrollida see.
  2. Ehitada uuesti identsete valikutega; php -i näitab algset configure-rida.
  3. Käivitada testid ja paigaldada.
  4. Käivitada kõik PHP protsessid uuesti, nagu on kirjeldatud lehel PHP-FPM-i ja kõigi workerite taaskäivitamine.
  5. Kontrollida töötavat versiooni, nagu on selgitatud lehel PHP versiooni ja paigaseisu õige kontrollimine.
Oluline

Ise ehitatud PHP ei ilmu üheski paketihalduris. Pidage inventari, millistes serverites töötavad oma ehitused millises versioonis, muidu jäävad need järgmise turvaaugu korral märkamata.

Kuidas PHP SOS konkreetselt aitab?

PHP paikamisteenuse kaudu toetame oma ehituste haldajaid:

  • Olemasoleva kaardistamine: Leiame ise ehitatud PHP versioonid ja loeme välja nende ehitusvalikud.
  • Uuesti ehitamine: Parandatud versioon kontrollitud allkirja, samade valikute ja täieliku testijooksuga.
  • Väljaveeretamine ja taaskäivitus: Paigaldus, kõigi protsesside taaskäivitus, töötava versiooni kontroll.
  • Lihtsustamine: Kus hooldatud paketiallikas täidab sama eesmärki, näitame ülemineku.

Korduma kippuvad küsimused

Millal tasub PHP-d ise kompileerida?

Kui vajalik versioon või valik ei ole ühegi usaldusväärse paketiallika kaudu saadaval, PHP enda arenduseks ja veaotsinguks või väga kitsaste, eriliste ehituste jaoks. Tavaliste veebiserverite jaoks on hooldatud paketid enamasti parem valik.

Kuidas ma kontrollin, et PHP lähtekood on ehtne?

php.net pakub iga lähtekoodipaketi juurde SHA-256 kontrollsumma ja GPG allkirja. Võrrelge kontrollsummat ja kontrollige allkirja php.net-is avaldatud release-managerite võtmetega.

Kas pärast turvaväljalaset tuleb uuesti kompileerida?

Jah. Ise ehitatud PHP ei saa distributsioonilt uuendusi. Pärast PHP2Shelli tähendas see: ehitada lähtekood versioonist 8.5.12, 8.4.27, 8.3.36 või 8.2.35, paigaldada ja käivitada kõik PHP protsessid uuesti.

Kust ma leian kõik configure-valikud?

Käsuga ./configure --help lähtekataloogis. Käsiraamat nimetab olulisemad tuumavalikud, laiendite valikud on nende käsiraamatulehtedel.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi