Ubuntu 18.04 Server: Come aggiornare PHP in sicurezza

Per cambiare PHP all'ultima versione su Ubuntu 18.04 Server, prima verifica il supporto e la compatibilità del sistema operativo e delle applicazioni, poi testa il nuovo PHP su un server Ubuntu supportato prima di effettuare la modifica. L'aggiunta semplice di repository esterni e l'esecuzione di un aggiornamento completo dei pacchetti, come in passato, non garantisce la versione PHP desiderata né che il server web la utilizzi.

Punti da verificare prima su Ubuntu 18.04

La manutenzione generale della sicurezza per Ubuntu 18.04 LTS è terminata a maggio 2023. La manutenzione della sicurezza estesa (ESM) di Ubuntu Pro fornisce patch di sicurezza aggiuntive per i pacchetti applicabili, ma non significa supporto per tutti i repository esterni o per tutte le versioni di PHP. Verifica il periodo di supporto di Ubuntu 18.04 e la copertura del tuo abbonamento e dei pacchetti attuali.

Dovresti distinguere tra le versioni supportate dal progetto PHP e i pacchetti per cui la distribuzione fornisce patch di sicurezza. Anche se i numeri di versione dei pacchetti di Ubuntu rimangono gli stessi, possono essere applicate correzioni di sicurezza, mentre i pacchetti esterni non ricevono automaticamente le garanzie di Ubuntu Pro. Controlla sia le versioni di PHP ufficialmente supportate sia la politica del fornitore del pacchetto.

A lungo termine, è consigliato installare una LTS di Ubuntu supportata su un nuovo server e spostare il servizio. Quando si aggiorna il server esistente sul posto, non si possono saltare le versioni LTS, quindi è necessario passare prima da 18.04 a 20.04 e procedere in sequenza. Per passaggi dettagliati, vedi Guida all'Aggiornamento di Ubuntu Server.

Verifica la configurazione attuale di PHP e del server web

Prima di modificare il server di produzione, registra la versione dell'interfaccia a riga di comando (CLI), le estensioni caricate e i pacchetti installati. I seguenti comandi recuperano le informazioni, ma alcuni comandi potrebbero non funzionare se PHP non è installato.

lsb_release -a
php -v
php --ini
php -m
dpkg -l 'php*' | grep '^ii'
apt-cache policy php

php -v è la versione CLI. La versione e le impostazioni del modulo Apache o di PHP-FPM (FastCGI Process Manager) utilizzate per le richieste web potrebbero differire. In Apache, controlla i moduli attivi con apache2ctl -M, e nelle configurazioni dei siti di Nginx o Apache, controlla il socket o l'indirizzo a cui FastCGI punta. Se PHP-FPM viene utilizzato, dovrebbe essere verificato insieme alla lista dei servizi e alle impostazioni del server web.

systemctl list-units --type=service --all 'php*-fpm.service'
sudo apache2ctl -M

Su server che non utilizzano Apache, non è necessario eseguire il secondo comando. Eseguire il backup dei file di configurazione, dei file del sito, dei database e dei file caricati, e rivedere le procedure di ripristino. Conservare in sicurezza le impostazioni contenenti password o informazioni personali.

Scegliere una nuova versione e preparare un ambiente di test

  1. Verificare quali versioni di PHP sono supportate dall'applicazione, dai plugin e dalle dipendenze. I cambiamenti di versione principale in PHP possono causare comportamenti non compatibili, quindi rivedere la guida alla migrazione PHP dalla versione attuale alla versione di destinazione.
  2. Seleziona una combinazione di Ubuntu e PHP supportata e prepara un server di test separato dall'ambiente di produzione. Utilizza backup ripristinabili e fai attenzione a proteggere i dati reali degli utenti.
  3. Registra le estensioni PHP necessarie e trova pacchetti adatti al nuovo ambiente. La necessità di driver per database, elaborazione delle immagini, XML, ZIP, ecc., varia a seconda dell'applicazione.
  4. Sul server di test, controlla login, connessioni al database, caricamenti di file, attività pianificate e schermate principali, e verifica i log degli errori. Se ci sono problemi, modifica l'applicazione e le estensioni, quindi testa di nuovo.

