Ajankohtainen tilanne: PHP2Shell. Kaksi kriittistä PHP-haavoittuvuutta (CVSS 9.2) sallii haittakoodin suorittamisen ilman kirjautumista. Korjaukset 21.10.2026 alkaen.Mitä nyt on tehtävä →

PHP:n kääntäminen lähdekoodista

PHP:n voi rakentaa itse komennoilla configure ja make. Se antaa hallinnan laajennuksiin ja valitsimiin, mutta myös täyden vastuun jokaisesta tietoturvapäivityksestä.

Tilanne Lukuaika 4 minPHP-tietoa

Lyhyesti: PHP:n kääntäminen tarkoittaa, että php.netistä ladataan virallinen lähdepaketti, komennolla ./configure määritetään halutut rajapinnat ja laajennukset, rakennetaan komennolla make, tarkistetaan komennolla make test ja asennetaan sitten. Se antaa täyden hallinnan versioon ja laajuuteen. Hintana on, että jokaisesta tietoturvapäivityksestä vastaatte itse, kuten viimeksi PHP2Shellin kohdalla, jolloin oli rakennettava uudelleen ja kaikki prosessit käynnistettävä uudelleen.

Milloin omat PHP-koonnit ovat järkeviä

Useimmat palvelimet saavat PHP:n pakettilähteestä: Linux-jakelusta, kolmannen osapuolen repositoriosta tai konttikuvasta. Se on tavalliseen käyttöön yleensä paras valinta, koska tietoturvakorjaukset toimitetaan perässä automaattisesti.

Omille koonneille on silti paikkansa:

Tilanne Pakettilähde Oma koonti
Tavallinen verkkopalvelin yleensä parempi harvoin tarpeen
Versio tai valitsin ei ole luotettavassa lähteessä ei saatavilla järkevä
PHP:n itsensä vianetsintä, debug-koonti rajallinen järkevä
Minimaalinen toiminnallisuus erikoisjärjestelmille rajallinen järkevä
Tietoturvapäivitykset tulevat lähteen mukana oma tehtävä

Se, joka päättää omista koonneista, tarvitsee kiinteän prosessin päivityksille, muuten etu muuttuu riskiksi.

Vaatimukset

Käsikirjan mukaan tarvitaan GNU make ja C-kääntäjä; versiosta PHP 8.4 lähtien kääntäjän on tuettava C11-standardia. Jos rakennetaan Git-repositoriosta julkaisupaketin sijaan, tarvitaan lisäksi autoconf (versiosta 2.68), re2c (versiosta 1.0.3 PHP 8.3:lle ja uudemmille) ja bison (versiosta 3.0.0). Lähdekoodin README mainitsee Ubuntulle tämän aloituksen:

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

Jokaista lisälaajennusta varten tarvitaan sopivat kehityspaketit, esimerkiksi OpenSSL:lle tai libsodiumille.

Lähdekoodin lataus ja aitouden tarkistus

Itse rakennettu PHP on yhtä luotettava kuin sen lähdekoodi. php.net tarjoaa jokaisen paketin SHA-256-tarkistussummalla ja GPG-allekirjoituksella; julkaisuvastaavien avaimet ovat lataussivulla ja GPG-avainten sivulla.

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                     # vertaa arvoon php.netissä
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Vasta kun tarkistussumma ja allekirjoitus täsmäävät, jatketaan.

PHP:n kääntäminen: configure, make, test

Kulussa on neljä vaihetta:

  1. Konfigurointi: ./configure halutuilla valitsimilla. Git-rakennuksessa ensin ajetaan ./buildconf.
  2. Rakennus: make -j"$(nproc)"; töiden määrä vastaa README:n mukaan järkevästi prosessoriydinten määrää.
  3. Testaus: make TEST_PHP_ARGS=-j4 test ajaa PHP:n testipatterin.
  4. Asennus: make install, kohdehakemistosta riippuen root-oikeuksilla.

Esimerkki PHP-FPM-koonnista omaan kohdehakemistoon:

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

Tärkeimmät valitsimet yleiskatsauksena:

Valitsin Vaikutus
--enable-fpm rakentaa PHP-FPM:n; lisäksi --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path hakemisto, josta PHP etsii php.ini-tiedoston
--with-openssl OpenSSL-tuki; versiosta PHP 7.4 lähtien polku löytyy pkg-configin kautta
--with-sodium moderni kryptografia libsodiumilla
--disable-cgi jättää CGI-variantin pois, jos sitä ei tarvita
--enable-debug debug-symbolit, README:n mukaan suositeltu kehitykseen, ei tuotantoon
--enable-zts säieturvallisuus säikeitä käyttäviin ajotapoihin

