Guida per principianti a SELinux

Guida per principianti a SELinux

La traduzione dell'articolo è stata preparata per gli studenti del corso «Sicurezza Linux»

SELinux, o Security Enhanced Linux, è un meccanismo di controllo degli accessi avanzato sviluppato dalla National Security Agency (NSA) degli Stati Uniti per prevenire intrusioni dannose. Implementa un modello di controllo degli accessi obbligatorio (Mandatory Access Control, MAC) sopra il modello discrezionale esistente (Discretionary Access Control, DAC), quindi autorizzazioni di lettura, scrittura, esecuzione.

SELinux ha tre modalità:

  1. Enforcing — nega l'accesso in base a regole di policy.
  2. Permissive — registra le azioni che violano la policy, che sarebbero state negate in modalità enforcing.
  3. Disabilitato — disabilitazione completa di SELinux.

Per impostazione predefinita, le configurazioni si trovano in /etc/selinux/config

Cambiamento delle modalità di SELinux

Per scoprire la modalità attuale, esegui

$ getenforce

Per cambiare la modalità su permissive, esegui il seguente comando

$ setenforce 0

oppure, per cambiare la modalità da permissive con enforcing, esegui

$ setenforce 1

Se hai bisogno di disabilitare completamente SELinux, ciò può essere fatto solo tramite il file di configurazione

$ vi /etc/selinux/config

Per disabilitarlo, modifica il parametro SELINUX nel seguente modo:

SELINUX=disabled

Configurazione di SELinux

Ogni file e processo è contrassegnato con un contesto SELinux, che contiene informazioni aggiuntive, come l'utente, il ruolo, il tipo, ecc. Se attivi SELinux per la prima volta, è necessario configurare prima il contesto e le etichette. Il processo di assegnazione delle etichette e del contesto è noto come etichettatura. Per iniziare l'etichettatura, nel file di configurazione cambiamo la modalità in permissive.

$ vi /etc/selinux/config
SELINUX=permissive

Dopo aver impostato la modalità permissive, creiamo nella radice un file nascosto vuoto chiamato .autorelabel

$ touch /.autorelabel

e riavviamo il computer

$ init 6

Nota: utilizziamo la modalità permissive per l'etichettatura, poiché l'uso della modalità enforcing può causare il crash del sistema durante il riavvio.

Non preoccuparti se il caricamento si blocca su un file, l'etichettatura richiede un po' di tempo. Al termine dell'etichettatura e del caricamento del sistema, puoi tornare al file di configurazione e impostare la modalità enforcing, e anche eseguire:

$ setenforce 1

Ora hai attivato con successo SELinux sul tuo computer.

Monitoriamo i log

Potresti aver riscontrato degli errori durante la marcatura o durante il funzionamento del sistema. Per verificare se il tuo SELinux sta funzionando correttamente e se sta bloccando l'accesso a qualche porta, applicazione, ecc., è necessario controllare i log. Il log di SELinux si trova in /var/log/audit/audit.log, ma non è necessario leggerlo per intero per trovare gli errori. Puoi utilizzare l'utilità audit2why per cercare gli errori. Esegui il seguente comando:

$ audit2why < /var/log/audit/audit.log

Come risultato, otterrai un elenco di errori. Se non ci sono stati errori nel log, non verrà visualizzato alcun messaggio.

Configurazione della politica SELinux

La politica SELinux è un insieme di regole che guidano il meccanismo di sicurezza SELinux. La politica definisce un insieme di regole per un ambiente specifico. Ora esamineremo come configurare le politiche per consentire l'accesso ai servizi vietati.

1. Valori logici (switch)

Gli switch (booleans) consentono di modificare parti della politica durante l'esecuzione, senza la necessità di creare nuove politiche. Permettono di effettuare cambiamenti senza riavviare o ricompilare le politiche SELinux.

