ProHoster > blog > amministrazione > Cheat sheet di SELinux per amministratori di sistema: 42 risposte a domande importanti
Cheat sheet di SELinux per amministratori di sistema: 42 risposte a domande importanti
La traduzione dell'articolo è stata preparata appositamente per gli studenti del corso "Amministratore Linux".
Qui troverai risposte a domande importanti sulla vita, l'universo e tutto ciò che riguarda Linux con una sicurezza migliorata.
“L’importante verità che le cose non sempre sono ciò che sembrano è conoscenza comune...”
-Douglas Adams, La Guida di Hitchhiker alla Galassia
Sicurezza. Maggiore affidabilità. Corrispondenza. Politica. Amministrazione di sistema dei Quattro Cavalieri dell'Apocalisse. Oltre alle nostre attività quotidiane - monitoraggio, backup, implementazione, configurazione, aggiornamento, ecc. - siamo anche responsabili della sicurezza dei nostri sistemi. Anche quei sistemi in cui il fornitore di terze parti consiglia di disattivare la sicurezza avanzata. Sembra di lavorare Ethan Hunt da “Missione: Impossibile”.
Di fronte a questo dilemma, alcuni amministratori di sistema decidono di intraprendere pillola blu, perché pensano che non conosceranno mai la risposta alla grande domanda sulla vita, sull'universo e tutto il resto. E come tutti sappiamo, la risposta è 42.
Nello spirito della Guida galattica per autostoppisti, ecco 42 risposte a importanti domande sul controllo e l'utilizzo. SELinux sui tuoi sistemi
1. SELinux è un sistema di controllo degli accessi forzati, il che significa che ogni processo ha un'etichetta. Ogni file, directory e oggetto di sistema ha anche etichette. Le regole della politica controllano l'accesso tra processi e oggetti contrassegnati. Il kernel applica queste regole.
2. I due concetti più importanti sono: Etichettatura — contrassegni (file, processi, porte, ecc.) e Imposizione del tipo (che isola i processi gli uni dagli altri in base ai tipi).
4. Lo scopo di fornire sicurezza multilivello (Sicurezza multilivello - MLS) consiste nel gestire i processi (domini) in base al livello di sicurezza dei dati che utilizzeranno. Ad esempio, un processo segreto non può leggere i dati top secret.
5. Garantire la sicurezza multicategoria (Sicurezza multicategoria - MCS) protegge processi simili gli uni dagli altri (ad esempio macchine virtuali, motori OpenShift, sandbox SELinux, contenitori, ecc.).
6. Opzioni del kernel per modificare le modalità SELinux all'avvio:
autorelabel=1 → fa sì che il sistema esegua la rietichettatura
selinux=0 → il kernel non carica l'infrastruttura SELinux
enforcing=0 → caricamento in modalità permissiva
7. Se è necessario rietichettare l'intero sistema:
# touch /.autorelabel
#reboot
Se il contrassegno del sistema contiene un numero elevato di errori, potrebbe essere necessario eseguire l'avvio in modalità permissiva affinché il contrassegno abbia esito positivo.
8. Per verificare se SELinux è abilitato: # getenforce
9. Per abilitare/disabilitare temporaneamente SELinux: # setenforce [1|0]
10 Controllo dello stato di SELinux: # sestatus
11 File di configurazione: /etc/selinux/config
12 Come funziona SELinux? Ecco un esempio di contrassegno per il server web Apache:
Directory di configurazione: /etc/httpd→httpd_config_t
Directory del file di registro: /var/log/httpd → httpd_log_t
Directory dei contenuti: /var/www/html → httpd_sys_content_t
Avvia lo script: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
processo: /usr/sbin/httpd -DFOREGROUND → httpd_t
Porte: 80/tcp, 443/tcp → httpd_t, http_port_t
Processo in esecuzione nel contesto httpd_t, può interagire con un oggetto etichettato httpd_something_t.
13 Molti comandi accettano un argomento -Z per visualizzare, creare e modificare il contesto:
ls -Z
id -Z
ps -Z
netstat -Z
cp -Z
mkdir -Z
I contesti vengono stabiliti quando i file vengono creati in base al contesto della directory principale (con alcune eccezioni). Gli RPM possono stabilire contesti come durante l'installazione.
14 Esistono quattro cause principali degli errori SELinux, descritte più dettagliatamente nei punti 15-21 di seguito:
Problemi di etichettatura
A causa di qualcosa che SELinux deve sapere
Errore nella policy/applicazione SELinux
Le tue informazioni potrebbero essere compromesse
15Problema di etichettatura: se i tuoi file sono in /srv/myweb sono contrassegnati in modo errato, l'accesso potrebbe essere negato. Ecco alcuni modi per risolvere questo problema:
Se conosci l'etichetta: # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
Se conosci un file con segni equivalenti: # semanage fcontext -a -e /srv/myweb /var/www
Ripristinare il contesto (per entrambi i casi): # restorecon -vR /srv/myweb
16Problema di etichettatura: se sposti il file invece di copiarlo, il file manterrà il suo contesto originale. Per risolvere questo problema:
Cambia il comando contestuale con l'etichetta: # chcon -t httpd_system_content_t /var/www/html/index.html
Modificare il comando contestuale con l'etichetta del collegamento: # chcon --reference /var/www/html/ /var/www/html/index.html
Ripristinare il contesto (per entrambi i casi): # restorecon -vR /var/www/html/
17 se SELinux che devi sapereche HTTPD è in ascolto sulla porta 8585, comunica a SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18SELinux che devi sapere Valori booleani che consentono di modificare parti della policy SELinux in fase di esecuzione senza che la policy SELinux venga sovrascritta. Ad esempio, se desideri che httpd invii email, inserisci: # setsebool -P httpd_can_sendmail 1
19SELinux che devi sapere valori logici per abilitare/disabilitare le impostazioni di SELinux:
Per vedere tutti i valori booleani: # getsebool -a
Per vedere una descrizione di ciascuno: # semanage boolean -l
Per impostare un valore booleano: # setsebool [_boolean_] [1|0]
Per un'installazione permanente, aggiungere -P. Ad esempio: # setsebool httpd_enable_ftp_server 1 -P
20 Le policy/applicazioni SELinux potrebbero contenere errori, tra cui:
Percorsi di codice insoliti
configurazioni
Reindirizzamento stdout
Perdite di descrittori di file
Memoria eseguibile
Biblioteche mal costruite
Ticket aperti (non inviare una segnalazione a Bugzilla; Bugzilla non ha SLA).
21Le tue informazioni potrebbero essere compromessese hai domini limitati prova a:
Carica i moduli del kernel
Disabilita la modalità SELinux forzata
Scrivere a etc_t/shadow_t
Cambia le regole di iptables
22 Strumenti SELinux per lo sviluppo di moduli di policy:
25 Se si verifica un errore SELinux, utilizzare il log setroubleshoot offrendo diverse possibili soluzioni.
Ad esempio, da journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html
26 Logging: SELinux registra le informazioni in molti posti:
27 Registrazione: ricerca di errori SELinux nel registro di controllo:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28 Per trovare i messaggi SELinux Access Vector Cache (AVC) per un servizio specifico:
# ausearch -m avc -c httpd
29 Utilità audit2allow raccoglie informazioni dai registri delle operazioni proibite e quindi genera regole di politica di autorizzazione SELinux. Per esempio:
Per creare una descrizione leggibile del motivo per cui l'accesso è negato: # audit2allow -w -a
Per visualizzare una regola di imposizione del tipo che consente l'accesso negato: # audit2allow -a
Per creare un modulo personalizzato: # audit2allow -a -M mypolicy
Opzione -M crea un file di imposizione del tipo (.te) con il nome specificato e compila la regola in un pacchetto di policy (.pp): mypolicy.pp mypolicy.te
Per installare un modulo personalizzato: # semodule -i mypolicy.pp
30 Per configurare un processo separato (dominio) affinché funzioni in modalità permissiva: # semanage permissive -a httpd_t
31 Se non desideri più che il dominio sia permissivo: # semanage permissive -d httpd_t
32 Per disabilitare tutti i domini permissivi: # semodule -d permissivedomains
33 Abilitazione della policy MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Assicurati che SELinux sia in esecuzione in modalità permissiva: # setenforce 0
Usa una sceneggiatura fixfilesper garantire che i file vengano rietichettati al successivo riavvio:
# fixfiles -F onboot # reboot
34 Crea un utente con un intervallo MLS specifico: # useradd -Z staff_u john
Utilizzando il comando useradd, mappa il nuovo utente su un utente SELinux esistente (in questo caso, staff_u).
35 Per visualizzare la mappatura tra SELinux e gli utenti Linux: # semanage login -l
36 Definire un intervallo specifico per l'utente: # semanage login --modify --range s2:c100 john
37 Per correggere l'etichetta della directory home dell'utente (se necessario): # chcon -R -l s2:c100 /home/john
38 Per visualizzare le categorie correnti: # chcat -L
39 Per cambiare categorie o iniziare a crearne di nuove, modifica il file come segue:
/etc/selinux/_<selinuxtype>_/setrans.conf
40 Per eseguire un comando o uno script in un file, un ruolo e un contesto utente specifici: