Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 28349|Răspunde: 4

[Linux] O înțelegere temeinică a ceea ce este selinux în Linux

[Copiază linkul]
Postat pe 05.07.2019 11:25:50 | | | |
1. Preambul

Linux cu securitate îmbunătățită (SELinux) este un modul de kernel Linux și un subsistem de securitate al Linux.

SELinux a fost dezvoltat în principal de NSA. Kernel-urile Linux 2.6 și mai mari integrează deja module SELinux.

SELinux este foarte complex și are multe aspecte conceptuale greu de învățat. Mulți administratori de sistem Linux au dezactivat SELinux pentru că îl consideră problematic.

Dacă poți stăpâni SELinux și să-l folosești corect, cred că întregul sistem poate ajunge practic la punctul de a fi "indestructibil" (amintește-ți mereu că nu există o securitate absolută).

Stăpânirea conceptelor de bază ale SELinux, precum și a metodelor simple de configurare, este un curs obligatoriu pentru orice administrator de sistem Linux.

Acest articol se bazează pe CentOS 7.4.1708.

Acest articol este pur și simplu o experiență personală de împărtășire și schimb de experiențe de învățare, greșelile sunt inevitabile, doar pentru referință! Dacă găsiți o greșeală, vă rog să o menționați, vă mulțumesc foarte mult!

2. Rolul SELinux și mecanismul de gestionare a permisiunilor

2.1 Rolul lui SELinux

Funcția principală a SELinux este de a minimiza resursele care pot fi accesate de procesele de serviciu din sistem (principiul privilegiului minim).

Imaginează-ți că dacă un serviciu de rețea care rulează ca root are o vulnerabilitate 0day, hackerii pot exploata această vulnerabilitate pentru a face orice doresc pe serverul tău ca root. Nu-i așa că e înfricoșător?

SELinux este aici să rezolve această problemă.

2.2 DAC

Într-un sistem de operare care nu folosește SELinux, factorul care determină dacă o resursă poate fi accesată este dacă o resursă are permisiunile utilizatorului corespunzător (citire, scriere, execuție).

Atâta timp cât procesul de accesare a acestei resurse îndeplinește condițiile de mai sus, poate fi accesat.

Cea mai fatală problemă este că utilizatorii root nu sunt supuși niciunei reglementări, iar orice resurse din sistem pot fi accesate fără restricții.

Corpul principal al acestui mecanism de gestionare a permisiunilor este utilizatorul, cunoscut și sub denumirea de control autonom al accesului (DAC).

2.3 MAC

Într-un sistem de operare care folosește SELinux, factorii care determină dacă o resursă poate fi accesată nu sunt doar cei de mai sus, ci și dacă fiecare tip de proces are acces la un anumit tip de resursă.

Astfel, chiar dacă un proces rulează ca root, este necesar să se determine tipul de proces și tipurile de resurse care pot fi accesate înainte de a decide dacă se permite accesul la o resursă. Spațiul activ al procesului poate fi, de asemenea, comprimat la minimum.

Chiar și un proces de serviciu care rulează ca root are, în general, acces doar la resursele de care are nevoie. Chiar dacă un program este vulnerabil, amploarea impactului este limitată la resursele la care are acces. Securitatea este mult sporită.

Corpul principal al acestui mecanism de gestionare a permisiunilor este procesul, cunoscut și sub denumirea de control obligatoriu al accesului (MAC).

MAC este subdivizat în două moduri: unul se numește modul Category Security (MCS), iar celălalt se numește modul Multi-Level Security (MLS).

Următoarele acțiuni sunt în modul MCS.

2.4 Comparație între DAC și MAC

Iată o imagine pentru ilustrație.



După cum vezi, în modul DAC, atâta timp cât directorul corespunzător are permisiunile utilizatorului corespunzător, acesta poate fi accesat. În modul MAC, este limitat și de gama de directoare la care procesele au acces.

3. Concepte de bază ale SELinux

3.1 Subiect

Poate fi complet echivalat cu un proces.

Notă: Pentru ușurința înțelegerii, cu excepția cazului în care se specifică altfel, procesul este considerat corpul principal de mai jos.

3.2 Obiectiv

Resurse accesate de director. Pot fi fișiere, directoare, porturi, dispozitive etc.

Notă: Pentru ușurința înțelegerii, cu excepția cazului în care se specifică altfel, următoarele documente sau directoare sunt considerate obiecte.

3.3 Politică și Regulă

