Trenutno stanje: PHP2Shell. Dve kritični ranljivosti PHP (CVSS 9,2) omogočata izvedbo škodljive kode brez prijave. Popravki od 21. 10. 2026.Kaj je zdaj treba storiti →

Prevajanje PHP iz izvorne kode

PHP je mogoče zgraditi sam s configure in make. To prinese nadzor nad razširitvami in možnostmi, a tudi polno odgovornost za vsako varnostno posodobitev.

Stanje 5 min branjaZnanje o PHP

Na kratko: Prevesti PHP pomeni z php.net prenesti uradni izvorni paket, z ./configure določiti želene vmesnike in razširitve, z make zgraditi, z make test preveriti in nato namestiti. To da polni nadzor nad različico in obsegom. Cena: za vsako varnostno posodobitev ste odgovorni sami, kot nazadnje pri PHP2Shell, ko je bilo treba znova zgraditi in znova zagnati vse procese.

Kdaj so lastne izdelave PHP smiselne

Večina strežnikov PHP prejema iz vira paketov: iz distribucije Linux, repozitorija tretjega ponudnika ali prek slike vsebnika. To je za običajno obratovanje praviloma najboljša izbira, ker se varnostni popravki dostavljajo samodejno.

Lastne izdelave imajo kljub temu svoje mesto:

Situacija Vir paketov Lastna izdelava
Običajen spletni strežnik praviloma boljše redko potrebno
Različica ali možnost ni v zaupanja vrednem viru ni na voljo smiselno
Iskanje napak v samem PHP, izdelava za razhroščevanje omejeno smiselno
Minimalen obseg funkcij za posebne sisteme omejeno smiselno
Varnostne posodobitve pridejo z virom lastna naloga

Kdor se odloči za lastne izdelave, potrebuje fiksen postopek za posodobitve, sicer prednost postane tveganje.

Zahteve

Po priročniku sta potrebna GNU make in prevajalnik C; od PHP 8.4 mora prevajalnik podpirati C11. Kdor gradi iz repozitorija Git namesto iz izdajnega paketa, dodatno potrebuje autoconf (od 2.68), re2c (od 1.0.3 za PHP 8.3 in novejši) in bison (od 3.0.0). README v izvorni kodi za Ubuntu navaja ta začetek:

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

Za vsako dodatno razširitev pridejo zraven ustrezni razvojni paketi, na primer za OpenSSL ali libsodium.

Prenos izvorne kode in preverjanje pristnosti

Sam zgrajen PHP je tako zaupanja vreden kot njegova izvorna koda. php.net vsak paket ponuja s kontrolno vsoto SHA-256 in podpisom GPG; ključi upravljavcev izdaj so na strani za prenos in na strani s ključi GPG.

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                     # primerjati z vrednostjo na php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Šele ko kontrolna vsota in podpis sovpadata, se gre naprej.

Prevajanje PHP: configure, make, test

Postopek ima štiri korake:

  1. Konfigurirati: ./configure z želenimi možnostmi. Pri gradnji iz Git predtem zaženite ./buildconf.
  2. Zgraditi: make -j"$(nproc)"; število opravil po README smiselno ustreza številu jeder procesorja.
  3. Preizkusiti: make TEST_PHP_ARGS=-j4 test izvede testni nabor PHP.
  4. Namestiti: make install, glede na ciljni imenik s pravicami root.

Primer izdelave PHP-FPM z lastnim ciljnim imenikom:

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

Najpomembnejše možnosti na hitro:

Možnost Učinek
--enable-fpm zgradi PHP-FPM; zraven --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path imenik, v katerem PHP išče php.ini
--with-openssl podpora OpenSSL; od PHP 7.4 se pot najde prek pkg-config
--with-sodium sodobna kriptografija z libsodium
--disable-cgi opusti različico CGI, če je ne potrebujete
--enable-debug simboli za razhroščevanje, po README priporočeni za razvoj, ne za produkcijo
--enable-zts nitna varnost za načine delovanja z nitmi

