Aktuel situation: PHP2Shell. To kritiske PHP-sårbarheder (CVSS 9,2) tillader skadelig kode uden login. Rettelser siden 21.10.2026.Hvad der skal gøres nu →

Kompilér PHP fra kildekoden

PHP kan bygges selv med configure og make. Det giver kontrol over udvidelser og indstillinger, men også det fulde ansvar for hver sikkerhedsopdatering.

Status 5 min. læsetidPHP-viden

Kort sagt: At kompilere PHP betyder at hente den officielle kildepakke fra php.net, fastlægge de ønskede grænseflader og udvidelser med ./configure, bygge med make, kontrollere med make test og derefter installere. Det giver fuld kontrol over version og omfang. Prisen: For hver sikkerhedsopdatering er I selv ansvarlige, som senest ved PHP2Shell, hvor der skulle bygges på ny, og alle processer genstartes.

Hvornår egne PHP-builds er fornuftige

De fleste servere får PHP fra en pakkekilde: fra Linux-distributionen, et tredjeparts-repositorium eller via et container-image. Det er til normal drift som regel det bedste valg, fordi sikkerhedsrettelser leveres automatisk efterfølgende.

Egne builds har alligevel deres plads:

Situation Pakkekilde Eget build
Normal webserver oftest bedre sjældent nødvendigt
Version eller indstilling ikke i pålidelig kilde ikke tilgængelig fornuftigt
Fejlfinding i PHP selv, debug-build begrænset fornuftigt
Minimalt funktionsomfang til specielle systemer begrænset fornuftigt
Sikkerhedsopdateringer kommer med kilden egen opgave

Den, der vælger egne builds, har brug for en fast proces til opdateringer, ellers bliver fordelen til en risiko.

Forudsætninger

Ifølge manualen kræves GNU make og en C-compiler; siden PHP 8.4 skal compileren understøtte C11. Den, der bygger fra git-repositoriet i stedet for fra en udgivelsespakke, har desuden brug for autoconf (fra 2.68), re2c (fra 1.0.3 for PHP 8.3 og nyere) og bison (fra 3.0.0). README'en i kildekoden nævner til Ubuntu denne indgang:

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

Til hver ekstra udvidelse kommer de passende udviklingspakker, f.eks. til OpenSSL eller libsodium.

Hent kildekoden og kontrollér ægtheden

En selvbygget PHP er kun så pålidelig som sin kildekode. php.net tilbyder hver pakke med SHA-256-kontrolsum og GPG-signatur; release managers' nøgler står på download-siden og siden med GPG-nøglerne.

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                     # sammenlign med værdien på php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Først når kontrolsum og signatur stemmer, går det videre.

Kompilér PHP: configure, make, test

Forløbet har fire trin:

  1. Konfigurere: ./configure med de ønskede indstillinger. Ved bygning fra git køres først ./buildconf.
  2. Bygge: make -j"$(nproc)"; antallet af jobs svarer ifølge README fornuftigvis til antallet af processorkerner.
  3. Teste: make TEST_PHP_ARGS=-j4 test udfører PHP's testsuite.
  4. Installere: make install, alt efter målmappen med root-rettigheder.

Et eksempel på et PHP-FPM-build med egen målmappe:

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

De vigtigste indstillinger i overblik:

Indstilling Virkning
--enable-fpm bygger PHP-FPM; dertil --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path mappe, hvor PHP søger php.ini
--with-openssl OpenSSL-understøttelse; siden PHP 7.4 findes stien via pkg-config
--with-sodium moderne kryptografi med libsodium
--disable-cgi undlader CGI-varianten, hvis den ikke er nødvendig
--enable-debug debug-symboler, ifølge README anbefalet til udvikling, ikke til produktion
--enable-zts trådsikkerhed til driftsformer med tråde

