Τρέχουσα κατάσταση: PHP2Shell. Δύο κρίσιμες ευπάθειες της PHP (CVSS 9.2) επιτρέπουν κακόβουλο κώδικα χωρίς σύνδεση. Patches από τις 21/10/2026.Τι πρέπει να γίνει τώρα →

Μεταγλώττιση της PHP από τον πηγαίο κώδικα

Η PHP μπορεί να χτιστεί μόνη σας με configure και make. Αυτό δίνει έλεγχο στις επεκτάσεις και τις επιλογές, αλλά και πλήρη ευθύνη για κάθε ενημέρωση ασφαλείας.

Ημερομηνία 5 λεπτά ανάγνωσηςΓνώση PHP

Εν συντομία: Να μεταγλωττίσετε την PHP σημαίνει να κατεβάσετε το επίσημο πακέτο πηγαίου κώδικα από το php.net, να ορίσετε με ./configure τις επιθυμητές διεπαφές και επεκτάσεις, να χτίσετε με make, να ελέγξετε με make test και μετά να εγκαταστήσετε. Αυτό δίνει πλήρη έλεγχο στην έκδοση και στο εύρος. Το τίμημα: για κάθε ενημέρωση ασφαλείας είστε υπεύθυνοι εσείς, όπως πρόσφατα στο PHP2Shell, όταν έπρεπε να γίνει νέο χτίσιμο και επανεκκίνηση όλων των διεργασιών.

Πότε έχουν νόημα οι δικές σας εκδόσεις PHP

Οι περισσότεροι διακομιστές λαμβάνουν την PHP από μια πηγή πακέτων: από τη διανομή Linux, από αποθετήριο τρίτου παρόχου ή μέσω εικόνας container. Αυτή είναι για την κανονική λειτουργία συνήθως η καλύτερη επιλογή, επειδή οι διορθώσεις ασφαλείας παραδίδονται αυτόματα.

Οι δικές σας εκδόσεις έχουν παρ' όλα αυτά τη θέση τους:

Κατάσταση Πηγή πακέτων Δική σας έκδοση
Κανονικός διακομιστής ιστού συνήθως καλύτερη σπάνια απαραίτητη
Έκδοση ή επιλογή που δεν υπάρχει σε αξιόπιστη πηγή μη διαθέσιμη λογική
Αντιμετώπιση σφαλμάτων στην ίδια την PHP, build αποσφαλμάτωσης περιορισμένη λογική
Ελάχιστο εύρος λειτουργιών για ειδικά συστήματα περιορισμένη λογική
Ενημερώσεις ασφαλείας έρχονται με την πηγή δική σας εργασία

Όποιος αποφασίσει για δικές του εκδόσεις, χρειάζεται μια σταθερή διαδικασία για τις ενημερώσεις, διαφορετικά το πλεονέκτημα γίνεται κίνδυνος.

Προϋποθέσεις

Σύμφωνα με το εγχειρίδιο απαιτούνται το GNU make και ένας μεταγλωττιστής C· από την PHP 8.4 ο μεταγλωττιστής πρέπει να υποστηρίζει C11. Όποιος χτίζει από το αποθετήριο Git αντί για πακέτο έκδοσης, χρειάζεται επιπλέον autoconf (από 2.68), re2c (από 1.0.3 για την PHP 8.3 και νεότερες) και bison (από 3.0.0). Το README στον πηγαίο κώδικα αναφέρει για το Ubuntu αυτή την αρχή:

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

Για κάθε πρόσθετη επέκταση προστίθενται τα κατάλληλα πακέτα ανάπτυξης, για παράδειγμα για το OpenSSL ή το libsodium.

Λήψη του πηγαίου κώδικα και έλεγχος γνησιότητας

Μια PHP που χτίσατε μόνοι σας είναι τόσο αξιόπιστη όσο ο πηγαίος κώδικάς της. Το php.net προσφέρει κάθε πακέτο με άθροισμα ελέγχου SHA-256 και υπογραφή GPG· τα κλειδιά των release managers βρίσκονται στη σελίδα λήψεων και στη σελίδα με τα κλειδιά 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                     # σύγκριση με την τιμή στο php.net
gpg --verify php-8.4.27.tar.xz.asc php-8.4.27.tar.xz

Μόνο όταν το άθροισμα ελέγχου και η υπογραφή ταιριάζουν, συνεχίζετε.

