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

Επίσημες εικόνες PHP Docker: tags, digests και επανακατασκευή

Ένα tag της επίσημης εικόνας PHP είναι ένας δείκτης που με τον χρόνο μετακινείται σε νεότερα επίπεδα. Όποιος γνωρίζει τι σημαίνουν tag, παραλλαγή και digest, επιλέγει τη σωστή εικόνα και μπορεί να τεκμηριώσει το επίπεδο του patch.

Ημερομηνία 6 λεπτά ανάγνωσηςΦιλοξενία και διανομές

Εν ολίγοις: Η επίσημη εικόνα PHP στο Docker Hub διατίθεται σε πολλά tags, που συνδυάζουν έκδοση, παραλλαγή (για παράδειγμα cli, fpm, apache) και βασικό σύστημα. Ένα tag είναι ένας δείκτης που μετακινείται σε νέα επίπεδα μετά από επανακατασκευές· μόνο το digest προσδιορίζει ακριβώς ένα επίπεδο. Απέναντι στο PHP2Shell χρειάζεστε μια εικόνα με PHP 8.5.12, 8.4.27, 8.3.36 ή 8.2.35, ελεγμένη με php -v, και μια επανακατασκευή των δικών σας εικόνων πάνω σε αυτή.

Γιατί το tag μόνο του λέει λίγα

Πολλές ομάδες γράφουν στο Dockerfile τους μια γραμμή όπως FROM php:8.3-fpm και μετά την ξεχνούν. Αυτό λειτουργεί όσο δεν ρωτά κανείς ποια έκδοση PHP τρέχει πραγματικά. Από το PHP2Shell και μετά ρωτά ο καθένας.

Η απάντηση δεν βρίσκεται στο Dockerfile. Ένα tag όπως 8.3-fpm δείχνει τη στιγμή του τραβήγματος στο νεότερο επίπεδο αυτού του κλάδου. Αν η εικόνα τραβήχτηκε πριν από τις 21 Οκτωβρίου και δεν ανανεώθηκε έκτοτε, περιέχει ευπαθή έκδοση, παρόλο που το tag δείχνει σήμερα σε διορθωμένο επίπεδο. Σύμφωνα με τις κατευθυντήριες γραμμές των Docker Official Images, οι εικόνες ξαναχτίζονται ενεργά, και για διορθώσεις ασφαλείας. Το τοπικό σας επίπεδο όμως δεν επηρεάζεται από αυτό.

Την πλήρη πορεία από την επανακατασκευή έως το νέο container περιγράφει το Patch PHP σε containers Docker. Εδώ πρόκειται για το προκαταρκτικό ερώτημα: ποια εικόνα είναι η σωστή και πώς τεκμηριώνετε το επίπεδό της;

Tags εικόνων PHP Docker: πώς είναι δομημένα

Τα tags αποτελούνται από έως τρία μέρη. Το Docker Hub δείχνει παραδείγματα όπως php:8.2-cli, php:8.2-fpm-alpine ή php:8.4.27-zts-alpine3.24.

Συστατικό Παράδειγμα Σημασία
Ένδειξη έκδοσης 8.4.27 ή 8.4 η πλήρης έκδοση μένει σε αυτό το επίπεδο, η ένδειξη κλάδου μετακινείται με τα νέα patches
Παραλλαγή cli, fpm, apache, zts τρόπος λειτουργίας της PHP στο container
Βασικό σύστημα alpine3.24, bookworm, trixie υποκείμενη έκδοση Alpine ή Debian

Οι παραλλαγές δεν είναι ισοδύναμες για το PHP2Shell. Το fpm λειτουργεί PHP-FPM, το apache λειτουργεί την PHP ως module Apache, δηλαδή mod_php. Αυτόν τον τρόπο λειτουργίας η ομάδα PHP τον εκτιμά ως τον υψηλότερο κίνδυνο, επειδή εκεί δείχθηκε ένα exploit πριν καν τρέξει κώδικας εφαρμογής. Περισσότερα στο Γιατί το mod_php κινδυνεύει ιδιαίτερα. Η παραλλαγή cli προορίζεται για εργασίες γραμμής εντολών.

