Guida rapida per sysadmin su SELinux: 42 risposte a domande importanti

La traduzione dell'articolo è stata preparata appositamente per gli studenti del corso «Amministratore Linux».

Guida rapida per sysadmin su SELinux: 42 risposte a domande importanti

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 Ethan Hunt in “Mission: Impossible”.

Di fronte a questo dilemma, alcuni amministratori di sistema decidono di prendere la pillola blu, 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 SELinux 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 rivalutazione
  • selinux=0 → il kernel non carica l'infrastruttura SELinux
  • enforcing=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 -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -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.html

26. 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 -M crea 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

  • -t contesto file
  • -r contesto ruolo
  • -u contesto 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:

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster