PHP su SUSE Linux Enterprise: pacchetti RPM, zypper e gestione delle patch

Dove si trova PHP su SLES, quale ramo porta ogni service pack, cosa coprono supporto generale e LTSS, come cercare e installare le patch per CVE con zypper e cosa fare quando il PHP di SLES 12 non riceve più correzioni.

Copertina con il logo php∞, la categoria Distribuzioni Linux, il titolo PHP su SUSE Linux Enterprise e il numero 24

SUSE Linux Enterprise è meno diffusa di Debian o RHEL sui server web, ma la si incontra spesso in aziende che l’hanno scelta per SAP o per altri applicativi gestionali e poi l’hanno usata anche per il portale, l’intranet o l’e-commerce. In questi contesti PHP è raramente il centro dell’attenzione: arriva da un modulo del sistema, viene aggiornato con le patch mensili insieme a tutto il resto, e nessuno si chiede fino a quando quelle patch continueranno ad arrivare.

In questo articolo vediamo dove si trova PHP su SUSE Linux Enterprise Server, quale versione porta ogni service pack, come funzionano il supporto generale e LTSS per i pacchetti PHP, come si cercano e si installano le patch di sicurezza con zypper e cosa fare quando una service pack o un prodotto escono dal supporto.

Dove si trova PHP su SUSE

Su SLES il sistema di base è volutamente ridotto, e i pacchetti applicativi sono organizzati in moduli da attivare a parte. PHP si trova nel modulo Web and Scripting, insieme ad Apache e ad altri linguaggi. Le versioni di PHP sostituite da una più recente passano nel modulo Legacy. I nomi dei pacchetti indicano la versione principale: php5, php7 e php74 su SLES 12, php7 e php8 su SLES 15, con i relativi php8-fpm, apache2-mod_php8 e le estensioni.

Il nome del pacchetto non basta per sapere quale ramo è installato: php8 è PHP 8.0 su SLES 15 SP4 e SP5, 8.2 su SP6 e 8.4 su SP7. Esiste poi SUSE Package Hub, con pacchetti mantenuti dalla comunità e non coperti dal supporto commerciale di SUSE: se il PHP in uso arriva da lì, valgono altre regole.

# Prodotto e service pack
cat /etc/os-release

# Moduli registrati e stato dell’abbonamento
sudo SUSEConnect --status-text
sudo SUSEConnect --list-extensions

# Pacchetti PHP installati, con versione e fornitore
rpm -qa 'php*' | sort
rpm -qi php8 | grep -E '^(Version|Release|Vendor)'

# Versioni disponibili nei repository e quella installata
zypper search -s php8

Quale PHP in ogni versione di SLES

Le note di rilascio di SLES 15 SP7 riassumono la regola: ogni service pack porta come predefinito un nuovo ramo di PHP, mentre gli aggiornamenti dentro lo stesso ramo, per esempio da 8.4.x a 8.4.y, escono quando servono per correggere vulnerabilità e bug.

ProdottoPHPFine del supporto generaleFine di LTSS
SLES 12 SP55.5, 7.0 e 7.4 nel modulo Web and Scripting31 ottobre 2024il modulo non è coperto
SLES 15 SP0 e SP17.2conclusaconclusa
SLES 15 SP2 e SP37.4conclusaconclusa
SLES 15 SP48.031 dicembre 202331 dicembre 2026
SLES 15 SP58.031 dicembre 202431 dicembre 2027
SLES 15 SP68.231 dicembre 202531 dicembre 2028
SLES 15 SP78.431 luglio 203131 luglio 2034
SLES 16.08.430 novembre 202730 novembre 2030
Fonti: ciclo di vita dei prodotti SUSE, note di rilascio e avvisi di sicurezza SUSE.
Diagramma a barre tra il 2022 e il 2034 con il PHP predefinito e la durata del supporto dei prodotti SUSE. SLES 12 SP5, con PHP 5.5, 7.0 e 7.4, ha il supporto generale fino a ottobre 2024 e poi nessuna patch per PHP, perché il modulo Web and Scripting è escluso da LTSS. SLES 15 SP4 e SP5 con PHP 8.0 hanno il supporto generale fino alla fine del 2023 e del 2024 e LTSS fino alla fine del 2026 e del 2027. SLES 15 SP6 con PHP 8.2 ha il supporto generale fino alla fine del 2025 e LTSS fino alla fine del 2028. SLES 15 SP7 con PHP 8.4 ha il supporto generale fino a luglio 2031 e LTSS fino a luglio 2034. SLES 16.0 con PHP 8.4 ha il supporto generale fino a novembre 2027 e il Long Term Support fino a novembre 2030. Una linea tratteggiata segna ottobre 2026. Una nota ricorda che SP0 e SP1 usano PHP 7.2 e SP2 e SP3 PHP 7.4
Su SLES 15 la durata delle patch per PHP dipende dalla service pack, non dal prodotto.

Supporto generale e LTSS: cosa vale per PHP

Ogni service pack di SLES 15 ha un periodo di supporto generale, che di norma si chiude qualche mese dopo l’uscita della service pack successiva. Dopo quella data le patch arrivano solo a chi ha un abbonamento aggiuntivo LTSS, il Long Term Service Pack Support. Gli avvisi di sicurezza di SUSE per php8 pubblicati nel 2026 elencano tra i prodotti interessati anche SLES 15 SP4 LTSS: chi è rimasto su una service pack precedente con LTSS riceve quindi ancora le correzioni per il proprio PHP.

SLES 12 è diverso, ed è il caso più delicato. Il supporto generale di SLES 12 SP5 si è chiuso il 31 ottobre 2024 e il prodotto prosegue con LTSS, ma la pagina del ciclo di vita di SUSE indica che il modulo Web and Scripting di SLES 12 non ha copertura LTSS. In pratica un server SLES 12 con LTSS attivo continua a ricevere patch per il kernel e il sistema di base, ma non per PHP 5.5, 7.0 o 7.4. È una situazione facile da fraintendere, perché l’abbonamento è in regola e zypper patch continua a installare aggiornamenti.

Patch e pacchetti: come ragiona zypper

Su SUSE gli aggiornamenti ufficiali sono distribuiti come patch: oggetti con un nome, una categoria (security, recommended, optional), una gravità e l’elenco dei pacchetti RPM da aggiornare. Ogni patch fa riferimento agli identificativi CVE che corregge e ai bug interni di SUSE. Questo rende zypper molto comodo per rispondere a una domanda precisa: la vulnerabilità appena pubblicata è già corretta su questo server?

# Aggiorna i metadati dei repository
sudo zypper refresh

# Patch di sicurezza applicabili al sistema
zypper list-patches --category security

# Patch che correggono una CVE precisa (anche con --all per vedere quelle già installate)
zypper list-patches --cve=CVE-AAAA-NNNNN

# Dettagli di una patch: pacchetti, gravità, riferimenti
zypper info -t patch NOME-DELLA-PATCH

# Installa solo le patch per quella CVE
sudo zypper patch --cve=CVE-AAAA-NNNNN

# Processi che usano ancora file sostituiti, da riavviare
sudo zypper ps -s
# Nome del servizio FPM: dipende dal pacchetto installato, verificalo prima
systemctl list-unit-files 'php*fpm*'
sudo systemctl restart php-fpm   # sostituisci con il nome trovato sopra

# Conferma nel changelog del pacchetto installato
rpm -q --changelog php8 | grep -m 10 -i cve

Il riavvio è un passaggio che si dimentica spesso. Dopo l’aggiornamento i file sul disco sono quelli nuovi, ma i processi di PHP-FPM e Apache già in esecuzione continuano a usare il codice vecchio finché non vengono riavviati. zypper ps mostra proprio questi processi.

Flusso in sei passi per installare una patch di sicurezza per PHP con zypper: 1, registrazione del prodotto e del modulo Web and Scripting, verificata con SUSEConnect --status-text; 2, aggiornamento dei metadati con zypper refresh; 3, ricerca della patch per categoria o per numero di CVE con zypper lp --cve; 4, lettura della patch con pacchetti coinvolti, gravità e riferimenti con zypper info -t patch; 5, installazione delle sole patch scelte con zypper patch --cve; 6, riavvio dei processi che usano ancora i vecchi file, individuati con zypper ps -s. Una nota ricorda che prima del passo 5 la procedura va eseguita in un ambiente di prova con l’applicazione reale
Dalla CVE al servizio riavviato, con i comandi di ogni passo.

Proteggere pacchetti PHP ricostruiti