Και το βασικό σύστημα έχει συνέπειες. Οι εικόνες Alpine είναι μικρές, χρησιμοποιούν όμως διαφορετική βιβλιοθήκη C από τις εικόνες Debian· ορισμένες επεκτάσεις ή προμεταγλωττισμένες βιβλιοθήκες συμπεριφέρονται εκεί διαφορετικά. Μην αλλάζετε γι' αυτό το βασικό σύστημα παρεμπιπτόντως με την ενημέρωση ασφαλείας, αλλά μείνετε αρχικά σε ό,τι γνωρίζει η εφαρμογή σας.

Σημαντικό για την κατανόηση: στην επίσημη εικόνα η PHP δεν προέρχεται από τα πακέτα της βασικής διανομής. Το Docker Hub περιγράφει ότι ο πηγαίος κώδικας της PHP βρίσκεται στην εικόνα και οι επεκτάσεις ενσωματώνονται μέσω βοηθητικών scripts όπως το docker-php-ext-install. Μια ενημέρωση πακέτων του βασικού συστήματος στο δικό σας Dockerfile δεν αλλάζει γι' αυτό την έκδοση PHP. Καθοριστικό είναι μόνο σε ποιο επίπεδο της επίσημης εικόνας βασίζεστε.

Tag ή digest: τι αλλάζει και πότε

Ένα digest είναι ένα άθροισμα ελέγχου για το περιεχόμενο μιας εικόνας, γραμμένο ως sha256: με μια μακριά ακολουθία χαρακτήρων. Αλλάζει με κάθε επανακατασκευή. Έτσι ενδείκνυται ως τεκμήριο: όποιος γνωρίζει το digest, ξέρει ακριβώς ποιο επίπεδο τρέχει.

Στην πράξη έχει αποδειχθεί μια κατανομή εργασιών:

  • Στο Dockerfile χρησιμοποιήστε το tag κλάδου, για παράδειγμα php:8.4-fpm, ώστε μια επανακατασκευή να λαμβάνει αυτόματα το νεότερο patch αυτού του κλάδου.
  • Στο rollout χρησιμοποιήστε το digest της έτοιμης δικής σας εικόνας, ώστε να είναι σαφές τι παραδίδεται.
  • Στην τεκμηρίωση καταγράψτε και τα δύο: tag, digest και την έκδοση που ελέγχθηκε με php -v.

Όποιος αντίθετα καθηλώνει ένα tag πλήρους έκδοσης όπως 8.3.35-fpm, δεν λαμβάνει ποτέ αυτόματα patch. Αυτό μπορεί να είναι επιθυμητό, απαιτεί όμως μια διαδικασία που ανεβάζει το tag σε κάθε ανακοίνωση ασφαλείας.

PHP2Shell: έλεγχος μιας εικόνας πριν από τη χρήση

Οι παρακάτω εντολές τραβούν μια εικόνα και διαβάζουν πληροφορίες. Δεν αλλάζουν containers που τρέχουν.

# Τράβηγμα του τρέχοντος επιπέδου του tag κλάδου
docker pull php:8.4-fpm

# Ποια έκδοση PHP βρίσκεται στην εικόνα;
docker run --rm php:8.4-fpm php -v

# Εμφάνιση του digest της εικόνας που τραβήχτηκε
docker image inspect php:8.4-fpm --format '{{index .RepoDigests 0}}'

# Ερώτημα για digest και πλατφόρμες απευθείας στο registry
docker buildx imagetools inspect php:8.4-fpm

Το ερώτημα με imagetools δείχνει σε εικόνες πολλαπλών πλατφορμών ένα ανώτερο digest και από κάτω ένα δικό του ανά πλατφόρμα, για παράδειγμα linux/amd64 ή linux/arm64. Τεκμηριώστε το digest που τραβούν πραγματικά οι διακομιστές σας και προσέξτε ότι οι υπολογιστές ανάπτυξης με άλλη αρχιτεκτονική λαμβάνουν άλλο digest πλατφόρμας.

Αν το php -v δεν δείχνει τουλάχιστον τη διορθωμένη έκδοση του κλάδου, η εικόνα είναι παρωχημένη ή προέρχεται από ενδιάμεση μνήμη. Ελέγξτε τότε αν το περιβάλλον σας χρησιμοποιεί καθρέφτη registry που παραδίδει παλιά επίπεδα.

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

