Introduzione
Security Enhanced Linux o SELinux è un meccanismo avanzato di controllo degli accessi integrato nella maggior parte delle moderne distribuzioni Linux. Inizialmente è stato sviluppato dalla US National Security Agency per proteggere i sistemi informatici da intrusioni dannose e manomissioni. Nel corso del tempo, SELinux è stato rilasciato nel pubblico dominio e da allora varie distribuzioni lo hanno incorporato nel loro codice
Molti amministratori di sistema trovano SELinux un territorio in qualche modo inesplorato. L'argomento può sembrare scoraggiante ea volte piuttosto confuso. Tuttavia, un sistema SELinux configurato correttamente può ridurre notevolmente i rischi per la sicurezza e conoscerne un po' può aiutare a risolvere i messaggi di errore relativi all'accesso. In questo tutorial impareremo i concetti alla base di SELinux:i suoi pacchetti, comandi e file di configurazione
Installazione dei pacchetti SELinux
In SELinux vengono utilizzati numerosi pacchetti. Alcuni sono installati per impostazione predefinita. Ecco un elenco delle distribuzioni basate su Red Hat:
- policycoreutils (fornisce utilità per la gestione di SELinux)
- policycoreutils-python (fornisce utilità per la gestione di SELinux)
- politica di selinux (fornisce la politica di riferimento di SELinux)
- mirato-selinux-policy (fornisce la politica mirata di SELinux)
- libselinux-utils (fornisce alcuni strumenti per la gestione di SELinux)
- server per la risoluzione dei problemi (fornisce strumenti per decifrare i messaggi del registro di controllo)
- setools (fornisce strumenti per il monitoraggio del registro di controllo, la politica di query e la gestione del contesto dei file)
- setools-console (fornisce strumenti per il monitoraggio del registro di controllo, la politica di query e la gestione del contesto dei file)
- mcstrans (strumenti per tradurre diversi livelli in un formato di facile comprensione)
Alcuni di questi sono già installati. Per verificare quali pacchetti SELinux sono installati sul tuo sistema CentOS 7, puoi eseguire alcuni comandi come quello di seguito (con termini di ricerca diversi dopo grep
) come utente root:
rpm -qa | grep selinux
L'output dovrebbe essere simile a questo:
libselinux-utils-2.2.2-6.el7.x86_64
libselinux-2.2.2-6.el7.x86_64
selinux-policy-targeted-3.12.1-153.el7.noarch
selinux-policy-3.12.1-153.el7.noarch
libselinux-python-2.2.2-6.el7.x86_64
Puoi andare avanti e installare tutti i pacchetti con il comando seguente (yum aggiornerà solo quelli che hai già), o solo quelli che trovi mancanti dal tuo sistema:
yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans
Ora dovremmo avere un sistema caricato con tutti i pacchetti SELinux.
Modalità SELinux
È ora di iniziare a giocare con SELinux, quindi iniziamo con le modalità SELinux. In qualsiasi momento, SELinux può trovarsi in una delle tre modalità possibili:
- Applicazione
- Permissivi
- Disabilitato
In modalità di applicazione, SELinux applica la sua politica sul sistema Linux e assicurarsi che qualsiasi tentativo di accesso non autorizzato da parte di utenti e processi venga negato. I dinieghi di accesso vengono scritti anche nei file di registro pertinenti. Parleremo delle politiche di SELinux e dei log di controllo in seguito.
La modalità permissiva è come uno stato semi-abilitato. SELinux non applica la sua politica in modalità permissiva, quindi nessun accesso viene negato. Tuttavia, qualsiasi violazione dei criteri viene comunque registrata nei registri di controllo. È un ottimo modo per testare SELinux prima di applicarlo.
La modalità disabilitata è autoesplicativa:il sistema non funzionerà con una sicurezza avanzata.
Verifica delle modalità e dello stato di SELinux
Possiamo eseguire getenforce
comando per verificare la modalità SELinux corrente.
getenforce
SELinux dovrebbe essere attualmente disabilitato, quindi l'output sarà simile a questo:
Disabled
Possiamo anche eseguire il sestatus
comando:
sestatus
Quando SELinux è disabilitato l'output mostrerà:
SELinux status: disabled
File di configurazione SELinux
Il file di configurazione principale per SELinux è /etc/selinux/config. Possiamo eseguire il seguente comando per visualizzarne il contenuto:
cat /etc/selinux/config
L'output sarà simile a questo:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Ci sono due direttive in questo file. La direttiva SELINUX determina la modalità SELinux e può avere tre possibili valori come abbiamo discusso prima.
Abilitazione e disabilitazione di SELinux
Abilitare SELinux è abbastanza semplice; ma a differenza di disabilitarlo, dovrebbe essere eseguito in un processo in due fasi. Assumiamo che SELinux sia attualmente disabilitato e che tu abbia installato tutti i pacchetti SELinux dalla sezione precedente.
Come primo passo, dobbiamo modificare il /etc/selinux/config
per modificare la direttiva SELINUX in modalità permissiva.
vi /etc/sysconfig/selinux
...
SELINUX=permissive
...
Impostazione dello stato su permesso in primo luogo è necessario perché ogni file nel sistema deve avere il suo contesto etichettato prima che SELinux possa essere applicato. A meno che tutti i file non siano etichettati correttamente, i processi in esecuzione in domini confinati potrebbero non riuscire perché non possono accedere ai file con i contesti corretti. Ciò può causare il fallimento del processo di avvio o l'avvio con errori. Introdurremo contesti e domini più avanti nel tutorial.
Ora esegui un riavvio del sistema:
reboot
Il processo di riavvio vedrà tutti i file nel server etichettati con un contesto SELinux.
Nella seconda fase, dobbiamo modificare il file di configurazione per cambiare la direttiva SELINUX da permissiva per applicare nel /etc/sysconfig/selinux
file:
...
SELINUX=enforcing
...
Quindi, riavvia nuovamente il server.
reboot
Una volta che il server è di nuovo online, possiamo eseguire il sestatus
comando per verificare lo stato di SELinux. Ora dovrebbe mostrare maggiori dettagli sul server:
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28