Fletë mashtrimi SELinux për administratorët e sistemit: 42 përgjigje për pyetje të rëndësishme

Përkthimi i artikullit u përgatit posaçërisht për studentët e kursit "Administrator Linux".

Fletë mashtrimi SELinux për administratorët e sistemit: 42 përgjigje për pyetje të rëndësishme

Këtu do të merrni përgjigje për pyetje të rëndësishme për jetën, universin dhe gjithçka në Linux me siguri të përmirësuar.

“E vërteta e rëndësishme që gjërat nuk janë gjithmonë ashtu siç duken është njohuri e zakonshme...”

- Douglas Adams, Udhëzuesi i Hitchhiker -it për Galaxy

Siguria. Rritja e besueshmërisë. Korrespondencë. Politika. Katër kalorës të Apokalipsit sysadmin. Përveç detyrave tona të përditshme - monitorimi, rezervimi, zbatimi, konfigurimi, përditësimi, etj. - ne jemi gjithashtu përgjegjës për sigurinë e sistemeve tona. Edhe ato sisteme ku ofruesi i palës së tretë rekomandon që të çaktivizojmë sigurinë e zgjeruar. Ndjehet si punë Ethan Hunt nga "Misioni: i pamundur".

Përballë kësaj dileme, disa administratorë të sistemit vendosin ta marrin pilulë blu, sepse mendojnë se nuk do ta dinë kurrë përgjigjen për pyetjen e madhe të jetës, universit dhe gjithë kësaj. Dhe siç e dimë të gjithë, kjo përgjigje është 42.

Në frymën e Udhëzuesit të Autostopit për Galaxy, këtu janë 42 përgjigje për pyetjet e rëndësishme rreth kontrollit dhe përdorimit. SELinux në sistemet tuaja.

1. SELinux është një sistem i kontrollit të aksesit të detyruar, që do të thotë se çdo proces ka një etiketë. Çdo skedar, drejtori dhe objekt sistemi ka gjithashtu etiketa. Rregullat e politikës kontrollojnë aksesin ndërmjet proceseve dhe objekteve të etiketuara. Kerneli i zbaton këto rregulla.

2. Dy konceptet më të rëndësishme janë: etiketimi — shënimet (skedarët, proceset, portet, etj.) dhe Lloji i zbatimit (që izolon proceset nga njëri-tjetri në bazë të llojeve).

3. Formati i saktë i etiketës user:role:type:level (opsionale).

4. Qëllimi i ofrimit të sigurisë në shumë nivele (Siguri me shumë nivele - MLS) është për të menaxhuar proceset (domainet) bazuar në nivelin e sigurisë së të dhënave që do të përdorin. Për shembull, një proces sekret nuk mund të lexojë të dhëna tepër sekrete.

5. Sigurimi i sigurisë me shumë kategori (Siguri me shumë kategori - MCS) mbron procese të ngjashme nga njëri-tjetri (për shembull, makinat virtuale, motorët OpenShift, sandboxet SELinux, kontejnerët, etj.).

6. Opsionet e kernelit për ndryshimin e mënyrave SELinux në nisje:

  • autorelabel=1 → bën që sistemi të ekzekutojë rietiketimin
  • selinux=0 → kerneli nuk ngarkon infrastrukturën SELinux
  • enforcing=0 → ngarkimi në modalitetin lejues

7. Nëse keni nevojë të rietiketoni të gjithë sistemin:

# touch /.autorelabel
#reboot

Nëse shënimi i sistemit përmban një numër të madh gabimesh, mund t'ju duhet të nisni në modalitetin lejues që shënimi të ketë sukses.

8. Për të kontrolluar nëse SELinux është i aktivizuar: # getenforce

9. Për të aktivizuar/çaktivizuar përkohësisht SELinux: # setenforce [1|0]

10. Kontrollimi i statusit të SELinux: # sestatus

11. Skedari i konfigurimit: /etc/selinux/config

12. Si funksionon SELinux? Këtu është një shembull i shënimit për serverin në internet Apache:

  • Paraqitja binar: /usr/sbin/httpd→httpd_exec_t
  • Drejtoria e konfigurimit: /etc/httpd→httpd_config_t
  • Drejtoria e skedarit të regjistrit: /var/log/httpd → httpd_log_t
  • Drejtoria e përmbajtjes: /var/www/html → httpd_sys_content_t
  • Nis skriptin: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • procesi: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Portet: 80/tcp, 443/tcp → httpd_t, http_port_t

Procesi po funksionon në kontekst httpd_t, mund të ndërveprojë me një objekt të etiketuar httpd_something_t.

13. Shumë komanda pranojnë një argument -Z për të parë, krijuar dhe ndryshuar kontekstin:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

Kontekstet krijohen kur skedarët krijohen bazuar në kontekstin e drejtorisë së tyre mëmë (me disa përjashtime). RPM-të mund të krijojnë kontekste si gjatë instalimit.

14. Ka katër shkaqe kryesore të gabimeve të SELinux, të cilat përshkruhen më në detaje në pikat 15-21 më poshtë:

  • Çështjet e etiketimit
  • Për shkak të diçkaje që SELinux duhet të dijë
  • Gabim në politikën/aplikacionin SELinux
  • Informacioni juaj mund të komprometohet

15. Problemi i etiketimit: nëse skedarët tuaj janë në /srv/myweb janë shënuar gabimisht, qasja mund të refuzohet. Këtu janë disa mënyra për ta rregulluar këtë:

  • Nëse e dini etiketën:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Nëse dini një skedar me shenja ekuivalente:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Rivendosja e kontekstit (për të dyja rastet):
    # restorecon -vR /srv/myweb