Συμβουλή

Η εικόνα φέρνει, σύμφωνα με το Docker Hub, php.ini-development και php.ini-production και συνιστά ιδιαίτερα για την παραγωγική λειτουργία την έκδοση παραγωγής. Τις δικές σας ρυθμίσεις τις τοποθετείτε ως αρχείο στο $PHP_INI_DIR/conf.d/, και τις προσωρινές τιμές του php.net.

Τυπικά λάθη στην επιλογή εικόνας

  • Παραλλαγή από συνήθεια: Επιλέγεται η παραλλαγή apache επειδή ξεκινά εύκολα, παρόλο που θα ήταν δυνατό το fpm με ξεχωριστό διακομιστή ιστού.
  • Καμία επανακατασκευή των δικών σας εικόνων: Το βασικό image είναι τρέχον, η εικόνα εφαρμογής που χτίστηκε από αυτό όχι.
  • Παράβλεψη των builds πολλαπλών σταδίων: Σε ένα Dockerfile με πολλές γραμμές FROM προσαρμόζεται μόνο μία.
  • Λησμονημένες δευτερεύουσες εικόνες: Workers, containers cron και εργαλεία διαχείρισης χρησιμοποιούν δικά τους tags.
  • Στήριξη μόνο στο latest: Το tag δεν λέει τίποτα για κλάδο και παραλλαγή και μπορεί να μεταπηδήσει απροσδόκητα σε νέο κύριο κλάδο.

Πώς αυτοματοποιείτε τις επανακατασκευές, ώστε μια παρωχημένη εικόνα να μην τρέχει καν για πολύ, περιγράφει το CI/CD: αυτόματη επανακατασκευή εικόνων PHP. Τα βασικά για την PHP σε containers εξηγεί το PHP σε containers.

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

  • Έλεγχος αποθέματος: Διαβάζουμε ποια tags, digests και εκδόσεις PHP περιέχουν οι εικόνες και τα containers σας που τρέχουν.
  • Αξιολόγηση παραλλαγής: Ελέγχουμε αν χρειάζεται mod_php ή αν το fpm με ξεχωριστό διακομιστή ιστού μειώνει τον κίνδυνο.
  • Επανακατασκευή και τεκμηρίωση: Με την υπηρεσία patch PHP ξαναχτίζουμε εικόνες σε διορθωμένη βάση και τεκμηριώνουμε tag, digest και έκδοση.
  • Εδραίωση της διαδικασίας: Ρυθμίζουμε Dockerfiles και rollouts έτσι ώστε το επόμενο patch να φτάνει με προγραμματισμό.

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

Ποια είναι η διαφορά μεταξύ tag και digest;

Ένα tag όπως php:8.4-fpm είναι ένα όνομα που μπορεί να δείχνει μετά από κάθε επανακατασκευή σε νέο επίπεδο. Ένα digest είναι ένα άθροισμα ελέγχου που προσδιορίζει ακριβώς ένα αμετάβλητο επίπεδο. Για τεκμήρια και αναπαραγώγιμα rollouts το digest είναι η πιο αξιόπιστη ένδειξη.

Ποιο tag περιέχει τη διόρθωση του PHP2Shell;

Διορθωμένες είναι οι PHP 8.5.12, 8.4.27, 8.3.36 και 8.2.35. Ένα tag με πλήρη αριθμό έκδοσης δείχνει απευθείας το επίπεδο. Στα συντομότερα tags όπως 8.4-fpm ελέγχετε μετά το τράβηγμα με php -v ποια έκδοση περιέχεται πραγματικά.

Υπάρχει επίσημη εικόνα με patch για την PHP 8.1;

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

Είναι η παραλλαγή apache πιο επικίνδυνη από το fpm;

Η παραλλαγή apache λειτουργεί την PHP ως module Apache, δηλαδή mod_php. Αυτόν τον τρόπο λειτουργίας η ομάδα PHP τον εκτιμά στο PHP2Shell ως τον υψηλότερο κίνδυνο. Και οι δύο παραλλαγές χρειάζονται την ενημέρωση· στο mod_php απαιτείται ιδιαίτερη βιασύνη.

Πηγές

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

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

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

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