Per anni, SELinux ha aiutato a prevenire danni ai sistemi causati da exploit zero-day. Questo strumento è utile anche per l'isolamento della macchina virtuale ed è necessario per l'isolamento del contenitore. Eppure SELinux è ancora comunemente disabilitato o messo in modalità permissiva.
targeted
di SELinux la politica è progettata per isolare vari domini di processo pur consentendo l'interazione tra i servizi secondo necessità. Sono necessari solo pochi comandi affinché un amministratore configuri un sistema per utilizzare questa politica con le proprie applicazioni personalizzate, mantenendo SELinux in modalità di applicazione.
[Ulteriori informazioni sull'utilizzo della documentazione della politica di SELinux qui.]
Il semanage
Il comando viene utilizzato per regolare i contesti dei file, i contesti delle porte e i valori booleani. Se c'è ancora un conflitto con un particolare processo, quel dominio può essere messo in modalità permissiva fino al completamento di ulteriori indagini. Ciò lascia il resto del sistema protetto in modalità di esecuzione.
Con solo i quattro semanage
comandi seguenti, la maggior parte dei sistemi può essere configurata in modo che le applicazioni personalizzate vengano eseguite con SELinux in modalità di applicazione.
Il semanage boolean
comando
Il targeted
la politica include molti booleani per abilitare e disabilitare insiemi di allow
regole, partendo dal presupposto che i servizi abbiano più casi d'uso e vengano eseguiti in modo diverso in ciascun ambiente. L'uso dei booleani consente diversi set di regole per diversi casi d'uso:un server Web in un ambiente accademico potrebbe dover consentire agli studenti di pubblicare contenuti dalle loro directory home, mentre un sito aziendale rivolto al pubblico potrebbe dover rifiutare l'accesso a qualsiasi home utente directory, limitare gli eseguibili SSI e visualizzare i dati archiviati su una condivisione NFS.
Il httpd_selinux
la pagina man descrive l'uso di tutti i booleani forniti per httpd
dominio e un esempio setsebool
comandi per abilitare in modo persistente ogni booleano. Un modo alternativo (e più recente) per vedere e modificare questi booleani è con il semanage boolean
comando.
Il -l
opzione elenca tutti i booleani nella politica caricata. Puoi quindi filtrare per una parola chiave:
$ sudo semanage boolean -l | grep httpd
httpd_anon_write (off , off) Allow httpd to anon write
httpd_builtin_scripting (on , on) Allow httpd to builtin scripting
httpd_can_check_spam (off , off) Allow httpd to can check spam
httpd_can_connect_ftp (off , off) Allow httpd to can connect ftp
httpd_can_connect_ldap (off , off) Allow httpd to can connect ldap
Questo output include il nome del booleano, lo stato corrente e persistente del booleano e una breve descrizione di come viene utilizzato il booleano.
Per cambiare il booleano con semanage
usa:
$ sudo semanage boolean -m --off httpd_ssi_exec
Puoi anche elencare i booleani personalizzati localmente aggiungendo il -C
opzione:
$ sudo semanage boolean -l -C
SELinux boolean State Default Description
httpd_ssi_exec (off , off) Allow httpd to ssi exec
virt_sandbox_use_all_caps (on , on) Allow virt to sandbox use all caps
virt_use_nfs (on , on) Allow virt to use nfs
Le pagine man per ogni dominio SELinux hanno le descrizioni di tutti i booleani forniti per quei domini. Per ulteriori opzioni durante la modifica dei booleani di SELinux con semanage
, vedi il semanage-boolean
pagina man.
Puoi automatizzare questi semanage
comandi con i relativi moduli e ruoli Ansible. Il modulo Ansible per semanage boolean
è seboolean
. Questo, e i relativi moduli descritti di seguito, vengono utilizzati dai ruoli forniti da linux-system-roles
pacchetto in Fedora o rhel-system-roles
pacchetto in Red Hat Enterprise Linux. Il pacchetto Red Hat è disponibile a partire da Red Hat Enterprise Linux 7.4 e può essere trovato nel repository "Extras".
Il semanage fcontext
comando
Il targeted
fornisce informazioni sul contesto dei file per i file dell'applicazione, inclusi i file di dati, di registro e di runtime, le posizioni alternative comuni e predefinite. Queste definizioni di contesto sono le mapping che il restorecon
comando utilizzato per verificare o modificare il contesto del file.
Il semanage fcontext
Il comando può essere utilizzato per elencare le definizioni del contesto del file e aggiungerne altre. Il -l
l'opzione mostra tutti i contesti nella politica caricata. Puoi quindi filtrare per una parola chiave:
$ sudo semanage fcontext -l | grep sshd
/etc/rc\.d/init\.d/sshd regular file system_u:object_r:sshd_initrc_exec_t:s0
/etc/ssh/primes regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key regular file system_u:object_r:sshd_key_t:s0
/etc/ssh/ssh_host.*_key\.pub regular file system_u:object_r:sshd_key_t:s0
/usr/lib/systemd/system/sshd-keygen.* regular file system_u:object_r:sshd_keygen_unit_file_t:s0
Questo output include il modello di espressione regolare per i nomi file di destinazione, il tipo di file e il contesto file da assegnare al nome file corrispondente.
La relativa pagina man, in questo caso man sshd_selinux
, include un elenco di file gestiti e una descrizione di ogni contesto di file disponibile per il dominio. Esistono anche comandi di esempio per specificare e applicare etichette alternative.
Ad esempio, se desideri memorizzare il sshd
host keys in una sottodirectory separata, è possibile eseguire i seguenti due comandi:
$ sudo semanage fcontext -a -t sshd_key_t '/etc/ssh/keys(/.*)?'
$ sudo restorecon -r /etc/ssh/keys
In questo esempio, l'espressione regolare corrisponderà alla directory /etc/ssh/keys
così come tutte le sottodirectory e i file trovati in /etc/ssh/keys
directory.
Proprio come i booleani, puoi visualizzare qualsiasi contesto di file personalizzato localmente aggiungendo il -C
opzione:
$ sudo semanage fcontext -l -C
SELinux fcontext type Context
/usr/share/dnfdaemon/dnfdaemon-system all files system_u:object_r:rpm_exec_t:s0
Per ulteriori opzioni durante la modifica dei contesti dei file SELinux, vedere semanage-fcontext
pagina man.
Puoi automatizzare il semanage fcontext
comando con il sefcontext
di Ansible modulo. Il restorecon
il comando dovrà comunque essere eseguito con un modulo di comando separato. Vedi ansible-doc sefcontext
per esempio. Il selinux
il ruolo di sistema include entrambe le attività.
La semanage port
comando
Oltre ai contesti dei file, il targeted
la politica definisce anche i contesti portuali. Proprio come con i booleani e i contesti di file, le pagine man specifiche del dominio elencano i tipi definiti e possono anche mostrare i comandi di esempio necessari per eseguire un servizio su una porta diversa.
Visualizza i contesti delle porte con:
$ sudo semanage port -l | grep http
http_cache_port_t tcp 8080, 8118, 8123, 10001-10010
http_cache_port_t udp 3130
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t tcp 5988
pegasus_https_port_t tcp 5989
Quando si esegue un servizio su una porta personalizzata, è necessario modificare il file di configurazione per il servizio e aggiungere anche una definizione di porta SELinux. Senza la definizione della porta, il servizio non si avvierà e registrerà un errore simile a "impossibile eseguire il binding alla porta".
Aggiungi una definizione di porta con:
$ sudo semanage port -a -t http_cache_port_t -p tcp 8010
Quando si specifica la porta, è necessario includere sia il protocollo che il numero di porta. Inoltre, è possibile definire un solo tipo per ogni protocollo e numero di porta. Per ulteriori opzioni durante la modifica dei contesti delle porte di SELinux, vedere semanage-port
pagina man.
Puoi automatizzare la semanage-port
comando con il seport
Modulo Ansible.
Il semanage permissive
comando
Invece di spostare l'intero sistema in modalità permissiva o, peggio, disabilitare completamente SELinux, è possibile mettere un singolo dominio in modalità permissiva. Un dominio in modalità permissiva consente tutte le azioni pur registrando eventuali rifiuti. Gli altri domini sul sistema rimangono in modalità di esecuzione, che registra e nega le azioni che non sono specificamente consentite.
Le pagine man per i domini comuni elencano i tipi di SELinux che possono essere messi in modalità permissiva.
Per elencare tutti i domini attualmente in modalità permissiva usa:
$ sudo semanage permissive -l
All'installazione iniziale, è improbabile che ci siano domini in modalità permissiva.
Per mettere un dominio in modalità permissiva usa:
$ sudo semanage permissive -a squid_t
Il -d
l'opzione elimina un dominio permissivo, abilitando così la modalità di applicazione per quel dominio.
Per ulteriori opzioni quando si impostano i domini in modalità permissiva, vedere il semanage-permissive
pagina man.
Il selinux_permissive
di Ansible può essere utilizzato per mettere un dominio in modalità permissiva. Vedi ansible-doc selinux_permissive
per esempi.
I file
Tutto il semanage
i comandi che aggiungono o modificano la configurazione dei criteri di destinazione memorizzano le informazioni in *local
file sotto il /etc/selinux/targeted
albero di directory. Questi file hanno tutti avvisi che non devono essere modificati direttamente ma vengono utilizzati per preservare la personalizzazione. Quando SELinux e i pacchetti delle politiche vengono aggiornati, questi file di personalizzazione locali vengono lasciati in posizione e applicati alla politica aggiornata.