Una guida per principianti a SELinux

Una guida per principianti a SELinux

Traduzione dell'articolo preparato per gli studenti del corso "Sicurezza Linux"

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

SELinux ha tre modalità:

  1. Applicazione — negazione dell'accesso in base a regole politiche.
  2. Permissivo — tenere un registro delle azioni che violano la policy, cosa che sarebbe vietata in modalità di applicazione.
  3. disabile — disabilitazione completa di SELinux.

Per impostazione predefinita le impostazioni sono presenti /etc/selinux/config

Modifica delle modalità SELinux

Per scoprire la modalità corrente, corri

$ getenforce

Per modificare la modalità in permissiva, eseguire il comando seguente

$ setenforce 0

oppure, per cambiare modalità da permissivo su far rispettare, eseguire

$ setenforce 1

Se è necessario disabilitare completamente SELinux, è possibile farlo solo tramite il file di configurazione

$ vi /etc/selinux/config

Per disabilitare modificare il parametro SELINUX come segue:

SELINUX=disabled

Configurazione di SELinux

Ogni file e processo è contrassegnato con un contesto SELinux, che contiene informazioni aggiuntive come utente, ruolo, tipo, ecc. Se è la prima volta che abiliti SELinux, dovrai prima configurare il contesto e le etichette. Il processo di assegnazione di etichette e contesto è noto come tagging. Per iniziare a contrassegnare, nel file di configurazione cambiamo la modalità in permissivo.

$ vi /etc/selinux/config
SELINUX=permissive

Dopo aver impostato la modalità permissivo, crea un file nascosto vuoto nella root con il nome autorelabel

$ touch /.autorelabel

e riavviare il computer

$ init 6

Nota: utilizziamo la modalità permissivo per la marcatura, poiché l'uso della modalità far rispettare potrebbe causare l'arresto anomalo del sistema durante il riavvio.

Non preoccuparti se il download si blocca su qualche file, la marcatura richiede un po' di tempo. Una volta completata la marcatura e avviato il sistema, puoi andare al file di configurazione e impostare la modalità far rispettareed esegui anche:

$ setenforce 1

Ora hai abilitato con successo SELinux sul tuo computer.

Мониторим логи

Potresti aver riscontrato alcuni errori durante la marcatura o mentre il sistema è in esecuzione. Per verificare se SELinux funziona correttamente e se non blocca l'accesso a porte, applicazioni, ecc., è necessario esaminare i registri. Il registro di SELinux si trova in /var/log/audit/audit.log, ma non è necessario leggere tutto per trovare errori. È possibile utilizzare l'utilità audit2why per trovare errori. Esegui il seguente comando:

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

Di conseguenza, riceverai un elenco di errori. Se non sono presenti errori nel registro, non verrà visualizzato alcun messaggio.

Configurazione della politica SELinux

Una policy SELinux è un insieme di regole che governano il meccanismo di sicurezza di SELinux. Una policy definisce un insieme di regole per un ambiente specifico. Ora impareremo come configurare le policy per consentire l'accesso ai servizi vietati.

1. Valori logici (interruttori)

Gli switch (booleani) consentono di modificare parti di una policy in fase di esecuzione, senza dover creare nuove policy. Permettono di apportare modifiche senza riavviare o ricompilare le policy di SELinux.

esempio
Diciamo che vogliamo condividere la directory home di un utente tramite lettura/scrittura FTP e l'abbiamo già condivisa, ma quando proviamo ad accedervi non vediamo nulla. Questo perché la politica di SELinux impedisce al server FTP di leggere e scrivere nella directory home dell'utente. Dobbiamo modificare la politica in modo che il server FTP possa accedere alle directory home. Vediamo se ci sono eventuali opzioni per questo facendo

$ semanage boolean -l

Questo comando elencherà gli interruttori disponibili con il loro stato attuale (acceso o spento) e la descrizione. Puoi perfezionare la ricerca aggiungendo grep per trovare risultati solo ftp:

$ semanage boolean -l | grep ftp

e troverai quanto segue

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Questo interruttore è disabilitato, quindi lo abiliteremo con setsebool $ setsebool ftp_home_dir on

Ora il nostro demone ftp sarà in grado di accedere alla directory home dell'utente.
Nota: puoi anche ottenere un elenco degli interruttori disponibili senza descrizione facendo getsebool -a

2. Etichette e contesto

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

  • Per file e cartelle, le etichette vengono archiviate come attributi estesi nel file system e possono essere visualizzate con il seguente comando:
    $ ls -Z /etc/httpd
  • Per processi e porte, l'etichettatura è gestita dal kernel e puoi visualizzare queste etichette come segue:

processo

$ ps –auxZ | grep httpd

porto

$ netstat -anpZ | grep httpd

esempio
Ora diamo un'occhiata a un esempio per comprendere meglio le etichette e il contesto. Diciamo di avere un server web che, invece di una directory /var/www/html/ использует /home/dan/html/. SELinux considererà questa una violazione della politica e non sarai in grado di visualizzare le tue pagine web. Questo perché non abbiamo impostato il contesto di sicurezza associato ai file HTML. Per visualizzare il contesto di sicurezza predefinito, utilizzare il comando seguente:

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

Eccoci arrivati httpd_sys_content_t come contesto per i file html. Dobbiamo impostare questo contesto di sicurezza per la nostra directory corrente, che attualmente ha il seguente contesto:

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

Un comando alternativo per verificare il contesto di sicurezza di un file o directory:

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

Utilizzeremo anche semanage per modificare il contesto una volta trovato il contesto di sicurezza corretto. 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(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Dopo che il contesto è stato modificato utilizzando semanage, il comando Restorecon caricherà il contesto predefinito per file e directory. Il nostro server web sarà ora in grado di leggere i file dalla cartella /home/dan/htmlperché il contesto di sicurezza per questa cartella è stato modificato in httpd_sys_content_t.

3. Creare politiche locali

Potrebbero verificarsi situazioni in cui i metodi sopra indicati non sono di alcuna utilità e vengono visualizzati errori (avc/denial) in audit.log. Quando ciò accade, è necessario creare una policy locale. Puoi trovare tutti gli errori utilizzando audit2why, come descritto sopra.

È possibile creare una policy locale per risolvere gli errori. Ad esempio, riceviamo un errore relativo a httpd (apache) o smbd (samba), grepiamo gli errori e creiamo una policy per essi:

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 и smb_policy sono i nomi delle politiche locali che abbiamo creato. Ora dobbiamo caricare queste policy locali create nell'attuale policy SELinux. Questo può essere fatto come segue:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

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

Questo è 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

Aggiungi un commento