File permission WordPress: i permessi corretti per wp-config.php e wp-content

Permessi 777 su wp-config.php, cartelle scrivibili da chiunque, file di configurazione leggibili dal mondo: li vediamo quasi ogni settimana. Come impostare i permessi giusti senza rompere il sito.
Lo vediamo quasi ogni settimana, appena apriamo l'accesso SSH a un sito nuovo che ci arriva in gestione. Cartelle wp-content con permessi 777, wp-config.php leggibile da chiunque passi di lì, uploads scrivibili dal mondo intero. Chi lo ha fatto, quasi sempre, voleva solo far funzionare un plugin o risolvere un errore di scrittura. Ha funzionato. Ha anche aperto una porta che resta aperta finché qualcuno non la chiude.
Il problema non è teorico. Un malware che riesce a scrivere dentro wp-content non ha bisogno di exploit sofisticati se la cartella è 777: può creare il file che vuole, dove vuole, e nasconderci una web shell. I permessi sono il primo strato di difesa, prima ancora del WAF e del firewall applicativo. E sono il più trascurato.
I permessi corretti: file, cartelle, wp-config
La regola base è semplice e vale su quasi ogni hosting Linux con Apache o Nginx. I file devono essere 644 (leggibili da tutti, scrivibili solo dal proprietario). Le cartelle devono essere 755 (eseguibili e leggibili da tutti, scrivibili solo dal proprietario). wp-config.php è l'eccezione: 600 o 640, mai 644, perché contiene le credenziali del database e non deve essere leggibile da altri utenti sullo stesso server.
# Permesso corretti per un'installazione WordPress standard
# Dalla root del sito (dove c'è wp-config.php)
# Tutti i file a 644
find . -type f -exec chmod 644 {} \;
# Tutte le cartelle a 755
find . -type d -exec chmod 755 {} \;
# wp-config.php più restrittivo: 640 (o 600)
chmod 640 wp-config.php
# .htaccess a 644 (deve essere leggibile da Apache)
chmod 644 .htaccessIl proprietario dei file: il dettaglio che confonde tutti
I permessi numerici (644, 755) sono solo metà della storia. L'altra metà è il proprietario. Se i file sono di proprietà di root ma il processo Apache gira come www-data, WordPress non potrà aggiornare plugin, caricare immagini o scrivere nella cache — anche con i permessi corretti. Il sintomo classico è l'errore 'Impossibile creare la directory' durante un upload, o il plugin di sicurezza che segnala wp-content come non scrivibile.
La soluzione è cambiare il proprietario, non allentare i permessi. Mai usare 777 per risolvere un problema di proprietà: è come togliere la serratura perché la chiave non gira.
# Cambia il proprietario dei file all'utente del web server
# Debian/Ubuntu: www-data
sudo chown -R www-data:www-data /var/www/html/miosito/
# RHEL/CentOS/AlmaLinux: apache
sudo chown -R apache:apache /var/www/html/miosito/
# Verifica che il proprietario sia corretto
ls -la /var/www/html/miosito/wp-config.php
# Output atteso: -rw-r----- 1 www-data www-data ... wp-config.phpLa cartella uploads: 755 non 777
wp-content/uploads è la cartella più problematica perché WordPress deve poterci scrivere (immagini, PDF, allegati). Molti la impostano a 777 per stare tranquilli. È un errore: 755 è sufficiente se il proprietario è corretto. La differenza tra 755 e 777 è che con 777 ogni utente sul server può scrivere nella cartella — incluso, su un hosting condiviso, ogni altro cliente del provider.
Se un plugin ti dice che la cartella non è scrivibile e ti consiglia 777, prima verifica il proprietario. Nove volte su dieci il problema è quello, non i permessi.
Verificare i permessi da WP-CLI
Se hai WP-CLI installato, puoi verificare lo stato dei permessi e dell'owner direttamente da terminale, senza dover navigare a mano:
# Verifica i permessi delle cartelle critiche
wp eval 'echo substr(sprintf("%o", fileperms(ABSPATH)), -4) . PHP_EOL;'
wp eval 'echo substr(sprintf("%o", fileperms(WP_CONTENT_DIR)), -4) . PHP_EOL;'
wp eval 'echo substr(sprintf("%o", fileperms(WP_CONTENT_DIR . "/uploads")), -4) . PHP_EOL;'
# Verifica il proprietario del processo PHP
wp eval 'echo posix_getpwuid(posix_geteuid())["name"] . PHP_EOL;'I permensi non sono un dettaglio da sistem administrator. Sono la differenza tra un sito che un attaccante può compromettere in pochi minuti e uno che gli rende la vita difficile. Un hardening completo passa di lì prima ancora che dal WAF. Chiudere la porta più evidente, prima di preoccuparsi della serratura smart.
Verifica i permessi del tuo WordPress prima che diventino un'entrata.
Un audit di sicurezza controlla file permission, configurazione, plugin vulnerabili e punti di ingresso. I permessi sbagliati sono il primo segnale che il sito è esposto.
Articoli correlati

Ruoli e permessi WordPress: gestire chi fa cosa senza dare admin a chi non serve
Leggi
HTTP security headers WordPress: CSP, HSTS, X-Frame-Options e gli header che proteggono davvero
Leggi
