Situația actuală: PHP2Shell. Două vulnerabilități critice PHP (CVSS 9.2) permit cod malițios fără autentificare. Patchuri din 21.10.2026.Ce este de făcut acum →

Compilarea PHP din codul sursă

PHP poate fi construit singur cu configure și make. Aceasta aduce control asupra extensiilor și opțiunilor, dar și răspunderea deplină pentru fiecare actualizare de securitate.

Stadiu 5 min de cititCunoștințe PHP

Pe scurt: A compila PHP înseamnă a descărca pachetul sursă oficial de pe php.net, a stabili cu ./configure interfețele și extensiile dorite, a construi cu make, a verifica cu make test și apoi a instala. Aceasta dă control deplin asupra versiunii și a conținutului. Prețul: pentru fiecare actualizare de securitate sunteți responsabil singur, ca recent la PHP2Shell, când a trebuit reconstruit și toate procesele repornite.

Când sunt rezonabile build-urile PHP proprii

Cele mai multe servere obțin PHP dintr-o sursă de pachete: din distribuția Linux, dintr-un depozit al unui terț sau printr-o imagine de container. Pentru exploatarea normală, aceasta este de obicei cea mai bună alegere, deoarece remedierile de securitate sunt livrate automat.

Build-urile proprii își au totuși locul lor:

Situație Sursă de pachete Build propriu
Server web obișnuit de obicei mai bună rar necesar
Versiune sau opțiune lipsă din sursa de încredere indisponibilă rezonabil
Depanare la PHP însuși, build de debug limitată rezonabil
Set minim de funcții pentru sisteme speciale limitată rezonabil
Actualizări de securitate vin odată cu sursa sarcină proprie

Cine alege build-uri proprii are nevoie de un proces fix pentru actualizări, altfel avantajul devine risc.

Cerințe

Potrivit manualului, sunt necesare GNU make și un compilator C; din PHP 8.4, compilatorul trebuie să accepte C11. Cine construiește din depozitul Git, nu dintr-un pachet de lansare, are nevoie în plus de autoconf (de la 2.68), re2c (de la 1.0.3 pentru PHP 8.3 și mai noi) și bison (de la 3.0.0). README-ul din codul sursă indică pentru Ubuntu acest început:

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

Pentru fiecare extensie suplimentară se adaugă pachetele de dezvoltare potrivite, de exemplu pentru OpenSSL sau libsodium.

Descărcarea codului sursă și verificarea autenticității

Un PHP construit singur este la fel de demn de încredere ca și codul său sursă. php.net oferă fiecare pachet cu sumă de control SHA-256 și semnătură GPG; cheile release managerilor se găsesc pe pagina de descărcare și pe pagina cu cheile 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                     # compară cu valoarea de pe php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Abia când suma de control și semnătura corespund, se merge mai departe.

Compilarea PHP: configure, make, test

Desfășurarea are patru pași:

  1. Configurarea: ./configure cu opțiunile dorite. La construirea din Git, rulați înainte ./buildconf.
  2. Construirea: make -j"$(nproc)"; numărul de job-uri corespunde, potrivit README, în mod rezonabil numărului de nuclee ale procesorului.
  3. Testarea: make TEST_PHP_ARGS=-j4 test rulează suita de teste a PHP.
  4. Instalarea: make install, în funcție de directorul țintă cu drepturi de root.

Un exemplu pentru un build PHP-FPM cu director țintă propriu:

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

Cele mai importante opțiuni, pe scurt:

Opțiune Efect
--enable-fpm construiește PHP-FPM; în plus --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path directorul în care PHP caută php.ini
--with-openssl suport OpenSSL; din PHP 7.4, calea este găsită prin pkg-config
--with-sodium criptografie modernă cu libsodium
--disable-cgi renunță la varianta CGI, dacă nu este necesară
--enable-debug simboluri de debug, recomandate potrivit README pentru dezvoltare, nu pentru producție
--enable-zts siguranță la thread-uri pentru moduri de operare cu thread-uri

Cu --prefix se pot instala una lângă alta mai multe versiuni construite singur, de exemplu în /opt/php-8.3 și /opt/php-8.4. Aceasta ușurează trecerile, dar cere disciplină: fiecare versiune instalată este un software separat, care trebuie reconstruit la fiecare lansare de securitate, chiar dacă în acel moment niciun site nu o folosește. Build-urile care nu mai sunt necesare trebuie eliminate complet. Ce opțiuni are un build existent arată php -i în linia „Configure Command”; ea este cel mai bun model pentru următoarea reconstrucție.

Observație despre OPcache: din PHP 8.5, OPcache este, potrivit RFC-ului adoptat, compilat fix. La versiunile mai vechi, el este construit ca extensie și încărcat prin zend_extension. Ce sunt extensiile și interfețele explică Înțelegerea extensiilor PHP și SAPI explicat.

Build-urile proprii și securitatea: obligațiile după PHP2Shell

PHP compilat singur are un avantaj real de securitate: construiți doar ce aveți nevoie. Fiecare extensie neconstruită și fiecare mod de operare neconstruit este cod care nu poate conține o vulnerabilitate. Un build fără CGI, cu puține extensii și căi clare este ușor de supravegheat.

În fața acestuia stă o obligație grea. Distribuțiile au livrat la PHP2Shell backport-uri în parte la 21.10.2026; cine construiește singur nu primește nimic automat. Concret, aceasta a însemnat:

  1. Descărcarea și verificarea codului sursă al versiunii cu remedierea.
  2. Reconstruirea cu opțiuni identice; php -i arată linia configure inițială.
  3. Rularea testelor și instalarea.
  4. Repornirea tuturor proceselor PHP, așa cum este descris la Repornirea PHP-FPM și a tuturor workerilor.
  5. Verificarea versiunii care rulează, așa cum este explicat la Verificarea corectă a versiunii PHP și a stării de patch.
Important

Un PHP construit singur nu apare în niciun manager de pachete. Țineți un inventar al serverelor pe care rulează build-uri proprii și în ce versiune, altfel ele vor fi trecute cu vederea la următoarea vulnerabilitate.

Cum ajută PHP SOS concret?

Prin serviciul PHP-Patch sprijinim operatorii de build-uri proprii:

  • Inventarierea: Găsim versiunile PHP construite singur și citim opțiunile lor de build.
  • Reconstruirea: Versiune cu remediere, cu semnătură verificată, aceleași opțiuni și rulare completă a testelor.
  • Distribuirea și repornirea: Instalare, repornirea tuturor proceselor, controlul versiunii care rulează.
  • Simplificarea: Acolo unde o sursă de pachete întreținută îndeplinește același scop, arătăm trecerea la aceasta.

Întrebări frecvente

Când merită să compilez PHP singur?

Când o versiune sau o opțiune necesară nu este disponibilă în nicio sursă de pachete de încredere, pentru dezvoltare și depanare la PHP însuși sau pentru build-uri foarte subțiri, speciale. Pentru servere web obișnuite, pachetele întreținute sunt de regulă alegerea mai bună.

Cum verific că sursa PHP este autentică?

php.net oferă pentru fiecare pachet sursă o sumă de control SHA-256 și o semnătură GPG. Comparați suma de control și verificați semnătura cu cheile release managerilor publicate pe php.net.

Trebuie să recompilez după o lansare de securitate?

Da. Un PHP construit singur nu primește actualizări de la distribuție. După PHP2Shell, aceasta a însemnat: construirea codului sursă 8.5.12, 8.4.27, 8.3.36 sau 8.2.35, instalarea și repornirea tuturor proceselor PHP.

Unde găsesc toate opțiunile configure?

Cu ./configure --help în directorul sursă. Manualul menționează cele mai importante opțiuni de bază, iar opțiunile pentru extensii se găsesc pe paginile lor din manual.

Surse

Contact imediat

Fiecare oră contează. Scrieți-ne acum.

Descrieți pe scurt sistemul, versiunea PHP și ce ați observat. Ne vom face auziți, clarificăm situația și lucrăm la distanță până când incidentul este încheiat și documentat.

Ajutor imediat