Quando il PHP di SUSE non riceve più correzioni, come per i pacchetti del modulo Web and Scripting su SLES 12, una delle strade è installare pacchetti RPM ricostruiti con le patch di sicurezza. Su SUSE ci sono due meccanismi che aiutano a mantenerli al loro posto.

  • Fedeltà al fornitore: per default zypper non sostituisce un pacchetto installato con una versione più recente di un fornitore diverso, cioè con un campo Vendor diverso nell’intestazione RPM. Un pacchetto ricostruito con un proprio Vendor non viene quindi rimpiazzato da un aggiornamento di SUSE, salvo opzioni esplicite come --allow-vendor-change o gruppi di fornitori equivalenti definiti in /etc/zypp/vendors.d/;
  • blocchi: zypper addlock impedisce qualsiasi modifica ai pacchetti indicati, anche con espressioni come 'php7*'. È utile durante una finestra di collaudo, ma va tolto quando si vuole installare una nuova versione.
# Blocca i pacchetti PHP 7 durante il collaudo
sudo zypper addlock 'php7*' 'apache2-mod_php7'
zypper locks

# Sblocca quando è il momento di aggiornare
sudo zypper removelock 'php7*' 'apache2-mod_php7'

# Fornitore dei pacchetti installati, per capire chi li aggiornerà
rpm -qa --queryformat '%{NAME} %{VERSION}-%{RELEASE} %{VENDOR}\n' 'php*' | sort

È il modo in cui lavoriamo anche noi con il backport delle patch: partiamo dai pacchetti RPM in uso, aggiungiamo le correzioni delle CVE adattate al ramo, ricostruiamo, proviamo con l’applicazione reale e installiamo con Ansible, con un piano di rollback.

Quando la service pack esce dal supporto

Su SLES 15 la scadenza della service pack è un evento prevedibile, e le strade sono note:

  1. passare alla service pack successiva con zypper migration, sapendo che cambia anche il ramo di PHP predefinito: da SP5 a SP6 si passa da PHP 8.0 a 8.2, da SP6 a SP7 da 8.2 a 8.4;
  2. restare sulla service pack con LTSS, per avere tempo di preparare l’applicazione al nuovo ramo, entro le date indicate da SUSE;
  3. usare pacchetti corretti quando né la service pack né LTSS coprono il PHP che serve, come su SLES 12;
  4. migrare l’applicazione a un ramo di PHP supportato, che resta la meta in tutti i casi.

Il primo punto è quello che sorprende più spesso. Su altre distribuzioni l’aggiornamento minore del sistema non cambia la versione di PHP, su SLES 15 sì. Un’applicazione che funziona con PHP 8.0 non è detto che funzioni con 8.2 senza modifiche: prima della migrazione della service pack serve una verifica del codice, come per qualunque migrazione verso PHP 8.

Una lista di controllo per i server SUSE

  • prodotto e service pack di ogni server, con la data di fine del supporto generale e di LTSS;
  • moduli attivi e abbonamenti, verificati con SUSEConnect --status-text;
  • origine dei pacchetti PHP: modulo Web and Scripting, modulo Legacy, Package Hub o pacchetti ricostruiti, riconoscibili dal campo Vendor;
  • patch di sicurezza in sospeso, con zypper list-patches --category security;
  • per SLES 12, conferma che il PHP in uso non riceve più correzioni anche con LTSS attivo;
  • data prevista per il passaggio alla service pack o al prodotto successivo, con il ramo di PHP che ne deriva.

In breve

Su SUSE Linux Enterprise PHP si trova nel modulo Web and Scripting, e su SLES 15 ogni service pack porta un nuovo ramo predefinito: 7.2, 7.4, 8.0, 8.2 e infine 8.4 con SP7, la stessa versione di SLES 16.0. Le patch arrivano come oggetti con categoria e riferimenti CVE, e zypper permette di cercarle e installarle per numero di vulnerabilità, ricordando di riavviare i servizi con zypper ps. Dopo il supporto generale le correzioni continuano con LTSS sulle service pack di SLES 15, mentre su SLES 12 il modulo Web and Scripting non è coperto da LTSS e il suo PHP è senza patch. In quei casi servono pacchetti ricostruiti, protetti dalla fedeltà al fornitore di zypper, insieme a un piano di migrazione verso un ramo supportato.

IL PROSSIMO PASSO

Mettiamo
in sicurezza.

Indicaci versione di PHP, sistema operativo e cosa ti preoccupa. Ti risponderemo con una valutazione dell’esposizione e una proposta di intervento.

Richiedi supporto

Ti porta al modulo di richiesta, in quattro passi.

PHP LEGACY · MANAGED SERVER S.R.L.info@phplegacy.it +39 02 5656 9681

Lunedì – venerdì · 09:30 – 19:30

Urgenza in corso? Reperibilità H24
+39 340 985 4556 ↗