De obicei, există un număr mare de fișiere și procese în sistem, iar pentru a economisi timp și eforturi, de obicei reglementăm selectiv doar anumite procese.

Și care procese trebuie reglementate și cum să le controleze sunt determinate de politici.

Există mai multe reguli într-o poliță. Unele reguli pot fi activate sau dezactivate după nevoie (denumite în continuare reguli booleene).

Regulile sunt modulare și extensibile. La instalarea unei aplicații noi, aplicația poate adăuga reguli prin adăugarea de module noi. Utilizatorii pot, de asemenea, să adauge sau să scadă manual reguli.

În sistemul CentOS 7, există trei seturi de politici, și anume:

1. țintit: Controlează majoritatea proceselor de servicii de rețea. Aceasta este politica folosită implicit de sistem (toate cele de mai jos sunt folosite).

2. Minim: Pe baza țintei, sunt reglementate doar anumite procese de servicii de rețea. În general, nu.

3. MLS: Protecție de securitate pe mai multe niveluri. Reglementează toate procesele. Aceasta este cea mai strictă politică, iar configurarea este foarte dificilă. În general, nu este folosit decât dacă există cerințe extrem de ridicate de securitate.

Politicile pot fi setate în /etc/selinux/config.

3.4 Context de securitate

Contextul securității este în centrul SELinux.

Contextul de securitate îl împart în "context de securitate a proceselor" și "context de securitate a documentelor".

Un Context de Securitate a Proceselor corespunde de obicei mai multor Contexte de Securitate a Documentelor.

Doar atunci când contextul de securitate al celor două corespunde poate un proces accesa fișierul. Corespondența lor este determinată de regulile din poliță.

Contextul de securitate al fișierului este determinat de locul unde a fost creat fișierul și de procesul care l-a creat. Iar sistemul are un set de valori implicite, iar utilizatorii pot seta și valorile implicite.

Este important de menționat că simpla mutare a fișierelor nu schimbă contextul de securitate al fișierelor tale.

Structura și semnificația contextului de securitate

Contextul de securitate are patru câmpuri, separate prin două puncte. Formă precum: system_u:object_r:admin_home_t:s0.


3.5 Modul de Funcționare SELinux

SELinux are trei moduri de funcționare, și anume:

1. aplicarea: Modul impus. Încălcările regulilor SELinux vor fi blocate și înregistrate în jurnale.

2. Permisiv: Modul toleranță. Încălcările regulilor SELinux sunt înregistrate doar în jurnale. De obicei pentru depanare.

3. dezactivat: Dezactivează SELinux.

Modul de lucru SELinux poate fi setat în /etc/selinux/config.

Dacă vrei să treci de la "cu dizabilități" la "aplicat" sau permisiv, va trebui să repornești sistemul. Și invers.

Modurile de impunere și permisivă pot fi schimbate rapid cu comanda Setenforce 1|0.

Este important de menționat că, dacă sistemul a rulat cu SELinux oprit o perioadă, prima repornire după pornirea SELinux poate fi mai lentă. Pentru că sistemul trebuie să creeze un context sigur pentru fișierele de pe disc (am spus că am repornit cam 10 minute și am crezut că e mort...... )。

Jurnalele SELinux trebuie înregistrate cu ajutorul auditd.service, vă rugăm să nu le dezactivați.

3.6 Fluxul de lucru SELinux

Iată un citat dintr-o fotografie, fără prea multe explicații.



Notă: Textul de securitate de mai sus se referă la contextul de securitate.

4. Operațiuni de bază SELinux

4.1 Interogarea contextului de securitate al unui fișier sau director

Utilizare de bază prin comandă

ls -Z

Exemple de utilizare

Interoghează contextul de securitate al /etc/hosts.

ls -Z /etc/hosts

Rezultatele execuției

-r-r--r--. rădăcina rădăcină system_u:object_r:net_conf_t:s0 /etc/hosts

4.2 Interogare contextul de securitate al procesului

Utilizare de bază prin comandă

ps auxZ | grep -v grep | grep

Exemple de utilizare

Interogați contextul de securitate al proceselor legate de Nginx.

ps auxZ | grep -v grep | Grep Nginx

Rezultatele execuției

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: procesul lucrătorului

4.3 Modificarea manuală a contextului de securitate al unui fișier sau director

Utilizare de bază prin comandă

chcon [...]

Funcția opțiune -u Modifică câmpul utilizator al contextului de securitate -r Modifică câmpul de rol al contextului de securitate -t Modifică câmpul tip al contextului de securitate -l Modifică câmpul de nivel al contextului de securitate --reference Modifică contextul de securitate consistent cu fișierul sau directorul specificat -R Operație recursivă -h Modifică contextul de securitate al legăturii soft (modifică fișierul corespunzător al legăturii soft fără această opțiune)

Exemple de utilizare

Modifică contextul de securitate al testului la aaa_u:bbb_r:ccc_t:s0.

CHCON -U aaa_u -R bbb_r -T ccc_t Test

4.4 Revenirea contextului de securitate al unui fișier sau director la valoarea sa implicită

Utilizare de bază prin comandă

RestoreCon [opțiuni] [...]

Funcție de opțiune - Procedura operațiunii de imprimare V - Operație recursivă R

Exemple de utilizare

După ce adaugi câteva fișiere web în directorul serverului tău Nginx, setează contextul de securitate corect pentru aceste fișiere noi.

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

4.5 Interoghează regulile booleene și starea lor în sistem

Utilizare de bază prin comandă

getsebool -a

Deoarece comanda interogează fie toate regulile, fie doar una, de obicei interoghează toate regulile mai întâi și apoi filtrează cu grep.

Exemple de utilizare

Interoghează regulile booleene legate de httpd.

getsebool -a | grep httpd

Rezultatele execuției

httpd_anon_write -->

httpd_builtin_scripting --> mai departe

httpd_can_check_spam -->

httpd_can_connect_ftp -->

#以下省略

4.6 Comutarea unei reguli booleene

Utilizare de bază prin comandă

setsebool [opțiune]

Funcția de opțiune -P restart încă are efect

Exemple de utilizare

Activează regulile httpd_anon_write.

setsebool - P httpd_anon_write on

4.7 Adaugă un context de securitate implicit pentru un director

Utilizare de bază prin comandă

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

Notă: Contextul de securitate implicit al unui director sau fișier poate fi vizualizat folosind comanda semanage fcontext -l împreună cu filtrarea grep.

Exemple de utilizare

După ce adaugi un nou director al site-ului /usr/share/nginx/html2 în Nginx, trebuie să setezi același context de securitate implicit ca și directorul original.

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

4.8 Adaugă porturi permise de anumite tipuri de procese

Utilizare de bază prin comandă

portul semanage -a -t -p

Notă: Numerele de port permise pentru diverse tipuri de servicii pot fi vizualizate folosind comanda semanage port -l cu filtrare grep.

Exemple de utilizare

Pentru Nginx, trebuie să folosești portul 10080 pentru serviciile HTTP.

portul SEMANAGE -A -T http_port_t -P TCP 10080

5. Analiza și rezolvarea erorilor SELinux

5.1 Înțelegerea jurnalelor SELinux

Când SELinux este activat, un comportament normal al multor servicii este considerat o încălcare (atât în titlu, cât și în erorile de mai jos).

În acest moment, trebuie să folosim jurnalele de încălcări SELinux pentru a le analiza și rezolva.

Jurnalele de încălcări SELinux sunt salvate în /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=(none) old-ses=4294967295 ses=25 res=1

Type=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=succes'

...

Fișierul conține mult conținut și este amestecat cu multe jurnale de audit de sistem care nu au nicio legătură cu erorile SELinux. Vom folosi utilitarul sealert pentru a ajuta la analiză (dacă promptul nu găsește comanda, instalează pachetul setroubleshoot).

5.2 Analizează erorile cu sealert

Utilizare de bază prin comandă

sealert -a /var/log/audit/audit.log

După executarea comenzii, sistemul trebuie să ia timp să analizeze încălcările din jurnale și să furnizeze un raport de analiză.




Precedent:CentOS7 Vizualizează și dezactivează firewall-ul
Următor:Stăpânește accesul la interfața API Java din HDFS
 Proprietarul| Postat pe 22.07.2021 17:17:58 |
Oprește SELinux

getenforce #查看是否是 dezactivat, dacă nu, execută comanda de mai jos
vim /etc/selinux/config
Schimbă SELINUX=aplicarea în SELINUX=dezactivat, salvează și ieși
 Proprietarul| Postat pe 15.10.2021 13:21:42 |
 Proprietarul| Postat pe 15.10.2021 14:22:40 |
Dezactivează swap partition swap

 Proprietarul| Postat pe 03.09.2024 14:16:43 |
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com