Configurazione dei Contesti SELinux per WordPress su RHEL, Rocky e AlmaLinux
Gestire un server aziendale richiede rigore e massima attenzione. La sicurezza non ammette compromessi banali sui server Linux moderni.
Nei sistemi derivati da Red Hat Enterprise Linux, SELinux rappresenta il baluardo principale. Rocky Linux e AlmaLinux condividono la medesima architettura di protezione.
Molti amministratori commettono l’errore di disattivare SELinux al primo errore. In questa guida vedremo la corretta configurazione selinux wordpress senza sacrificare la robustezza del sistema.
Perché SELinux è Fondamentale per la Sicurezza del Tuo CMS
Il Ruolo del Controllo di Accesso Obbligatorio (MAC)
I permessi tradizionali Linux si basano sul modello discrezionale (DAC). Se il web server viene compromesso, l’intruso eredita tutti i permessi del processo.
SELinux introduce il controllo di accesso obbligatorio (MAC). Ogni processo e file possiede un’etichetta specifica di contesto.
Anche con permessi 777, SELinux blocca accessi non autorizzati dalle policy attive. Questo meccanismo mitiga gli attacchi basati su upload malevoli e web shell.
La Differenza tra Modalità Enforcing e Permissive
SELinux opera principalmente in due modalità operative ben distinte. La modalità Permissive registra le violazioni nei log senza bloccarle materialmente.
La modalità Enforcing blocca attivamente qualsiasi operazione non esplicitamente autorizzata. Il nostro obiettivo finale è mantenere il sistema stabilmente in modalità Enforcing.
Per una panoramica completa sulla protezione del tuo sito, leggi la nostra guida sui controlli di sicurezza avanzati per WordPress.
Analisi dei Contesti: Comprendere httpd_sys_content_t e httpd_sys_rw_content_t
Etichette di Sola Lettura per il Core
Il server web Apache o Nginx riceve il tipo di contesto httpd_t. I file statici leggibili richiedono il contesto standard denominato httpd_sys_content_t.
Questo contesto impedisce modifiche accidentali o manomissioni ai file PHP. File critici come wp-config.php e l’intero core beneficiano di questo stato protetto.
Un attaccante remoto non potrà sovrascrivere file PHP impostati in sola lettura. L’integrità del software rimane preservata anche durante exploit applicativi complessi.
Aree di Scrittura: wp-content e Uploads
WordPress necessita di salvare immagini, caricare plugin e aggiornare traduzioni. Per abilitare la scrittura controllata si utilizza il tipo httpd_sys_rw_content_t.
Questo speciale attributo abilita l’interprete PHP a generare nuovi file su disco. Dobbiamo applicarlo selettivamente solo alle directory strettamente necessarie.
Applicare contesti ampi all’intera directory web vanifica l’utilità del controllo. Una mirata configurazione selinux wordpress isola i rischi mantenendo intatte le funzionalità.
Guida Passo-Passo alla Configurazione su RHEL, Rocky Linux e AlmaLinux
Installazione degli Strumenti di Gestione Necessari
Le installazioni minimali di Rocky Linux o AlmaLinux spesso mancano delle utility essenziali. Dobbiamo installare il pacchetto policycoreutils-python-utils per gestire le etichette.
Esegui il comando di installazione tramite il gestore pacchetti DNF:
sudo dnf install -y policycoreutils-python-utils
Questo pacchetto include il comando semanage. Tale comando permette di registrare regole permanenti nel database delle policy.
Applicazione delle Regole di Contesto con semanage
Supponiamo che l’installazione risieda nel percorso /var/www/html/wordpress. Prima di tutto, impostiamo tutti i file come contenuto web di sola lettura.
sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/wordpress(/.*)?"sudo restorecon -Rv /var/www/html/wordpress
Ora definiamo i permessi di scrittura dedicati esclusivamente alla cartella wp-content. I corretti contesti selinux per wordpress evitano problemi con la gestione media.
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wordpress/wp-content(/.*)?"sudo restorecon -Rv /var/www/html/wordpress/wp-content
Verifica dei Contesti Assegnati
Possiamo verificare visivamente il risultato aggiungendo il flag -Z al comando ls. Questo comando mostra i dettagli dei contesti di sicurezza attivi.
ls -lZd /var/www/html/wordpress/wp-contentls -lZd /var/www/html/wordpress/wp-includes
Noterai chiaramente l’etichetta httpd_sys_rw_content_t applicata a wp-content. Le altre cartelle mantengono invece l’etichetta restrittiva httpd_sys_content_t.
Avviso di Sicurezza: Non usare mai il comando chcon per modifiche definitive sui file. Il comando restorecon o un riavvio con relabel cancellerebbero all’istante le modifiche effettuate con chcon.
Configurazioni Booleane per Connessioni di Rete e Aggiornamenti
Consentire l’Accesso al Database e alle API Esterne
Di default SELinux impedisce al web server di effettuare connessioni di rete in uscita. Questa restrizione blocca le chiamate API esterne, i webhook e le verifiche licenze.
Inoltre, se il database risiede su un host remoto, la connessione fallirà. Dobbiamo abilitare il valore booleano specifico httpd_can_network_connect.
sudo setsebool -P httpd_can_network_connect 1sudo setsebool -P httpd_can_network_connect_db 1
Il flag -P rende la modifica permanente attraverso i riavvii del sistema operativo.
Abilitare Aggiornamenti Automatici tramite FTP o Script
Alcuni setup richiedono il download automatico dei pacchetti tramite script interni. Se utilizzi aggiornamenti via socket o script, potresti necessitare di booleani aggiuntivi.
Verifica lo stato generale dei booleani relativi al demone web con questo comando:
getsebool -a | grep httpd
Attiva solo le opzioni strettamente necessarie per le funzionalità del tuo portale. In questo modo ottieni una corretta configurazione selinux wordpress a lungo termine.
Risoluzione dei Problemi e Analisi dei Log di Blocco (Audit)
Lettura del File audit.log con ausearch e aureport
Quando un’azione viene bloccata ingiustamente, SELinux registra l’evento nel registro di audit. Il percorso principale dei log di sicurezza è /var/log/audit/audit.log.
Puoi isolare i rifiuti recenti legati al web server tramite il comando ausearch:
sudo ausearch -m AVC,USER_AVC -ts recent
Questo comando elenca tutti i tentativi di accesso non consentiti verificatisi di recente. Identifica l’eseguibile sorgente e la risorsa target bloccata dal sistema.
Traduzione dei Log con audit2why e audit2allow
I log grezzi di SELinux contengono molti dettagli crittici di difficile lettura. L’utility audit2why traduce il messaggio in linguaggio umano comprensibile.
sudo ausearch -m AVC -ts recent | audit2why
Se un plugin legittimo richiede accessi particolari, puoi creare moduli personalizzati. Il comando audit2allow genera un modulo su misura per sbloccare la funzione.
sudo ausearch -m AVC -ts recent | audit2allow -M wordpress_customsudo semodule -i wordpress_custom.pp
Usa questa opzione con cautela. Crea moduli personalizzati solo dopo aver compreso la reale natura dell’operazione.
Domande Frequenti su SELinux e WordPress
Cosa succede se cambio i permessi Linux con chmod invece di usare SELinux?
I permessi chmod gestiscono unicamente l’accesso a livello utente e gruppo tradizionale. Se SELinux non autorizza l’azione, l’errore permessi negati persisterà immutato. Entrambi i sistemi di protezione devono concedere il permesso per completare la richiesta.
Perché i file caricati tramite SFTP non sono leggibili dal sito?
Quando carichi file via SFTP, essi ereditano il contesto dell’utente SSH. Spesso questo contesto corrisponde a user_home_t, invisibile al processo web. Per risolvere, esegui il comando restorecon -Rv /var/www/html/wordpress/wp-content/uploads.
Posso eseguire la configurazione selinux wordpress anche con Nginx al posto di Apache?
Assolutamente sì. Sui sistemi Enterprise Linux Nginx opera sotto lo stesso identico contesto httpd_t di Apache. I contesti di file e i booleani descritti funzionano identicamente per entrambi i web server.
💡 Per approfondire l’argomento WordPress: Risolvere l’Errore «Impossibile creare la directory wp-content/uploads»: Guida Sicura a CHMOD e Ownership Linux
