
La traduzione dell'articolo è stata preparata per gli studenti del corso
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à:
- Enforcing — nega l'accesso in base a regole di policy.
- Permissive — registra le azioni che violano la policy, che sarebbero state negate in modalità enforcing.
- 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
$ getenforcePer cambiare la modalità su permissive, esegui il seguente comando
$ setenforce 0oppure, per cambiare la modalità da permissive con enforcing, esegui
$ setenforce 1Se hai bisogno di disabilitare completamente SELinux, ciò può essere fatto solo tramite il file di configurazione
$ vi /etc/selinux/configPer disabilitarlo, modifica il parametro SELINUX nel seguente modo:
SELINUX=disabledConfigurazione 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=permissiveDopo aver impostato la modalità permissive, creiamo nella radice un file nascosto vuoto chiamato .autorelabel
$ touch /.autorelabele riavviamo il computer
$ init 6Nota: 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 1Ora 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.logCome 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 -lQuesto 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 ftpe troverai quanto segue
ftp_home_dir -> off Consenti a ftp di leggere e scrivere file nella directory home dell'utenteQuesto 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 httpdporta
$ netstat -anpZ | grep httpdEsempio
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/htmlDopo 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_policyQui 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.ppLe 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