Esempio: Installazione di PHP 8.3 su un server di test Ubuntu 24.04

Di seguito è riportato un esempio di installazione di PHP 8.3 CLI e PHP-FPM su un nuovo server di test Ubuntu 24.04 LTS, non Ubuntu 18.04. PHP 8.3 non significa sempre che sia l'ultima versione. Controlla il periodo di supporto per la versione di Ubuntu selezionata e la lista dei pacchetti PHP 8.3 per Ubuntu 24.04, e aggiungi solo le estensioni richieste dalla tua app.

Per prima cosa, esamina i pacchetti candidati e il piano di modifica. Se non ci sono candidati o la lista di rimozione/modifica è diversa da quella prevista, non installare e controlla il repository e le dipendenze.

sudo apt update
apt-cache policy php8.3-cli php8.3-fpm
apt-get -s install php8.3-cli php8.3-fpm

Se i risultati sul server di test sono appropriati, installa e controlla lo stato. Il comando seguente non configura il server web per usare automaticamente PHP-FPM.

sudo apt install php8.3-cli php8.3-fpm
php8.3 -v
php8.3 -m
systemctl status php8.3-fpm --no-pager

Ad esempio, se un'app richiede connessioni MySQL o MariaDB, esaminare php8.3-mysql separatamente in quell'ambiente. Poiché i file di configurazione e le estensioni possono differire tra CLI e FPM, controllare le impostazioni e i servizi del nuovo FPM. Dopo aver installato il pacchetto, regolare le impostazioni FastCGI del server web per corrispondere al socket FPM del server di test e, dopo aver superato il controllo della configurazione del server web, ricaricarlo. Il metodo del modulo Apache è configurato separatamente e non deve essere confuso con FPM.

Verificare la configurazione web e ripristinare il servizio in caso di problemi

Non puoi controllare la versione PHP di un sito web usando solo la versione CLI. Verifica le impostazioni attive del server web insieme ai servizi FPM e ai log, e in un ambiente di test ristretto, conferma tramite la pagina di stato dell’applicazione o gli strumenti di amministrazione se le richieste web stanno usando il nuovo PHP. Non lasciare una pagina phpinfo() che espone dettagliate impostazioni del server in una posizione accessibile al pubblico.

Prima della transizione effettiva, pianifica una finestra di manutenzione, la sincronizzazione dei dati e i punti di ripristino. Dopo aver cambiato i servizi, verifica le funzioni chiave e i log di errori del server web e di PHP. Se ci sono problemi, ripristina le impostazioni di connessione del server web precedentemente salvate, esegui controlli di configurazione e ricarica, oppure reindirizza il traffico verso il server pre-transizione. Se la struttura del database è cambiata, semplicemente ripristinare la versione di PHP potrebbe non ripristinare la funzionalità, quindi i piani di backup e di ripristino dei dati dovrebbero essere utilizzati insieme.

Sii cauto con i repository esterni e gli aggiornamenti completi

Il metodo precedente in questo articolo ha aggiunto ppa:ondrej/php e ha eseguito apt-get upgrade. Se i repository esterni supportano attualmente Ubuntu 18.04 e la versione PHP desiderata è determinato dal fornitore, e aggiungere semplicemente un repository non garantisce la manutenzione della sicurezza. apt-get upgrade influisce non solo su PHP, ma anche su altri pacchetti che possono essere aggiornati.

Prima di aggiungere o rimuovere repository su un server di produzione, rivedere le fonti dei pacchetti, le dipendenze che potrebbero cambiare e i metodi di recupero. Dovresti anche controllare come il server web gestisce PHP separatamente, poiché attivare solo una versione diversa del modulo Apache lasciando il vecchio modulo PHP così com’è può causare conflitti di configurazione.