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".

Cheat sheet di SELinux per amministratori di sistema: 42 risposte a domande importanti

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).

3. Formato etichetta corretto user:role:type:level (opzionale).

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:

  • Rappresentazione binaria: /usr/sbin/httpd→httpd_exec_t
  • 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

15 Problema 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

16 Problema 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

18 SELinux 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

19 SELinux 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).

21 Le 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:

# yum -y install setroubleshoot setroubleshoot-server

Riavviare o riavviare auditd dopo l'installazione.

23 Utilizzare

journalctl

per visualizzare un elenco di tutti i registri associati a setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24 Utilizzare journalctl per elencare tutti i log associati a uno specifico tag SELinux. Per esempio:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

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:

  • / var / log / messages
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

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:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t contesto del file
  • -r contesto di ruolo
  • -u contesto utente

41 Contenitori in esecuzione con SELinux disabilitato:

  • Podmann: # podman run --security-opt label=disable …
  • docker: # docker run --security-opt label=disable …

42 Se è necessario fornire al contenitore l'accesso completo al sistema:

  • Podmann: # podman run --privileged …
  • docker: # docker run --privileged …

E ora conosci già la risposta. Quindi per favore: niente panico e abilita SELinux.

Links:

Fonte: habr.com

Aggiungi un commento