Traduzione dell'articolo preparata appositamente per gli studenti del corso .

Qui troverai risposte a importanti domande sulla vita, l'universo e tutto il resto in Linux con maggiore sicurezza.
«È una verità importante che le cose non sono sempre ciò che sembrano, è ben nota...»
―Douglas Adams, Guida galattica per gli autostoppisti
Sicurezza. Aumento dell'affidabilità. Conformità. Politica. I Quattro Cavaliere dell'Apocalisse dell'amministratore di sistema. In aggiunta ai nostri compiti quotidiani - monitoraggio, backup, implementazione, configurazione, aggiornamento ecc. - siamo anche responsabili della sicurezza dei nostri sistemi. Anche di quei sistemi dove il fornitore esterno ci consiglia di disabilitare la sicurezza avanzata. È un po' come lavorare da "Mission: Impossible".
Di fronte a questo dilemma, alcuni amministratori di sistema decidono di prendere , perché pensano che non scopriranno mai la risposta alla grande domanda della vita, dell'universo e di tutto il resto. E, come tutti sappiamo, la risposta è 42.
Nello spirito di "Guida galattica per gli autostoppisti", ecco 42 risposte a importanti domande sulla gestione e sull'uso nei vostri sistemi.
1. SELinux è un sistema di controllo degli accessi obbligatorio, il che significa che ogni processo ha un'etichetta (label). Anche ogni file, directory e oggetto di sistema ha etichette. Le politiche delle regole gestiscono l'accesso tra processi e oggetti etichettati. Il kernel garantisce l'applicazione di queste regole.
2. Le due nozioni più importanti sono: Etichettatura — etichettatura (file, processi, porte ecc.) e Applicazione del tipo (che isola i processi l'uno dall'altro in base ai tipi).
3. Il formato corretto dell'etichetta user:role:type:level (opzionale).
4. L'obiettivo di garantire la sicurezza multilivello (Sicurezza Multilivello — MLS) è gestire i processi (domain) sulla base del livello di sicurezza dei dati che utilizzeranno. Ad esempio, un processo classificato come segreto non può leggere dati di massima segretezza.
5. Garantire la sicurezza multi-categoria (Sicurezza Multi-Categoria — MCS) protegge processi simili l'uno dall'altro (ad esempio, macchine virtuali, meccanismi OpenShift, sandbox SELinux, contenitori ecc.).
6. Le opzioni del kernel per modificare i modi di SELinux all'avvio:
autorelabel=1→ costringe il sistema a eseguire una rietichettaturaselinux=0→ il kernel non carica l'infrastruttura SELinuxenforcing=0→ avvio in modalità permissive
7. Se hai bisogno di rimarcare tutto il sistema:
# touch /.autorelabel
#reboot
Se la marcatura di sistema contiene un gran numero di errori, potrebbe essere necessario caricare in modalità permissiva affinché la rimarcatura abbia successo.
8. Per controllare se SELinux è attivo: # getenforce
9. Per attivare/disattivare 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 marcatura per il server web Apache:
- Rappresentazione binaria:
/usr/sbin/httpd→httpd_exec_t - Directory di configurazione:
/etc/httpd→httpd_config_t - Directory dei file di log:
/var/log/httpd → httpd_log_t - Directory dei contenuti:
/var/www/html → httpd_sys_content_t - Script di avvio:
/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
Il processo eseguito nel contesto httpd_t, può interagire con l'oggetto etichettato httpd_something_t.
13. Molti comandi accettano l'argomento -Z per visualizzare, creare e modificare il contesto:
ls -Zid -Zps -Znetstat -Zcp -Zmkdir -Z
I contesti vengono stabiliti quando i file vengono creati in base al contesto della loro directory genitore (con alcune eccezioni). RPM possono impostare i contesti sia durante l'installazione.
14. Ci sono quattro motivi principali per gli errori di SELinux, descritti in dettaglio nei punti 15-21 qui sotto:
- Problemi di marcatura
- A causa di qualcosa che SELinux dovrebbe sapere
- Errore nella politica/applicazione di SELinux
- Le tue informazioni potrebbero essere compromesse
15. Problema di marcatura: se i tuoi file in /srv/myweb sono marcati in modo errato, l'accesso potrebbe essere negato. Ecco alcuni modi per correggerlo:
- Se conosci l'etichetta:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Se conosci un file con un'etichetta equivalente:
# semanage fcontext -a -e /srv/myweb /var/www - Ripristinando il contesto (per entrambi i casi):
# restorecon -vR /srv/myweb
16. Problema di marcatura: se sposti un file invece di copiarlo, il file manterrà il suo contesto originale. Per correggere questo problema:
- Cambia il comando del contesto con etichetta:
# chcon -t httpd_system_content_t /var/www/html/index.html - Cambia il comando del contesto con etichetta di collegamento:
# chcon --reference /var/www/html/ /var/www/html/index.html - Ripristina il contesto (per entrambi i casi):
# restorecon -vR /var/www/html/
17. Se SELinux ha bisogno di sapere, che HTTPD ascolta sulla porta 8585, informa SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux ha bisogno di sapere valori logici che consentono di modificare parti della politica SELinux durante l'esecuzione senza necessità di riscrivere la politica SELinux. Ad esempio, se desideri che httpd invii email, inserisci: # setsebool -P httpd_can_sendmail 1
19. SELinux ha bisogno di sapere valori logici di attivazione/disattivazione delle impostazioni di SELinux:
- Per vedere tutti i valori logici:
# getsebool -a - Per vedere la descrizione di ciascuno:
# semanage boolean -l - Per impostare un valore logico:
# setsebool [_boolean_] [1|0] - Per l'impostazione permanente aggiungi
-P. Ad esempio:# setsebool httpd_enable_ftp_server 1 -P
20. Le politiche/app di SELinux possono contenere errori, tra cui:
- Percorsi di codice insoliti
- Configurazioni
- Reindirizzamento stdout
- Fughe di descrittori di file
- Memoria eseguibile
- Librerie mal costruite
Apri i ticket (non inviare una segnalazione a Bugzilla; non ci sono SLA in Bugzilla).
21. Le tue informazioni potrebbero essere compromesse, se hai domini limitati che tentano di:
- Caricare moduli del kernel
- Disattivare la modalità enforced di SELinux
- Scrivere in
etc_t/shadow_t - Modificare le regole iptables
22. Strumenti SELinux per lo sviluppo di moduli di politica:
# yum -y install setroubleshoot setroubleshoot-server
Riavvia o riavvia auditd dopo l'installazione.
23. Usa
journalctl per visualizzare l'elenco di tutti i log relativi a setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Usa journalctl per visualizzare l'elenco di tutti i log relativi a un'etichetta SELinux specifica. Ad esempio:
# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0
25. In caso di errore di SELinux, utilizza il log setroubleshoot con suggerimenti per diverse possibili soluzioni.
Ad esempio, da journalctl:
Jun 14 19:41:07 web1 setroubleshoot: SELinux impedisce a httpd di accedere a getattr sul file /var/www/html/index.html. Per il messaggio completo, esegui: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux impedisce a httpd di accedere a getattr sul file /var/www/html/index.html.
***** Il plugin restorecon (99.5 fiducia) suggerisce ************************
Se desideri correggere l'etichetta,
l'etichetta predefinita di /var/www/html/index.html deve essere httpd_syscontent_t.
Poi puoi ripristinare l'etichetta.
Fai
# /sbin/restorecon -v /var/www/html/index.html26. Log: SELinux registra informazioni in molti posti:
- /var/log/messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Log: cerca errori di SELinux nel log di audit:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Per trovare i messaggi SELinux Access Vector Cache (AVC) per un determinato servizio:
# ausearch -m avc -c httpd
29. Utilità audit2allow raccoglie informazioni dai log delle operazioni vietate e poi genera regole di politica di autorizzazione SELinux. Ad esempio:
- Per creare una descrizione leggibile del motivo del rifiuto dell'accesso:
# audit2allow -w -a - Per visualizzare la regola di utilizzo forzato dei tipi che consente l'accesso vietato:
# audit2allow -a - Per creare un modulo personalizzato:
# audit2allow -a -M mypolicy - Opzione
-Mcrea un file di applicazione forzata del tipo (.te) con il nome specificato e compila la regola in un pacchetto di politica (.pp):mypolicy.pp mypolicy.te - Per installare un modulo personalizzato:
# semodule -i mypolicy.pp
30. Per configurare un singolo processo (dominio) per funzionare 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 disattivare tutti i domini permissivi: # semodule -d permissivedomains
33. Attivazione della politica MLS di SELinux: # yum install selinux-policy-mls
in /etc/selinux/config:
SELINUX=permissive
SELINUXTYPE=mls
Assicurati che SELinux funzioni in modalità permissiva: # setenforce 0
Utilizza lo script fixfiles, per garantire che i file vengano ribattezzati al successivo riavvio:
# fixfiles -F onboot # reboot
34. Crea un utente con un determinato intervallo MLS: # useradd -Z staff_u john
Utilizzando il comando useradd, associa il nuovo utente a un utente esistente SELinux (in questo caso, staff_u).
35. Per visualizzare la corrispondenza tra gli utenti SELinux e Linux: # semanage login -l
36. Definisci un intervallo specifico per l'utente: # semanage login --modify --range s2:c100 john
37. Per correggere l'etichetta nella home directory dell'utente (se necessario): # chcon -R -l s2:c100 /home/john
38. Per visualizzare le categorie correnti: # chcat -L
39. Per modificare le categorie o per iniziare a crearne di proprie, modifica il file come segue:
\/etc\/selinux\/_<selinuxtype>_\/setrans.conf
40. Per eseguire un comando o uno script in un file specifico, contesto del ruolo e contesto utente:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tcontesto del file-rcontesto del ruolo-ucontesto dell'utente
41. Container in esecuzione con SELinux disabilitato:
- Podman:
# podman run --security-opt label=disable … - Docker:
# docker run --security-opt label=disable …
42. Se hai bisogno di fornire al container accesso completo al sistema:
- Podman:
# podman run --privileged … - Docker:
# docker run --privileged …
E ora sai già la risposta. Quindi, per favore: non farti prendere dal panico e attiva SELinux.
Link:
- eliminando file non necessari dai tuoi set di backup
- di Dan Walsh
- eliminando file non necessari dai tuoi set di backup
- eliminando file non necessari dai tuoi set di backup
Fonte: habr.com
