La traduzione dell'articolo è stata preparata appositamente per gli studenti del corso .

Qui troverai risposte a domande importanti sulla vita, l'universo e tutto ciò che riguarda Linux con una sicurezza potenziata.
«La verità importante che le cose non sono sempre come sembrano è ben nota…»
―Douglas Adams, Guida galattica per gli autostoppisti
Sicurezza. Aumento dell'affidabilità. Conformità. Politica. I Quattro Cavalieri dell'Apocalisse degli amministratori di sistema. Oltre ai nostri compiti quotidiani — monitoraggio, backup, implementazione, configurazione, aggiornamento e così via — siamo anche responsabili della sicurezza dei nostri sistemi. Anche di quei sistemi dove un fornitore esterno ci consiglia di disattivare la sicurezza avanzata. È come lavorare in “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 ciò. E, come tutti sappiamo, la risposta è 42.
Nello spirito di “Guida galattica per gli autostoppisti”, ecco 42 risposte a domande importanti sulla gestione e l'utilizzo nei tuoi 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 regole della politica gestiscono l'accesso tra i processi e gli oggetti etichettati. Il kernel garantisce l'applicazione di queste regole.
2. Due dei concetti più importanti sono: Labeling — etichettatura (file, processi, porte, ecc.) e Type enforcement (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 della sicurezza multilivello (Multi-Level Security — MLS) è gestire i processi (domini) in base al livello di sicurezza dei dati che utilizzeranno. Ad esempio, un processo riservato non può leggere dati top secret.
5. Garantire la sicurezza multicategoriale (Multi-Category Security — MCS) protegge processi simili l'uno dall'altro (ad esempio, macchine virtuali, ambienti OpenShift, sandbox SELinux, contenitori, ecc.).
6. Parametri del kernel per modificare le modalità di SELinux all'avvio:
autorelabel=1→ costringe il sistema a eseguire la rivalutazioneselinux=0→ il kernel non carica l'infrastruttura SELinuxenforcing=0→ avvio in modalità permissiva
7. Se devi rimarcare l'intero sistema:
# touch /.autorelabel
#reboot
Se la marcatura di sistema contiene un gran numero di errori, potresti dover avviare in modalità permissiva affinché la rimarcatura abbia successo.
8. Per controllare se SELinux è abilitato: # 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
Un processo eseguito nel contesto httpd_t, può interagire con l'oggetto con marcatura 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 sono impostati quando i file vengono creati in base al contesto della loro directory padre (con alcune eccezioni). I pacchetti RPM possono impostare i contesti sia durante l'installazione.
14. Ci sono quattro motivi principali per gli errori SELinux, descritti più dettagliatamente nei punti 15-21 qui sotto:
- Problemi di etichettatura
- Qualcosa da cui SELinux deve essere a conoscenza
- Errore nella politica/applicazione di SELinux
- Le tue informazioni potrebbero essere compromesse
15. Problema di etichettatura: se i tuoi file sono /srv/myweb etichettati in modo errato, l'accesso può essere negato. Ecco alcuni modi per correggerlo:
- Se conosci l'etichetta:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?' - Se conosci il file con l'etichettatura equivalente:
# semanage fcontext -a -e /srv/myweb /var/www - Ripristinando il contesto (per entrambi i casi):
# restorecon -vR /srv/myweb
16. Problema di etichettatura: se sposti il file invece di copiarlo, il file manterrà il suo contesto originale. Per correggere questo problema:
- Modifica il comando di contesto con l'etichetta:
# chcon -t httpd_system_content_t /var/www/html/index.html - Modifica il comando di contesto con l'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 deve sapere, che HTTPD ascolta la porta 8585, informa SELinux:
# semanage port -a -t http_port_t -p tcp 8585
18. SELinux deve sapere valori logici che consentono di modificare parti della politica di SELinux a runtime senza conoscenza della riscrittura della politica di SELinux. Ad esempio, se desideri che httpd invii email, inserisci: # setsebool -P httpd_can_sendmail 1
19. SELinux deve sapere valori logici per attivare/disattivare le 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 una configurazione permanente, aggiungere
-P. Ad esempio:# setsebool httpd_enable_ftp_server 1 -P
20. Le politiche/applicazioni SELinux possono contenere errori, tra cui:
- Percorsi di codice insoliti
- Configurazioni
- Ristrutturazione di stdout
- Fughe di descrittori di file
- Memoria eseguibile
- Librerie mal costruite
Aprire i ticket (non inviare rapporti a Bugzilla; in Bugzilla non ci sono SLA).
21. Le tue informazioni potrebbero essere compromesse, se si hanno 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 policy:
# yum -y install setroubleshoot setroubleshoot-server
Riavviare o riavviare auditd dopo l'installazione.
23. Usa
journalctl per elencare tutti i log relativi a setroubleshoot:
# journalctl -t setroubleshoot --since=14:20
24. Usa journalctl per elencare 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 SELinux, utilizzare il log setroubleshoot con suggerimenti per possibili soluzioni.
Ad esempio, da journalctl:
14 giu 19:41:07 web1 setroubleshoot: SELinux impedisce a httpd di accedere a getattr sul file /var/www/html/index.html. Per 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% di fiducia) suggerisce ************************
Se desideri correggere l'etichetta,
L'etichetta predefinita di /var/www/html/index.html dovrebbe essere httpd_syscontent_t.
Quindi puoi eseguire restorecon.
Fai
# /sbin/restorecon -v /var/www/html/index.html26. Logging: SELinux registra informazioni in molti luoghi:
- /var/log/messages
- /var/log/audit/audit.log
- /var/lib/setroubleshoot/setroubleshoot_database.xml
27. Logging: ricerca errori SELinux nel log di audit:
# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today
28. Per trovare messaggi SELinux Access Vector Cache (AVC) per un servizio specifico:
# ausearch -m avc -c httpd
29. Utility audit2allow raccoglie informazioni dai log delle operazioni vietate, quindi genera regole per la politica di autorizzazione SELinux. Ad esempio:
- Per creare una descrizione leggibile della causa del rifiuto di accesso:
# audit2allow -w -a - Per visualizzare la regola di applicazione dei tipi, che consente l'accesso vietato:
# audit2allow -a - Per creare un modulo personalizzato:
# audit2allow -a -M mypolicy - Opzione
-Mcrea un file di applicazione dei tipi (.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 disabilitare 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
Usa lo script fixfiles, per garantire che i file vengano rimarcati al successivo riavvio:
# fixfiles -F onboot # reboot
34. Crea un utente con un intervallo specifico di MLS: # useradd -Z staff_u john
Utilizzando il comando useradd, associa il nuovo utente a un utente SELinux esistente (in questo caso, staff_u).
35. Per visualizzare la mappatura 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 dell'utente (se necessario): # chcon -R -l s2:c100 /home/john
38. Per visualizzare le categorie attuali: # chcat -L
39. Per modificare le categorie o 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 determinato file, contesto di ruolo e utente:
# runcon -t initrc_t -r system_r -u user_u yourcommandhere
-tcontesto file-rcontesto ruolo-ucontesto utente
41. Contenitori che funzionano con SELinux disabilitato:
- Podman:
# podman run --security-opt label=disable … - Docker:
# docker run --security-opt label=disable …
42. Se hai bisogno di fornire al contenitore accesso completo al sistema:
- Podman:
# podman run --privileged … - Docker:
# docker run --privileged …
E ora sai già la risposta. Pertanto, per favore: non farti prendere dal panico e attiva SELinux.
Link:
- by
- di Dan Walsh
- by
- by
Fonte: habr.com
