Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 28349|Risposta: 4

[Linux] Una comprensione approfondita di cosa sia selinux in Linux

[Copiato link]
Pubblicato su 05/07/2019 11:25:50 | | | |
1. Preambolo

Security-Enhanced Linux (SELinux) è un modulo del kernel Linux e un sottosistema di sicurezza di Linux.

SELinux è stato sviluppato principalmente dalla NSA. I kernel Linux 2.6 e superiori integrano già moduli SELinux.

SELinux è molto complesso e ha molte cose concettuali difficili da imparare. Molti amministratori di sistema Linux hanno disattivato SELinux perché lo trovano problematico.

Se riesci a padroneggiare SELinux e usarlo correttamente, penso che l'intero sistema possa praticamente arrivare al punto di essere "indistruttibile" (ricorda sempre che non c'è una sicurezza assoluta).

Padroneggiare i concetti base di SELinux così come i metodi di configurazione semplici è un corso obbligatorio per ogni amministratore di sistema Linux.

Questo articolo si basa su CentOS 7.4.1708.

Questo articolo è puramente una condivisione e uno scambio di esperienze di apprendimento personale, gli errori sono inevitabili, solo per riferimento! Se trovi un errore, per favore fatelo, grazie mille!

2. Il ruolo di SELinux e il meccanismo di gestione dei permessi

2.1 Il ruolo di SELinux

La funzione principale di SELinux è minimizzare le risorse a cui i processi di servizio nel sistema possono accedere (il principio del minimo privilegio).

Immagina che se un servizio di rete che gira come root ha una vulnerabilità 0day, gli hacker possano sfruttare questa vulnerabilità per fare ciò che vogliono sul tuo server come root. Non fa paura?

SELinux è qui per risolvere questo problema.

2.2 DAC

In un sistema operativo che non utilizza SELinux, il fattore che determina se una risorsa può essere accessibile è se una risorsa possiede i permessi dell'utente corrispondente (leggere, scrivere, eseguire).

Finché il processo che accede a questa risorsa soddisfa le condizioni sopra indicate, può essere accessibile.

Il problema più fatale è che gli utenti root non sono soggetti a alcuna regolamentazione e qualsiasi risorsa sul sistema può essere accessibile senza restrizioni.

Il principale organismo di questo meccanismo di gestione dei permessi è l'utente, noto anche come controllo di accesso autonomo (DAC).

2.3 MAC

In un sistema operativo che utilizza SELinux, i fattori che determinano se una risorsa può essere accessibile non sono solo i fattori sopra indicati, ma anche se ogni tipo di processo ha accesso a un certo tipo di risorsa.

In questo modo, anche se un processo è in esecuzione come root, è necessario determinare il tipo di processo e i tipi di risorse che possono essere accessibili prima di decidere se consentire l'accesso a una risorsa. Lo spazio attivo del processo può anche essere compresso al minimo.

Anche un processo di servizio che funziona come root generalmente ha accesso solo alle risorse di cui ha bisogno. Anche se un programma è vulnerabile, l'ampiezza dell'impatto è limitata alle risorse a cui è consentito accedere. La sicurezza è notevolmente aumentata.

Il corpo principale di questo meccanismo di gestione dei permessi è il processo, noto anche come controllo di accesso obbligatorio (MAC).

MAC si suddivide in due modi: uno è chiamato modalità Category Security (MCS), l'altro è chiamato modalità Multi-Level Security (MLS).

Le seguenti azioni sono in modalità MCS.

2.4 Confronto tra DAC e MAC

Ecco un'immagine per illustrare.



Come puoi vedere, in modalità DAC, finché la directory corrispondente ha i permessi dell'utente corrispondente, è accessibile. In modalità MAC, è anche limitato dalla gamma di directory a cui i processi possono accedere.

3. Concetti di base di SELinux

3.1 Soggetto

Può essere completamente equiparato a un processo.

Nota: Per facilità di comprensione, salvo diversa specificazione, il processo è considerato come il corpo principale di seguito.

3.2 Obiettivo

Risorse a cui il principale ha accesso. Possono essere file, directory, porte, dispositivi, ecc.

Nota: Per facilità di comprensione, salvo diversa specificazione, i seguenti documenti o directory sono considerati oggetti.

3.3 Politica e Regola

Di solito ci sono molti file e processi nel sistema e, per risparmiare tempo e sovraccarichi, di solito regliamo selettivamente solo alcuni processi.

E quali processi debbano essere regolamentati e come controllarli è determinato dalla politica.

