SELinux: tre leve diverse, non un unico comando

Quando si lavora con SELinux, il punto chiave è questo: non stai “aprendo la porta” in un solo modo. Stai intervenendo su tre piani diversi.

  • Etichette dei file: dicono a SELinux che ruolo ha un file o una directory.
  • Regole permanenti: dicono a SELinux che un certo path deve avere sempre una certa etichetta.
  • Booleani: attivano o disattivano comportamenti già previsti dalle policy.

I tre comandi che citi servono proprio a questo:

  • restorecon riallinea le etichette ai valori previsti dalle policy.
  • semanage modifica in modo persistente la configurazione SELinux, per esempio i contesti dei file o i booleani.
  • setsebool cambia un booleano SELinux, spesso in modo temporaneo se non usi l’opzione di persistenza.

Se li confondi, rischi due problemi tipici: fare una modifica che sparisce al reboot, oppure lasciare una regola “sporca” che funziona oggi ma si rompe alla prossima correzione automatica delle label.

restorecon: ripristino delle etichette corrette

restorecon serve a ripristinare il contesto SELinux standard di file e directory leggendo le regole definite nel sistema. In pratica confronta l’etichetta attuale con quella attesa e, se necessario, la corregge.

È il comando giusto quando:

  • hai copiato file in una nuova posizione;
  • hai creato directory per un servizio web, mail o database;
  • hai visto un errore SELinux su un path che dovrebbe essere già previsto dalle policy.

Esempio tipico con Apache o Nginx:

restorecon -Rv /var/www/html

Con -R applichi ricorsivamente, con -v vedi cosa cambia. Se vuoi solo verificare senza modificare, usa prima la modalità di prova:

restorecon -nRv /var/www/html

Il valore operativo di restorecon è questo: non inventa una regola nuova, riporta un path alla condizione prevista. Se il path è fuori standard, la correzione può essere solo temporanea: al prossimo allineamento tornerà la label “ufficiale”.

Per questo restorecon è spesso il primo test da fare quando SELinux blocca un servizio e tu sai che il file è nel posto giusto ma con contesto sbagliato.

Quando usarlo

  • Hai copiato contenuti in una nuova directory e il web server non li legge.
  • Hai ripristinato un backup e i file hanno label errate.
  • Hai appena creato una cartella per upload, socket, log o cache.

Quando non basta

  • Se il path non è previsto dalla policy, restorecon non risolve in modo stabile.
  • Se il servizio deve accedere a una directory non standard, serve una regola con semanage fcontext.

semanage: configurazione permanente di SELinux

semanage è lo strumento per fare modifiche persistenti alla configurazione SELinux. Il caso più comune in ambito web è la gestione dei contesti dei file con semanage fcontext.

In parole semplici:

  • restorecon applica le label attese;
  • semanage fcontext dice a SELinux quali label devono essere attese per un certo percorso.

Esempio: vuoi che una directory custom usata da un sito web venga trattata come contenuto web leggibile dal server:

semanage fcontext -a -t httpd_sys_content_t '/srv/site(/.*)?'

Poi devi applicare le etichette al filesystem:

restorecon -Rv /srv/site

Questo è il flusso corretto: prima definisci la regola, poi allinei i file. Se fai solo restorecon, la correzione può funzionare oggi ma non restare coerente con la tua struttura custom. Se fai solo semanage, la regola esiste ma i file già presenti possono restare con label vecchie finché non li riallinei.

semanage gestisce anche i booleani, ma in modo amministrativo e persistente. Per esempio, puoi listare i booleani disponibili:

semanage boolean -l

Però, nella pratica quotidiana, il comando più usato resta quello sui contesti dei file.

Quando usarlo

  • Hai un path non standard, come /srv/data o una mount dedicata.
  • Devi rendere permanente l’accesso di un servizio a una directory custom.
  • Vuoi evitare di dover rifare la correzione dopo ogni restore o deploy.

Perché è importante in produzione

Molti problemi SELinux nascono da un errore concettuale: si cambia la label “a mano” su un file, ma non si definisce la regola permanente. Dopo un reboot, un restore, un deploy o un restorecon automatico, il problema torna. Con semanage fcontext invece formalizzi la scelta e riduci il rischio di drift.

Regola pratica: se il path è “strano” ma legittimo, usa semanage fcontext e poi restorecon. Se il path è standard ma la label è sbagliata, basta spesso restorecon.

setsebool: attivare o disattivare comportamenti della policy

I booleani SELinux sono interruttori che abilitano o disabilitano comportamenti previsti dalla policy. setsebool serve a modificarli.

Esempio classico: un web server deve fare connessioni in uscita verso un database o un backend esterno. SELinux può bloccarlo finché non abiliti il booleano corretto. In quel caso il comando può essere:

setsebool -P httpd_can_network_connect on

Qui l’opzione -P rende la modifica persistente. Senza -P, la variazione può essere temporanea e sparire al reboot.

Questa differenza è fondamentale:

  • setsebool cambia il valore di un booleano;
  • setsebool -P lo rende permanente;
  • semanage boolean -l ti aiuta a vedere i booleani disponibili e il loro stato.

Un booleano non serve a correggere una label sbagliata. Non sostituisce restorecon o semanage fcontext. Se il problema è un contesto file errato, il booleano non c’entra. Se il problema è una capability generica disabilitata nella policy, allora sì.

Esempi comuni

  • httpd_can_network_connect: consente al web server di fare connessioni di rete in uscita.
  • httpd_enable_homedirs: consente accesso a contenuti web in home directory, quando previsto.
  • ftpd_full_access o booleani simili: dipende dal servizio e dalla policy installata.

Il nome esatto del booleano dipende dalla distribuzione e dal modulo di policy installato. Non va indovinato: va verificato con:

getsebool -a | grep httpd

oppure:

semanage boolean -l | grep httpd

Se non trovi il booleano giusto, stai probabilmente guardando il problema sbagliato oppure manca il modulo di policy appropriato.

Differenza pratica tra i tre comandi

La distinzione utile, quella che ti evita ore di tentativi, è questa:

  • restorecon = “rimetti il file nella label giusta”.
  • semanage = “definisci che quella label è giusta per quel path”.
  • setsebool = “accendi o spegni una funzione della policy”.

Se il sito web non legge file in una directory custom, la sequenza corretta spesso è:

  1. verificare il contesto attuale con ls -Z;
  2. capire se il path è standard o no;
  3. se è standard, fare restorecon;
  4. se è custom, definire la regola con semanage fcontext;
  5. applicare le label con restorecon;
  6. solo se serve una funzione di policy, usare setsebool.

Come diagnosticare un blocco SELinux senza andare a caso

Il metodo corretto è osservare prima l’evidenza, poi intervenire. I comandi base sono questi:

getenforce

Ti dice se SELinux è EnforcingPermissive o Disabled.

ls -Z /var/www/html

Ti mostra il contesto SELinux dei file o delle directory.

ausearch -m avc -ts recent

Ti mostra i denials recenti, se il logging di audit è attivo.

journalctl -t setroubleshoot --since

Di trgtkls

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *