Sicurezza
Apache mod_php vs PHP-FPM: quale configurazione è più sicura
Come configuri PHP su Apache fa differenza sulla sicurezza del tuo sito. La scelta tra mod_php (il modulo Apache classico) e PHP-FPM (FastCGI Process Manager) non è solo una questione di performance, ma anche di isolamento, permessi dei file e protezione dagli attacchi. Questa guida confronta le due architetture in profondità.
Cosa sono mod_php e PHP-FPM
mod_php: il modulo Apache integrato
mod_php è un modulo Apache che carica l'interprete PHP direttamente nel processo Apache. Significa che PHP e il web server condividono lo stesso processo con gli stessi permessi (di solito l'utente www-data).
Pro:
- Semplice da configurare su hosting condiviso
- Accesso diretto al filesystem senza comunicazione inter-processo
- Nessuna configurazione aggiuntiva di socket o porte
Contro:
- PHP ha gli stessi permessi di Apache — se Apache viene compromesso, PHP ha accesso completo
- Non isolamento tra siti su server condiviso: una vulnerabilità di un cliente PHP può compromettere gli altri
- Caricamento di memoria: ogni worker Apache carica l'intera VM di PHP
- Difficile da ricaricare: riavviare PHP richiede il riavvio di Apache
PHP-FPM: isolamento e performance
PHP-FPM è un gestore separato di processi PHP. Apache e PHP girano in processi separati, comunicano via socket o rete. PHP può girare con permessi diversi, isolati da Apache.
Pro:
- Isolamento di sicurezza: PHP non ha accesso ai file di sistema di Apache
- Permessi granulari: ogni sito/applicazione può girare con il proprio utente (ad es. utente1, utente2, etc)
- Ricaricamento indipendente: puoi ricaricare PHP senza toccare Apache
- Pool di processi: controllo fine su quante risorse PHP usa
- Compatibilità con load balancer e container
Contro:
- Configurazione più complessa (socket/TCP, connessione tra processi)
- Leggermente più lento (IPC overhead)
- Su hosting condiviso, il provider deve configurare pool separati per cliente
Confronto di sicurezza in dettaglio
Permessi dei file
mod_php: PHP legge/scrive file con i permessi di Apache. Se hai un sito A e un sito B sulla stessa istanza, PHP del sito A può leggere/modificare i file del sito B.
PHP-FPM: Puoi assegnare a ogni sito un utente diverso. Il sito A gira come "sito-a-user", il sito B come "sito-b-user". Anche se una vulnerabilità colpisce il sito A, l'attaccante non può accedere ai file del sito B (il filesystem lo blocca).
Risposta agli attacchi recenti di RCE
Quando una vulnerabilità RCE come CVE-2026-109618 o CVE-2026-109619 consente l'esecuzione di codice arbitrario in PHP:
- Con mod_php: il codice eseguito ha i permessi di Apache. Un attaccante può leggere il database.php di altri siti, modificare file di configurazione globale, accedere a file sensibili.
- Con PHP-FPM: il codice eseguito ha i soli permessi dell'utente del sito vulnerabile. Un attaccante può compromettere solo quel sito, gli altri restano intatti.
Performance: mod_php vs PHP-FPM
Storicamente, mod_php era più veloce (no overhead IPC). Oggi PHP-FPM è comparabile o più veloce nei numeri che contano: throughput, latenza, tempo risposta sotto carico. Il motivo:
- PHP-FPM usa meno memoria (worker pool vs ogni Apache process carica una VM intera)
- CPU: il costo IPC è ridotto, parallelizzazione è migliore
- Su load balancer, la separazione Apache/PHP facilita lo scaling orizzontale
Quale scegliere?
| mod_php | PHP-FPM | |
|---|---|---|
| Sito singolo, server dedicato | ❌ (niente isolamento) | ✅ (meglio) |
| Siti multipli (hosting condiviso) | ❌ (isolamento zero) | ✅ (isolamento per cliente) |
| Applicazione critica | ❌ (vulnerabilità = accesso totale) | ✅ (confinamento danni) |
| Container/Kubernetes | ❌ (non idoneo) | ✅ (standard) |
Come migrare da mod_php a PHP-FPM
Su un server Debian/Ubuntu:
# 1. Installa PHP-FPM
sudo apt install php8.4-fpm
# 2. Abilita il modulo proxy di Apache
sudo a2enmod proxy_fcgi
# 3. Configura il vhost per usare PHP-FPM
# Nel file di config Apache (es. /etc/apache2/sites-available/mio-sito.conf):
<VirtualHost *:80>
ServerName mio-sito.com
DocumentRoot /var/www/mio-sito
<FilesMatch "\.php$">
SetHandler "proxy:unix:/run/php/php8.4-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
# 4. Ricarica Apache
sudo systemctl reload apache2
Configura pool per isolamento
Nel file /etc/php/8.4/fpm/pool.d/mio-sito.conf:
[mio-sito]
user = sito-user
group = sito-group
listen = /run/php/mio-sito.sock
listen.owner = www-data
listen.group = www-data
Crea l'utente:
sudo useradd -s /usr/sbin/nologin -m sito-user
Conclusione
PHP-FPM è la scelta moderna per qualsiasi server PHP serio. Offre isolamento di sicurezza, performance superiore sotto carico, e si integra meglio con moderne architetture (container, load balancer, auto-scaling). Se stai ancora con mod_php, una migrazione a PHP-FPM è un investimento in sicurezza che vale il tempo speso.
Continua a leggere
Hai un progetto in mente?
Raccontami cosa ti serve: ti propongo la soluzione web più adatta alle tue esigenze.
Contattami I miei servizi