Valitsimella --prefix useita itse rakennettuja versioita voi asentaa rinnakkain, esimerkiksi hakemistoihin /opt/php-8.3 ja /opt/php-8.4. Se helpottaa siirtymiä mutta vaatii kuria: jokainen asennettu versio on omaa ohjelmistoa, joka on rakennettava uudelleen jokaisen tietoturvajulkaisun yhteydessä, vaikka mikään verkkosivusto ei juuri nyt käyttäisikään sitä. Tarpeettomat koonnit kuuluu poistaa kokonaan. Se, mitä valitsimia olemassa olevassa koonnissa on, näkyy komennolla php -i rivillä ”Configure Command”; se on paras pohja seuraavalle uudelleenrakennukselle.

Huomautus OPcachesta: versiosta PHP 8.5 lähtien OPcache on hyväksytyn RFC:n mukaan käännetty kiinteästi mukaan. Vanhemmissa versioissa se rakennetaan laajennuksena ja ladataan direktiivillä zend_extension. Mitä laajennukset ja rajapinnat ovat, selittävät PHP-laajennusten ymmärtäminen ja SAPI selitettynä.

Omat koonnit ja tietoturva: velvoitteet PHP2Shellin jälkeen

Itse käännetyllä PHP:llä on todellinen tietoturvaetu: rakennatte vain sen, mitä tarvitsette. Jokainen rakentamatta jätetty laajennus ja jokainen rakentamatta jätetty ajotapa on koodia, jossa ei voi olla aukkoa. Koonti ilman CGI:tä, harvoilla laajennuksilla ja selkeillä poluilla on helposti hallittava.

Vastapainona on kova velvoite. Jakelut toimittivat PHP2Shellin takaisinporttaukset osin 21.10.2026; itse rakentava ei saa mitään automaattisesti. Käytännössä se tarkoitti:

  1. Lataa korjausversion lähdekoodi ja tarkista se.
  2. Rakenna uudelleen identtisillä valitsimilla; php -i näyttää alkuperäisen configure-rivin.
  3. Aja testit ja asenna.
  4. Käynnistä kaikki PHP-prosessit uudelleen, kuten kohdassa PHP-FPM:n ja kaikkien workerien uudelleenkäynnistys on kuvattu.
  5. Tarkista käytössä oleva versio, kuten kohdassa PHP-version ja korjaustilan oikea tarkistus selitetään.
Tärkeää

Itse rakennettu PHP ei näy missään paketinhallinnassa. Pitäkää inventaariota siitä, millä palvelimilla omat koonnit ovat käytössä missäkin versiossa, muuten ne unohtuvat seuraavan aukon kohdalla.

Miten PHP SOS auttaa konkreettisesti?

PHP-korjauspalvelun kautta tuemme omien koontien ylläpitäjiä:

  • Kannan kartoitus: Löydämme itse rakennetut PHP-versiot ja luemme niiden rakennusvalitsimet.
  • Uudelleenrakennus: Korjausversio tarkistetulla allekirjoituksella, samoilla valitsimilla ja täydellisellä testiajolla.
  • Käyttöönotto ja uudelleenkäynnistys: Asennus, kaikkien prosessien uudelleenkäynnistys, käytössä olevan version tarkistus.
  • Yksinkertaistaminen: Missä ylläpidetty pakettilähde täyttää saman tarkoituksen, näytämme siirtymän.

Usein kysytyt kysymykset

Milloin PHP:n kääntäminen itse kannattaa?

Kun tarvittavaa versiota tai valitsinta ei ole saatavilla missään luotettavassa pakettilähteessä, PHP:n itsensä kehitykseen ja vianetsintään tai hyvin kevyisiin erikoiskoonteihin. Tavallisilla verkkopalvelimilla ylläpidetyt paketit ovat yleensä parempi valinta.

Miten tarkistan, että PHP:n lähdekoodi on aito?

php.net tarjoaa jokaiselle lähdepaketille SHA-256-tarkistussumman ja GPG-allekirjoituksen. Vertaa tarkistussummaa ja tarkista allekirjoitus julkaisuvastaavien php.netissä julkaistuilla avaimilla.

Pitääkö tietoturvajulkaisun jälkeen kääntää uudelleen?

Pitää. Itse rakennettu PHP ei saa päivityksiä jakelulta. PHP2Shellin jälkeen se tarkoitti: rakenna versioiden 8.5.12, 8.4.27, 8.3.36 tai 8.2.35 lähdekoodista, asenna ja käynnistä kaikki PHP-prosessit uudelleen.

Mistä löydän kaikki configure-valitsimet?

Komennolla ./configure --help lähdehakemistossa. Käsikirja mainitsee tärkeimmät ydinvalitsimet, laajennusten valitsimet ovat niiden käsikirjasivuilla.

Lähteet

Pikayhteys

Jokainen tunti on tärkeä. Kirjoittakaa meille nyt.

Kuvatkaa lyhyesti järjestelmä, PHP-versio ja havainnot. Otamme yhteyttä, selvitämme tilanteen ja työskentelemme etänä, kunnes tapaus on käsitelty loppuun ja dokumentoitu.

Pikaapu