16. Problemi i etiketimit: nëse e zhvendosni skedarin në vend që ta kopjoni, skedari do të ruajë kontekstin e tij origjinal. Për të rregulluar këtë problem:

  • Ndryshoni komandën e kontekstit me etiketën:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Ndryshoni komandën e kontekstit me etiketën e lidhjes:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Rivendos kontekstin (për të dyja rastet): # restorecon -vR /var/www/html/

17. Nëse SELinux duhet të diniqë HTTPD po dëgjon në portin 8585, tregoni SELinux:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux duhet të dini Vlerat Boolean që lejojnë që pjesët e politikës SELinux të ndryshohen në kohën e ekzekutimit pa dijeninë që politika SELinux të mbishkruhet. Për shembull, nëse dëshironi që httpd të dërgojë email, shkruani: # setsebool -P httpd_can_sendmail 1

19. SELinux duhet të dini vlerat logjike për aktivizimin/çaktivizimin e cilësimeve të SELinux:

  • Për të parë të gjitha vlerat boolean: # getsebool -a
  • Për të parë një përshkrim të secilit: # semanage boolean -l
  • Për të vendosur një vlerë boolean: # setsebool [_boolean_] [1|0]
  • Për një instalim të përhershëm, shtoni -P. Për shembull: # setsebool httpd_enable_ftp_server 1 -P

20. Politikat/aplikacionet SELinux mund të përmbajnë gabime, duke përfshirë:

  • Shtigje të pazakonta kodi
  • Konfigurimet
  • Ridrejtimi i stdout
  • Rrjedhjet e përshkruesit të skedarëve
  • Memorie e ekzekutueshme
  • Bibliotekat e ndërtuara keq

Biletat e hapura (mos dorëzoni një raport në Bugzilla; Bugzilla nuk ka SLA).

21. Informacioni juaj mund të komprometohetnëse keni domene të kufizuara duke u përpjekur të:

  • Ngarko modulet e kernelit
  • Çaktivizo modalitetin e imponuar SELinux
  • Shkruani në etc_t/shadow_t
  • Ndryshoni rregullat e iptables

22. Mjetet SELinux për zhvillimin e moduleve të politikave:

# yum -y install setroubleshoot setroubleshoot-server

Rinisni ose rinisni auditd pas instalimit.

23. përdorim

journalctl

për të shfaqur një listë të të gjithë regjistrave të lidhur me setroubleshoot:

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

24. përdorim journalctl për të listuar të gjithë regjistrat e lidhur me një etiketë specifike SELinux. Për shembull:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Nëse ndodh një gabim SELinux, përdorni regjistrin setroubleshoot duke ofruar disa zgjidhje të mundshme.
Për shembull, nga 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. Regjistrimi: SELinux regjistron informacione në shumë vende:

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

27. Regjistrimi: kërkimi i gabimeve të SELinux në regjistrin e auditimit:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. Për të gjetur mesazhet e SELinux Access Vector Cache (AVC) për një shërbim specifik:

# ausearch -m avc -c httpd

29. Shërbim audit2allow mbledh informacion nga regjistrat e operacioneve të ndaluara dhe më pas gjeneron rregullat e politikave të lejeve të SELinux. Për shembull:

  • Për të krijuar një përshkrim të lexueshëm nga njeriu se pse është refuzuar qasja: # audit2allow -w -a
  • Për të parë një rregull të zbatimit të tipit që lejon aksesin e mohuar: # audit2allow -a
  • Për të krijuar një modul të personalizuar: # audit2allow -a -M mypolicy
  • Opsioni -M krijon një skedar të zbatimit të tipit (.te) me emrin e specifikuar dhe përpilon rregullin në një paketë politikash (.pp): mypolicy.pp mypolicy.te
  • Për të instaluar një modul të personalizuar: # semodule -i mypolicy.pp

30. Për të konfiguruar një proces të veçantë (domain) për të punuar në modalitetin lejues: # semanage permissive -a httpd_t

31. Nëse nuk dëshironi që domeni të jetë më lejues: # semanage permissive -d httpd_t

32. Për të çaktivizuar të gjitha domenet lejuese: # semodule -d permissivedomains

33. Aktivizimi i politikës MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Sigurohuni që SELinux po funksionon në modalitetin lejues: # setenforce 0
Përdorni një skenar fixfilespër të siguruar që skedarët të rietiketohen në rindezjen tjetër:

# fixfiles -F onboot # reboot

34. Krijo një përdorues me një gamë specifike MLS: # useradd -Z staff_u john

Duke përdorur komandën useradd, hartojeni përdoruesin e ri me një përdorues ekzistues SELinux (në këtë rast, staff_u).

35. Për të parë hartën midis përdoruesve të SELinux dhe Linux: # semanage login -l

36. Përcaktoni një gamë specifike për përdoruesin: # semanage login --modify --range s2:c100 john

37. Për të korrigjuar etiketën e drejtorisë kryesore të përdoruesit (nëse është e nevojshme): # chcon -R -l s2:c100 /home/john

38. Për të parë kategoritë aktuale: # chcat -L

39. Për të ndryshuar kategoritë ose për të filluar krijimin tuajin, modifikoni skedarin si më poshtë:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. Për të ekzekutuar një komandë ose skript në një skedar, rol dhe kontekst specifik të përdoruesit:

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

  • -t konteksti i skedarit
  • -r konteksti i rolit
  • -u konteksti i përdoruesit

41. Kontejnerët që funksionojnë me SELinux të çaktivizuar:

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

42. Nëse duhet t'i jepni kontejnerit akses të plotë në sistem:

  • Podman: # podman run --privileged …
  • Doker: # docker run --privileged …

Dhe tani ju tashmë e dini përgjigjen. Prandaj, ju lutemi: mos u frikësoni dhe aktivizoni SELinux.

referencat:

Burimi: www.habr.com

Shto një koment