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-content
  • ls -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 1
  • sudo 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_custom
  • sudo 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

Articoli simili