Allineamento Utente PHP-FPM e Privilegi Filesystem in WordPress

Gestire un server web richiede rigore sui permessi dei file. Errori comuni bloccano il caricamento dei media e gli aggiornamenti automatici.

Questo disallineamento nasce spesso tra il web server e il motore PHP. In questa guida analizziamo l’allineamento dei permessi di scrittura sul filesystem.

Per una panoramica sui permessi base dei media, leggi la guida sulla proprietà cartella uploads.

Il Ruolo Chiave dell’Utente PHP nel Filesystem

Nei moderni server Linux, Nginx o Apache inoltrano le richieste dinamiche a PHP-FPM. Il processo PHP esegue il codice con un’identità specifica di sistema.

L’identità attiva prende il nome di utente di esecuzione del pool php-fpm all’interno delle configurazioni di sistema. Se questa identità non possiede i permessi sul filesystem, WordPress fallisce ogni scrittura.

Separazione tra Server Web e Interprete PHP

Nginx gestisce le connessioni dei client e legge file statici come immagini e CSS. PHP-FPM elabora invece gli script PHP su socket Unix o porte TCP.

Nginx può girare come utente nginx o www-data. Il pool di worker PHP può invece operare con un utente di sistema differente.

Sintomi Tipici di un Disallineamento dei Privilegi

Il sintomo più comune è la richiesta di credenziali FTP durante gli aggiornamenti. WordPress richiede l’accesso FTP solo quando non può scrivere direttamente sui file.

Altri errori tipici includono il blocco del caricamento nella libreria multimediale. Anche la generazione dei file di cache può fallire miseramente.

Analizzare la Configurazione del Pool PHP-FPM

I pool di PHP-FPM sono definiti in file di testo dedicati nel server. La posizione varia in base alla distribuzione Linux e alla versione installata.

Su Ubuntu e Debian i file risiedono nella cartella /etc/php/X.Y/fpm/pool.d/. Su RHEL, Rocky Linux o AlmaLinux si trovano in /etc/php-fpm.d/.

Ispezionare le Direttive del File di Configurazione

Apri il file di configurazione principale del tuo pool, solitamente chiamato www.conf. Al suo interno trovi le direttive che regolano l’account di processo.

  • user = nomeutente definisce l’utente UNIX dei processi worker.
  • group = nomegruppo imposta il gruppo primario di esecuzione.
  • listen.owner e listen.group gestiscono i permessi del socket.

Nel tuo stack, l’utente di esecuzione del pool php-fpm deve coincidere con il proprietario dei file o appartenere al medesimo gruppo.

Verificare i Processi Attivi in Memoria

Puoi verificare i processi attivi lanciando un comando da terminale. Usa il comando ps aux | grep php-fpm dalla console.

La prima colonna dell’output mostra il nome utente reale in esecuzione. Verifica che i worker attivi corrispondano alle impostazioni inserite nel file conf.

Configurare la Proprietà e i Permessi Ideali

Esistono due approcci architetturali per allineare PHP e il filesystem. La prima soluzione consiste nell’assegnare la proprietà esclusiva all’utente PHP.

La seconda soluzione sfrutta l’appartenenza a un gruppo condiviso con permessi di gruppo. Questo approccio è perfetto per accessi SFTP multi-utente.

Soluzione 1: Proprietà Diretta all’Utente PHP

Se utilizzi un singolo utente di sistema, assegna a lui l’intera cartella WordPress. Esegui il comando chown -R wpuser:wpuser /var/www/html sul server.

Configura poi il file del pool impostando user = wpuser e group = wpuser. In questo scenario, l’utente di esecuzione del pool php-fpm possiede il controllo totale dei file.

Soluzione 2: Approccio Basato su Gruppo Condiviso

Se carichi i file tramite un utente SFTP dedicato, crea una collaborazione tramite gruppi. Aggiungi sia l’utente SFTP sia l’utente PHP a un gruppo comune.

  • Crea il gruppo condiviso con il comando groupadd webgroup.
  • Aggiungi gli account con usermod -aG webgroup utente_php.
  • Imposta la cartella radice con chown -R sftpuser:webgroup /var/www/html.
  • Assegna permessi di scrittura al gruppo con chmod -R 775 per le cartelle.
I permessi 777 non devono MAI essere usati in produzione. Rappresentano una gravissima falla di sicurezza che espone il server ad attacchi letali.

Passo-Passo: Allineare Pool e Filesystem

Segui questa procedura sequenziale per configurare correttamente il server web. Prima di iniziare, esegui un backup completo dei file e del database.

Fase 1: Modifica delle Direttive del Pool

  1. Accedi via SSH al server con privilegi di root o sudo.
  2. Modifica il file del pool con sudo nano /etc/php/8.2/fpm/pool.d/www.conf.
  3. Imposta i parametri user e group sull’account desiderato.
  4. Salva il file e chiudi l’editor di testo con la combinazione CTRL+O e CTRL+X.

Fase 2: Applicazione dei Permessi Corretti

  1. Posizionati nella root di WordPress digitando cd /var/www/html.
  2. Imposta i permessi standard per le cartelle: find . -type d -exec chmod 755 {} \;.
  3. Assegna i permessi corretti per i file: find . -type f -exec chmod 644 {} \;.
  4. Verifica la cartella wp-content/uploads e consenti i permessi di scrittura idonei.

Fase 3: Riavvio dei Servizi e Test Funzionale

Testa la sintassi della configurazione con php-fpm -t prima del riavvio. Riavvia quindi il servizio digitando sudo systemctl restart php8.2-fpm.

Infine, riavvia Nginx per aggiornare i socket di comunicazione attivi. Accedi alla bacheca di WordPress e prova a caricare una nuova immagine.

Quando l’utente di esecuzione del pool php-fpm è allineato al filesystem, il caricamento avviene all’istante senza avvisi.

Domande Frequenti (FAQ)

Cosa succede se Nginx e PHP usano utenti diversi?

Questa configurazione è molto comune e sicura in ambienti multi-tenant. Nginx deve poter leggere i file statici, mentre PHP deve poter scrivere nella cartella uploads.

Perché WordPress continua a chiedermi i dati FTP?

WordPress verifica la capacità di creare file temporanei sul filesystem locale. Se il test fallisce per permessi errati, il CMS attiva automaticamente la modalità FTP.

Posso usare permessi 775 invece di 755?

Sì, i permessi 775 sono ideali se usi una configurazione basata su gruppo condiviso. Consentono la scrittura contemporanea sia all’utente SFTP sia all’interprete PHP.

Articoli simili