Ci sono più regole in una polizza. Alcune regole possono essere abilitate o disabilitate secondo necessità (d'ora in poi denominate regole booleane).

Le regole sono modulari ed estensionali. Quando installa una nuova applicazione, l'applicazione può aggiungere regole aggiungendo nuovi moduli. Gli utenti possono anche aggiungere o sottrarre manualmente le regole.

Nel sistema CentOS 7, ci sono tre insiemi di policy, ovvero:

1. mirato: Controlla la maggior parte dei processi di servizio di rete. Questa è la politica utilizzata dal sistema di default (tutte quelle qui sotto sono utilizzate).

2. Minimo: In base al target, sono regolamentati solo alcuni processi di servizio di rete. Generalmente no.

3. MLS: Protezione di sicurezza multilivello. Regola tutti i processi. Questa è la politica più severa e la configurazione è molto difficile. Generalmente, non viene utilizzata a meno che non ci siano requisiti di sicurezza estremamente elevati.

Le policy possono essere impostate in /etc/selinux/config.

3.4 Contesto di sicurezza

Il contesto della sicurezza è al centro di SELinux.

Contesto di sicurezza lo divido in "contesto di sicurezza dei processi" e "contesto di sicurezza documentale".

Un Contesto di Sicurezza del Processo corrisponde tipicamente a più Contesti di Sicurezza dei Documenti.

Solo quando il contesto di sicurezza corrisponde a entrambi può un processo accedere al file. La loro corrispondenza è determinata dalle regole della polizza.

Il contesto di sicurezza dei file è determinato da dove il file è stato creato e dal processo che lo ha creato. E il sistema ha un insieme di valori predefiniti, e gli utenti possono anche impostare i valori predefiniti.

È importante notare che semplicemente spostare i file non cambia il contesto di sicurezza dei tuoi file.

La struttura e il significato del contesto di sicurezza

Il contesto di sicurezza ha quattro campi, separati da due punti. Forma come: system_u:object_r:admin_home_t:s0.


3.5 Modalità di Funzionamento SELinux

SELinux ha tre modalità di funzionamento, ovvero:

1. applicazione: modalità forzata. Le violazioni delle regole SELinux verranno bloccate e registrate nei log.

2. Permissivo: modalità tolleranza. Le violazioni delle regole SELinux sono registrate solo nei log. Generalmente per il debug.

3. disabilitato: Disattiva SELinux.

La modalità di funzionamento SELinux può essere impostata in /etc/selinux/config.

Se vuoi passare da disabile a applicazione o permissivo, dovrai riavviare il sistema. E viceversa.

Le modalità di applicazione e permissive possono essere rapidamente commutate con il comando Setenforce 1|0.

È importante notare che se il sistema è stato in esecuzione con SELinux disattivato per un po', il primo riavvio dopo l'accensione di SELinux può essere più lento. Perché il sistema deve creare un contesto sicuro per i file sul disco (ho detto che avevo riavviato per circa 10 minuti e pensavo fosse morto...... )。

I log SELinux devono essere registrati con l'aiuto di auditd.service, per favore non disabilitarlo.

3.6 Flusso di lavoro SELinux

Ecco una citazione da una foto, senza molte spiegazioni.



Nota: Il testo di sicurezza sopra si riferisce al contesto di sicurezza.

4. Operazioni di base di SELinux

4.1 Interroga il contesto di sicurezza di un file o di una directory

Uso di base dei comandi

ls -z

Esempi di utilizzo

Consulta il contesto di sicurezza di /etc/hosts.

ls -Z /ecc/hosts

Risultati dell'esecuzione

-r-r--r--. root root system_u:object_r:net_conf_t:s0 /etc/hosts

4.2 Interroga il contesto di sicurezza del processo

Uso di base dei comandi

ps auxZ | grep -v grep | grep

Esempi di utilizzo

Interroga il contesto di sicurezza dei processi correlati a Nginx.

ps auxZ | grep -v grep | Grep Nginx

Risultati dell'esecuzione

system_u:system_r:httpd_t:s0 root 7997 0.0 0.0 122784 2156 ? Ss 14:31 0:00 nginx: master process /usr/sbin/nginx

system_u:system_r:httpd_t:s0 nginx 7998 0.0 0.0 125332 7560 ? S 14:31 0:00 nginx: processo lavoratore

4.3 Modificare manualmente il contesto di sicurezza di un file o di una directory

Uso di base dei comandi

CHCON [...]

Funzione opzione -u Modifica il campo utente del contesto di sicurezza -r Modifica il campo ruolo del contesto di sicurezza -t Modifica il campo tipo del contesto di sicurezza -l Modifica il campo livello del contesto di sicurezza --riferimento Modifica il contesto di sicurezza coerente con il file o la directory specificato -R Operazione ricorsiva -h Modifica il contesto di sicurezza del soft link (modifica il file corrispondente del soft link senza questa opzione)

Esempi di utilizzo

Modifica il contesto di sicurezza del test in aaa_u:bbb_r:ccc_t:s0.

test chcon -u aaa_u -r bbb_r -t ccc_t

4.4 Ripristinare il contesto di sicurezza di un file o di una directory al suo valore predefinito

Uso di base dei comandi

RestoreCon [Opzioni] [...]

Funzione Opzione - Procedura di Operazione di Stampa V - Operazione Ricorsiva R

Esempi di utilizzo

Dopo aver aggiunto alcuni file web alla directory del tuo server Nginx, imposta il contesto di sicurezza corretto per questi nuovi file.

restorecon -R /usr/share/nginx/html/

4.5 Consulta le regole booleane e il loro stato nel sistema

Uso di base dei comandi

getsebool -a

Poiché il comando interroga tutte le regole o solo una, di solito interroga prima tutte le regole e poi filtra con grep.

Esempi di utilizzo

Consulta le regole booleane relative a httpd.

getsebool -a | grep httpd

Risultati dell'esecuzione

httpd_anon_write --> via

httpd_builtin_scripting -->

httpd_can_check_spam --> fuori

httpd_can_connect_ftp --> fuori

#以下省略

4.6 Cambio di regola booleana

Uso di base dei comandi

setsebool [opzione]

Funzione opzione -P riavvio è ancora in vigore

Esempi di utilizzo

Attiva httpd_anon_write regole.

setsebool -P httpd_anon_write on

4.7 Aggiungere un contesto di sicurezza predefinito per una directory

Uso di base dei comandi

semanage fcontext -a -t "(/.*)?"

Nota: Il contesto di sicurezza predefinito di una directory o di un file può essere visualizzato utilizzando il comando semanage fcontext -l insieme al filtraggio grep.

Esempi di utilizzo

Dopo aver aggiunto una nuova directory del sito /usr/share/nginx/html2 su Nginx, devi impostare lo stesso contesto di sicurezza predefinito della directory originale.

semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html2(/.*)?"

4.8 Aggiungere porte consentite da alcuni tipi di processi

Uso di base dei comandi

Porta SEMANAGE -A -T -P

Nota: I numeri di porta consentiti per vari tipi di servizio possono essere visualizzati utilizzando il comando semanage port -l con filtraggio grep.

Esempi di utilizzo

Per Nginx, devi usare la porta 10080 per i servizi HTTP.

Porta SEMANAGE -A -T http_port_t -P TCP 10080

5. Analisi e risoluzione degli errori SELinux

5.1 Comprendere i registri SELinux

Quando SELinux è abilitato, alcuni comportamenti normali di molti servizi sono considerati una violazione (sia nel titolo che negli errori sottostanti).

Al momento, dobbiamo utilizzare i log delle violazioni SELinux per analizzarle e risolverle.

I log delle violazioni SELinux sono salvati in /var/log/audit/audit.log.

/var/log/audit/audit.log 的内容大概是这样的。

type=LOGIN msg=audit(1507898701.391:515): pid=8523 uid=0 subj=system_u:system_r:crond_t:s0-s0:c0.c1023 old-auid=4294967295 auid=0 tty=(nessuno) old-ses=4294967295 ses=25 res=1

Tipo=USER_START MSG=Audit(1507898701.421:516): PID=8523 UID=0 AUID=0 SES=25 Subj=system_u:system_r:crond_t:S0-S0:C0.C1023 MSG='op=PAM:session_open Grantors=pam_loginuid,pam_ keyinit,pam_limits,pam_systemd acct="root" exe="/usr/sbin/crond" hostname=? addr=? terminal=cron res=successo'

...

Il file è molto contenuto, ed è mescolato con molti log di audit di sistema che non hanno nulla a che fare con errori SELinux. Useremo l'utilità sealert per aiutare con l'analisi (se il prompt non trova il comando, installa il pacchetto setroubleshoot).

5.2 Analizza gli errori con sealert

Uso di base dei comandi

SeAlert -A /var/log/audit/audit.log

Dopo aver eseguito il comando, il sistema deve prendersi del tempo per analizzare le violazioni nei log e fornire un rapporto di analisi.




Precedente:Visualizza CentOS7 e disattiva il firewall
Prossimo:Padroneggiare l'accesso all'interfaccia API Java di HDFS
 Padrone di casa| Pubblicato su 22/07/2021 17:17:58 |
Spegni SELinux

getenforce #查看是否是 disabilitato, altrimenti esegui il comando qui sotto
vim /etc/selinux/config
Cambia SELINUX= applicazione in SELINUX=disabilitato, salva ed esci
 Padrone di casa| Pubblicato su 15/10/2021 13:21:42 |
 Padrone di casa| Pubblicato su 15/10/2021 14:22:40 |
Disabilita lo swap di partizioni

 Padrone di casa| Pubblicato su 03/09/2024 14:16:43 |
Chiudi SELINUX





Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com