Med --prefix kan flere selvbyggede versioner installeres side om side, f.eks. under /opt/php-8.3 og /opt/php-8.4. Det letter omstillinger, men kræver disciplin: Hver installeret version er egen software, som skal bygges på ny ved hver sikkerhedsudgivelse, også selv om intet website lige nu bruger den. Builds, der ikke længere er brug for, bør fjernes fuldstændigt. Hvilke indstillinger et eksisterende build har, viser php -i i linjen »Configure Command«; den er den bedste skabelon til det næste nybyg.

Bemærkning om OPcache: Siden PHP 8.5 er OPcache ifølge den vedtagne RFC kompileret fast ind. Ved ældre versioner bygges det som udvidelse og indlæses via zend_extension. Hvad udvidelser og grænseflader er, forklarer Forstå PHP-udvidelser og SAPI forklaret.

Egne builds og sikkerhed: forpligtelserne efter PHP2Shell

Selvkompileret PHP har en reel sikkerhedsfordel: I bygger kun, hvad I har brug for. Hver udvidelse, der ikke bygges, og hver driftsform, der ikke bygges, er kode, der ikke kan rumme en sårbarhed. Et build uden CGI, med få udvidelser og klare stier er overskueligt.

Over for det står en hård forpligtelse. Distributioner har ved PHP2Shell til dels leveret backports den 21.10.2026; den, der bygger selv, får intet automatisk. Konkret betød det:

  1. Hent og kontrollér kildekoden til rettelsesversionen.
  2. Byg på ny med identiske indstillinger; php -i viser den oprindelige configure-linje.
  3. Kør tests og installér.
  4. Genstart alle PHP-processer, som beskrevet under Genstart PHP-FPM og alle workers.
  5. Kontrollér den kørende version, som forklaret under Kontrollér PHP-version og patch-status rigtigt.
Vigtigt

En selvbygget PHP optræder ikke i nogen pakkehåndtering. Før en oversigt over, på hvilke servere egne builds kører i hvilken version, ellers overses de ved den næste sårbarhed.

Hvordan hjælper PHP SOS konkret?

Via PHP-patchservicen støtter vi driftsansvarlige for egne builds:

  • Registrere beholdningen: Vi finder selvbyggede PHP-versioner og udlæser deres build-indstillinger.
  • Bygge på ny: Rettelsesversion med kontrolleret signatur, samme indstillinger og fuld testkørsel.
  • Udrulle og genstarte: Installation, genstart af alle processer, kontrol af den kørende version.
  • Forenkle: Hvor en vedligeholdt pakkekilde opfylder det samme formål, viser vi overgangen.

Ofte stillede spørgsmål

Hvornår kan det betale sig at kompilere PHP selv?

Hvis en nødvendig version eller indstilling ikke er tilgængelig i nogen pålidelig pakkekilde, til udvikling og fejlfinding i PHP selv eller til meget slanke, specielle builds. Til normale webservere er vedligeholdte pakker som regel det bedre valg.

Hvordan kontrollerer jeg, at PHP-kildekoden er ægte?

php.net tilbyder til hver kildepakke en SHA-256-kontrolsum og en GPG-signatur. Sammenlign kontrolsummen og kontrollér signaturen med release managers' nøgler, der er offentliggjort på php.net.

Skal jeg kompilere på ny efter en sikkerhedsudgivelse?

Ja. En selvbygget PHP får ingen opdateringer fra distributionen. Efter PHP2Shell betød det: Byg kildekoden fra 8.5.12, 8.4.27, 8.3.36 eller 8.2.35, installér og genstart alle PHP-processer.

Hvor finder jeg alle configure-indstillinger?

Med ./configure --help i kildemappen. Manualen nævner de vigtigste kerneindstillinger, indstillinger til udvidelser står på deres manualsider.

Kilder

Akut kontakt

Hver time tæller. Skriv til os nu.

Beskriv kort system, PHP-version og observation. Vi vender tilbage, afklarer situationen og arbejder på afstand, indtil hændelsen er afsluttet og dokumenteret.

Akut hjælp