Z --prefix je mogoče več sam zgrajenih različic namestiti druga ob drugi, na primer pod /opt/php-8.3 in /opt/php-8.4. To olajša preklope, zahteva pa disciplino: vsaka nameščena različica je lastna programska oprema, ki jo je treba ob vsaki varnostni izdaji znova zgraditi, tudi če je trenutno nobena spletna stran ne uporablja. Izdelave, ki jih ni več treba, je treba v celoti odstraniti. Katere možnosti ima obstoječa izdelava, pokaže php -i v vrstici „Configure Command“; to je najboljša predloga za naslednjo novo gradnjo.

Opomba o OPcache: od PHP 8.5 je OPcache po sprejetem RFC trdno vkompiliran. Pri starejših različicah se zgradi kot razširitev in naloži prek zend_extension. Kaj so razširitve in vmesniki, razlagata Razumevanje razširitev PHP in SAPI razložen.

Lastne izdelave in varnost: obveznosti po PHP2Shell

Samo prevedeni PHP ima pravo varnostno prednost: gradite samo, kar potrebujete. Vsaka nezgrajena razširitev in vsak nezgrajen način delovanja je koda, ki ne more vsebovati vrzeli. Izdelava brez CGI, z malo razširitvami in jasnimi potmi je pregledna.

Temu stoji nasproti trda obveznost. Distribucije so pri PHP2Shell backporte delno dostavile 21. 10. 2026; kdor gradi sam, ne dobi ničesar samodejno. Konkretno je to pomenilo:

  1. Prenesti in preveriti izvorno kodo popravljene različice.
  2. Znova zgraditi z enakimi možnostmi; php -i pokaže prvotno vrstico configure.
  3. Izvesti teste in namestiti.
  4. Znova zagnati vse procese PHP, kot je opisano pod Ponovni zagon PHP-FPM in vseh workerjev.
  5. Preveriti tekočo različico, kot je razloženo pod Pravilno preverjanje različice PHP in stanja popravkov.
Pomembno

Sam zgrajen PHP se ne pojavi v nobenem upravljalniku paketov. Vodite popis, na katerih strežnikih teče katera lastna izdelava v kateri različici, sicer jih bodo ob naslednji vrzeli spregledali.

Kako PHP SOS pomaga konkretno?

S storitvijo popravljanja PHP podpiramo upravljavce lastnih izdelav:

  • Zajeti stanje: poiščemo sam zgrajene različice PHP in preberemo njihove možnosti gradnje.
  • Znova zgraditi: popravljena različica s preverjenim podpisom, enakimi možnostmi in popolnim testnim zagonom.
  • Razdeliti in znova zagnati: namestitev, ponovni zagon vseh procesov, kontrola tekoče različice.
  • Poenostaviti: kjer vzdrževan vir paketov izpolni isti namen, pokažemo prehod nanj.

Pogosta vprašanja

Kdaj se splača PHP prevesti sam?

Kadar potrebna različica ali možnost ni na voljo v nobenem zaupanja vrednem viru paketov, za razvoj in iskanje napak v samem PHP ali za zelo vitke, posebne izdelave. Za običajne spletne strežnike so vzdrževani paketi praviloma boljša izbira.

Kako preverim, da je izvorna koda PHP pristna?

php.net za vsak izvorni paket ponuja kontrolno vsoto SHA-256 in podpis GPG. Primerjajte kontrolno vsoto in preverite podpis s ključi upravljavcev izdaj, objavljenimi na php.net.

Ali moram po varnostni izdaji znova prevesti?

Da. Sam zgrajen PHP od distribucije ne prejema posodobitev. Po PHP2Shell je to pomenilo: zgraditi izvorno kodo 8.5.12, 8.4.27, 8.3.36 ali 8.2.35, jo namestiti in znova zagnati vse procese PHP.

Kje najdem vse možnosti configure?

Z ./configure --help v izvornem imeniku. Priročnik navaja najpomembnejše jedrne možnosti, možnosti za razširitve so na straneh priročnika o njih.

Viri

Takojšnji stik

Vsaka ura šteje. Pišite nam zdaj.

Na kratko opišite sistem, različico PHP in opažanje. Odzovemo se, razjasnimo stanje in delamo na daljavo, dokler incident ni zaključen in dokumentiran.

Takojšnja pomoč