
La traduzione dell'articolo è preparata per gli studenti del corso
SELinux o Security Enhanced Linux è un meccanismo avanzato di gestione degli accessi, sviluppato dalla National Security Agency degli Stati Uniti (NSA) per prevenire intrusioni dannose. Implementa un modello di controllo degli accessi obbligatorio (Mandatory Access Control, MAC) sovrapposto a un modello discrezionale (Discretionary Access Control, DAC) esistente, ovvero permessi di lettura, scrittura ed esecuzione.
SELinux ha tre modalità:
- Enforcing — vieta l'accesso in base alle regole della politica.
- Permissive — registra le azioni che violano la politica, che sarebbero vietate in modalità enforcing.
- Disabled — disabilitazione completa di SELinux.
Per impostazione predefinita, le impostazioni si trovano in /etc/selinux/config
Cambiamento delle modalità SELinux
Per conoscere la modalità corrente esegui
$ getenforcePer cambiare la modalità in permissive, esegui il seguente comando
$ setenforce 0oppure, per cambiare la modalità da permissive in enforcing, esegui
$ setenforce 1Se hai bisogno di disabilitare completamente SELinux, questo può essere fatto solo tramite il file di configurazione
$ vi /etc/selinux/configPer disabilitarlo, modifica la variabile SELINUX come segue:
SELINUX=disabledConfigurazione di SELinux
Ogni file e processo è contrassegnato da un contesto SELinux, che contiene informazioni aggiuntive come utente, ruolo, tipo, ecc. Se stai attivando SELinux per la prima volta, devi prima configurare i contesti e le etichette. Il processo di assegnazione di etichette e contesti è 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 root 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 un crash del sistema durante il riavvio.
Non preoccuparti se il caricamento si blocca su un file, l'etichettatura richiede un po' di tempo. Una volta completata l'etichettatura e il caricamento del sistema, puoi passare al file di configurazione e impostare la modalità enforcing, e inoltre eseguire:
$ setenforce 1Ora hai abilitato con successo SELinux sul tuo computer.
Monitoriamo i log
Potrebbe esserci stato un errore 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 tutto per trovare gli errori. Puoi utilizzare lo strumento audit2why per cercare gli errori. Esegui il seguente comando:
$ audit2why < /var/log/audit/audit.logDi conseguenza, otterrai un elenco di errori. Se non ci sono 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 di SELinux. La politica definisce un insieme di regole per un ambiente specifico. Adesso esamineremo come configurare le politiche per consentire l'accesso a servizi vietati.
1. Valori booleani (switch)
Gli switch (booleani) consentono di modificare parti della politica durante il funzionamento, senza la necessità di creare nuove politiche. Permettono di apportare modifiche senza riavviare o ricompilare le politiche SELinux.
Esempio
Supponiamo di voler fornire l'accesso condiviso alla home directory dell'utente via FTP per lettura e scrittura, e l'abbiamo già condivisa, ma quando cerchiamo di accedervi non vediamo nulla. Questo è dovuto al fatto che la politica SELinux vieta al server FTP di leggere e scrivere nella home directory dell'utente. Dobbiamo modificare la politica affinché il server FTP possa accedere alle home directory. Verifichiamo se ci sono switch disponibili eseguendo
$ semanage boolean -lQuesto comando restituirà un elenco di switch disponibili con il loro stato attuale (attivato/on o disattivato/off) e una descrizione. Puoi affinare la ricerca aggiungendo grep per trovare solo i risultati relativi a ftp:
$ semanage boolean -l | grep ftpe troverai quanto segue
ftp_home_dir -> off Permetti a ftp di leggere e scrivere file nella home directory dell'utenteQuesto switch è disattivato, quindi lo attiveremo con setsebool $ setsebool ftp_home_dir on
Ora il nostro demone FTP potrà accedere alla home directory dell'utente.
Nota: puoi anche ottenere un elenco degli switch disponibili senza la descrizione eseguendo getsebool -a
2. Etichette e contesto
Questo è il modo più comune di implementare la politica SELinux. Ogni file, cartella, processo e porta è contrassegnato con un contesto SELinux:
- Per i file e le cartelle, le etichette vengono 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 gestione delle etichette è controllata dal kernel, e queste etichette possono essere visualizzate nel modo seguente:
processo
$ ps –auxZ | grep httpdporto
$ netstat -anpZ | grep httpdEsempio
Ora esaminiamo un esempio per comprendere meglio le etichette e il contesto. Supponiamo di avere server web, che invece di una directory /var/www/html/ использует /home/dan/html/. SELinux considererà ciò 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, utilizza 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 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 controllare il contesto di sicurezza di un file o di una directory:
$ semanage fcontext -l | grep '/var/www'Utilizzeremo anche semanage per modificare il contesto, dopo aver trovato il contesto di sicurezza corretto. Per cambiare 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/htmlDopo che il contesto è stato modificato usando semanage, il comando restorecon caricherà il contesto predefinito per file e 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 cambiato in httpd_sys_content_t.
3. Creazione di politiche locali
Possono verificarsi situazioni in cui i metodi sopra menzionati sono inutili per te, e ricevi errori (avc/denial) in audit.log. Quando ciò accade, è necessario creare una politica locale (Local policy). Puoi trovare tutti gli errori utilizzando audit2why, come descritto sopra.
Per risolvere gli errori, puoi creare una politica locale. Ad esempio, riceviamo un errore relativo a httpd (apache) o smbd (samba), filtriamo gli errori e creiamo una politica 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_policyQui http_policy e smb_policy Questi sono i nomi delle politiche locali che abbiamo creato. Ora dobbiamo caricare queste politiche locali create nella politica attuale di SELinux. Possiamo farlo nel seguente modo:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.ppLe nostre politiche locali sono state caricate e non dovremmo più ricevere avc o denial in audit.log.
Questo è stato il mio tentativo di aiutarvi a comprendere SELinux. Spero che dopo aver letto quest'articolo vi sentiate più a vostro agio con SELinux.
Fonte: habr.com