Μεταγλώττιση της PHP: configure, make, test

Η διαδικασία έχει τέσσερα βήματα:

  1. Διαμόρφωση: ./configure με τις επιθυμητές επιλογές. Στο χτίσιμο από Git εκτελέστε πρώτα ./buildconf.
  2. Χτίσιμο: make -j"$(nproc)"· ο αριθμός των εργασιών αντιστοιχεί σύμφωνα με το README λογικά στον αριθμό των πυρήνων του επεξεργαστή.
  3. Δοκιμή: το make TEST_PHP_ARGS=-j4 test εκτελεί το σύνολο δοκιμών της PHP.
  4. Εγκατάσταση: make install, ανάλογα με τον κατάλογο-στόχο με δικαιώματα root.

Ένα παράδειγμα για ένα χτίσιμο PHP-FPM με δικό του κατάλογο-στόχο:

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

Οι σημαντικότερες επιλογές με μια ματιά:

Επιλογή Αποτέλεσμα
--enable-fpm χτίζει το PHP-FPM· μαζί με --with-fpm-user, --with-fpm-group, --with-fpm-systemd
--with-config-file-path κατάλογος στον οποίο η PHP αναζητά το php.ini
--with-openssl υποστήριξη OpenSSL· από την PHP 7.4 η διαδρομή βρίσκεται μέσω pkg-config
--with-sodium σύγχρονη κρυπτογραφία με libsodium
--disable-cgi παραλείπει την παραλλαγή CGI, όταν δεν χρειάζεται
--enable-debug σύμβολα αποσφαλμάτωσης, σύμφωνα με το README συνιστώνται για ανάπτυξη, όχι για παραγωγή
--enable-zts ασφάλεια threads για τρόπους λειτουργίας με threads

Με το --prefix μπορούν να εγκατασταθούν παράλληλα πολλές εκδόσεις που χτίσατε μόνοι σας, για παράδειγμα κάτω από /opt/php-8.3 και /opt/php-8.4. Αυτό διευκολύνει τις μεταβάσεις, απαιτεί όμως πειθαρχία: κάθε εγκατεστημένη έκδοση είναι ξεχωριστό λογισμικό που πρέπει να ξαναχτίζεται σε κάθε έκδοση ασφαλείας, ακόμη κι αν δεν τη χρησιμοποιεί αυτή τη στιγμή κανένας ιστότοπος. Τα χτισίματα που δεν χρειάζονται πλέον πρέπει να αφαιρούνται πλήρως. Ποιες επιλογές έχει ένα υπάρχον χτίσιμο δείχνει το php -i στη γραμμή «Configure Command»· είναι το καλύτερο πρότυπο για το επόμενο νέο χτίσιμο.

Υπόδειξη για την OPcache: από την PHP 8.5 η OPcache είναι σύμφωνα με το εγκεκριμένο RFC μόνιμα μεταγλωττισμένη μέσα στην PHP. Στις παλαιότερες εκδόσεις χτίζεται ως επέκταση και φορτώνεται με zend_extension. Τι είναι οι επεκτάσεις και οι διεπαφές, εξηγούν οι σελίδες Κατανόηση των επεκτάσεων PHP και Το SAPI εξηγημένο.

Δικές σας εκδόσεις και ασφάλεια: οι υποχρεώσεις μετά το PHP2Shell

Η μεταγλωττισμένη από εσάς PHP έχει ένα πραγματικό πλεονέκτημα ασφαλείας: χτίζετε μόνο ό,τι χρειάζεστε. Κάθε επέκταση που δεν χτίστηκε και κάθε τρόπος λειτουργίας που δεν χτίστηκε είναι κώδικας που δεν μπορεί να περιέχει ευπάθεια. Ένα χτίσιμο χωρίς CGI, με λίγες επεκτάσεις και σαφείς διαδρομές, είναι ευανάγνωστο.

Απέναντι σε αυτό βρίσκεται μια σκληρή υποχρέωση. Οι διανομές παρέδωσαν στο PHP2Shell backports εν μέρει στις 21.10.2026· όποιος χτίζει μόνος του, δεν λαμβάνει τίποτα αυτόματα. Συγκεκριμένα αυτό σήμαινε:

  1. Λήψη και έλεγχος του πηγαίου κώδικα της έκδοσης με τη διόρθωση.
  2. Νέο χτίσιμο με πανομοιότυπες επιλογές· το php -i δείχνει την αρχική γραμμή configure.
  3. Εκτέλεση δοκιμών και εγκατάσταση.
  4. Επανεκκίνηση όλων των διεργασιών PHP, όπως περιγράφεται στη σελίδα Επανεκκίνηση του PHP-FPM και όλων των workers.
  5. Έλεγχος της εκτελούμενης έκδοσης, όπως εξηγείται στη σελίδα Σωστός έλεγχος έκδοσης PHP και επιπέδου ενημέρωσης.
Σημαντικό

Μια PHP που χτίσατε μόνοι σας δεν εμφανίζεται σε κανέναν διαχειριστή πακέτων. Τηρήστε ένα ευρετήριο για το σε ποιους διακομιστές εκτελούνται δικές σας εκδόσεις και σε ποια έκδοση, διαφορετικά θα παραβλεφθούν στην επόμενη ευπάθεια.

Πώς βοηθά συγκεκριμένα η PHP SOS;

Μέσω της υπηρεσίας patch PHP υποστηρίζουμε τους διαχειριστές δικών τους εκδόσεων:

  • Καταγραφή του υπάρχοντος: Εντοπίζουμε τις εκδόσεις PHP που χτίστηκαν μόνες τους και διαβάζουμε τις επιλογές χτισίματός τους.
  • Νέο χτίσιμο: Έκδοση με τη διόρθωση, με ελεγμένη υπογραφή, ίδιες επιλογές και πλήρη εκτέλεση δοκιμών.
  • Διάθεση και επανεκκίνηση: Εγκατάσταση, επανεκκίνηση όλων των διεργασιών, έλεγχος της εκτελούμενης έκδοσης.
  • Απλοποίηση: Όπου μια συντηρημένη πηγή πακέτων εξυπηρετεί τον ίδιο σκοπό, δείχνουμε τη μετάβαση σε αυτήν.

Συχνές ερωτήσεις

Πότε αξίζει να μεταγλωττίσω μόνος μου την PHP;

Όταν μια απαιτούμενη έκδοση ή επιλογή δεν είναι διαθέσιμη σε καμία αξιόπιστη πηγή πακέτων, για ανάπτυξη και αντιμετώπιση σφαλμάτων στην ίδια την PHP ή για πολύ λιτές, ειδικές εκδόσεις. Για κανονικούς διακομιστές ιστού τα συντηρημένα πακέτα είναι συνήθως η καλύτερη επιλογή.

Πώς ελέγχω ότι ο πηγαίος κώδικας της PHP είναι γνήσιος;

Το php.net προσφέρει για κάθε πακέτο πηγαίου κώδικα ένα άθροισμα ελέγχου SHA-256 και μια υπογραφή GPG. Συγκρίνετε το άθροισμα ελέγχου και ελέγξτε την υπογραφή με τα κλειδιά των release managers που δημοσιεύονται στο php.net.

Πρέπει να μεταγλωττίσω ξανά μετά από μια έκδοση ασφαλείας;

Ναι. Μια PHP που χτίσατε μόνοι σας δεν λαμβάνει ενημερώσεις από τη διανομή. Μετά το PHP2Shell αυτό σήμαινε: χτίσιμο του πηγαίου κώδικα των 8.5.12, 8.4.27, 8.3.36 ή 8.2.35, εγκατάσταση και επανεκκίνηση όλων των διεργασιών PHP.

Πού βρίσκω όλες τις επιλογές configure;

Με ./configure --help στον κατάλογο του πηγαίου κώδικα. Το εγχειρίδιο αναφέρει τις σημαντικότερες βασικές επιλογές, οι επιλογές για επεκτάσεις υπάρχουν στις σελίδες του εγχειριδίου τους.

Πηγές

Άμεση επικοινωνία

Κάθε ώρα μετράει. Γράψτε μας τώρα.

Περιγράψτε σύντομα το σύστημα, την έκδοση PHP και ό,τι παρατηρείτε. Θα επικοινωνήσουμε μαζί σας, θα διευκρινίσουμε την κατάσταση και θα εργαστούμε εξ αποστάσεως μέχρι το περιστατικό να κλείσει και να τεκμηριωθεί.

Άμεση βοήθεια