Esempio
Supponiamo di voler fornire l'accesso condiviso alla directory home dell'utente tramite FTP, sia in lettura che in scrittura, e che l'abbiamo già condivisa, ma quando tentiamo di accedervi non vediamo nulla. Ciò è dovuto al fatto che la politica SELinux impedisce al server FTP di leggere e scrivere nella directory home dell'utente. Dobbiamo modificare la politica affinché il server FTP possa accedere alle directory home. Vediamo se ci sono dei flag disponibili per questo, eseguendo

$ semanage boolean -l

Questo comando restituirà un elenco dei flag disponibili con il loro stato attuale (attivato / on o disattivato / off) e una descrizione. Puoi affinare la ricerca aggiungendo grep, per trovare risultati relativi solo a ftp:

$ semanage boolean -l | grep ftp

e troverai quanto segue

ftp_home_dir        -> off       Consenti a ftp di leggere e scrivere file nella directory home dell'utente

Questo flag è disattivato, quindi lo abiliteremo con setsebool ftp_home_dir on

Ora il nostro demone ftp potrà accedere alla directory home dell'utente.
Nota: puoi anche ottenere un elenco dei flag disponibili senza descrizioni eseguendo getsebool -a

2. Etichette e contesto

Questo è il metodo più comune per implementare la politica SELinux. Ogni file, cartella, processo e porta è contrassegnato con un contesto SELinux:

  • Per i file e le cartelle, le etichette sono memorizzate come attributi estesi nel file system e possono essere visualizzate con il seguente comando:
    $ ls -Z /etc/httpd
  • Per i processi e le porte, la marcatura è gestita dal kernel, e queste etichette possono essere visualizzate nel seguente modo:

processo

$ ps –auxZ | grep httpd

porta

$ netstat -anpZ | grep httpd

Esempio
Ora esaminiamo un esempio per comprendere meglio le etichette e il contesto. Supponiamo di avere server web, invece di una cartella /var/www/html/ использует /home/dan/html/. SELinux considererà questo come una violazione della politica e non sarete in grado di visualizzare le vostre pagine web. Questo perché non abbiamo impostato il contesto di sicurezza associato ai file HTML. Per visualizzare il contesto di sicurezza di default, utilizzate il seguente comando:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Qui abbiamo ottenuto httpd_sys_content_t come contesto per i file HTML. Dobbiamo impostare questo contesto di sicurezza per la nostra cartella corrente, che ora ha il seguente contesto:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Comando alternativo per controllare il contesto di sicurezza di un file o di una directory:

$ semanage fcontext -l | grep '/var/www'

Useremo anche semanage per modificare il contesto, dopo aver trovato il corretto contesto di sicurezza. Per modificare il contesto di /home/dan/html, esegui i seguenti comandi:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? tutti i file system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Dopo aver modificato il contesto con semanage, il comando restorecon ripristinerà il contesto predefinito per i file e le directory. Il nostro server web ora sarà in grado di leggere i file dalla cartella /home/dan/html, poiché il contesto di sicurezza per questa cartella è stato modificato in httpd_sys_content_t.

3. Creazione di politiche locali

Può verificarsi una situazione in cui i metodi sopra indicati non siano utili e si ottengano errori (avc/denial) in audit.log. Quando ciò accade, è necessario creare una politica locale (Local policy). Tutti gli errori possono essere trovati utilizzando audit2why, come descritto sopra.

Per risolvere gli errori, è possibile creare una politica locale. Ad esempio, se otteniamo un errore relativo a httpd (apache) o smbd (samba), cerchiamo gli errori e creiamo una politica per loro:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

Qui http_policy e smb_policy — sono i nomi delle politiche locali che abbiamo creato. Ora dobbiamo caricare queste politiche locali create nella politica SELinux attuale. Questo può essere fatto come segue:

$ semodule -I http_policy.pp
$ semodule -I smb_policy.pp

Le nostre politiche locali sono state caricate e non dovremmo più ricevere avvisi avc o denail in audit.log.

È stato il mio tentativo di aiutarti a capire SELinux. Spero che dopo aver letto questo articolo ti sentirai più a tuo agio con SELinux.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster