SELinux cheat sheet per amministratori di sistema: 42 risposte à dumande impurtanti

A traduzzione di l'articulu hè stata preparata apposta per i studienti di u corsu "Amministratore Linux".

SELinux cheat sheet per amministratori di sistema: 42 risposte à dumande impurtanti

Quì riceverete risposte à dumande impurtanti nantu à a vita, l'universu è tuttu in Linux cù una sicurità mejorata.

"A verità impurtante chì e cose ùn sò micca sempre ciò chì parenu hè a cunniscenza cumuni ..."

-Douglas Adams, A Guida di l'Autostoppista à a Galassia

Sicurezza. Aumentu affidabilità. Corrispondenza. Pulitica. Four Horsemen of the Apocalypse sysadmin. In più di i nostri compiti di ogni ghjornu - monitoraghju, salvezza, implementazione, cunfigurazione, aghjurnamentu, etc. - simu ancu rispunsevuli di a sicurità di i nostri sistemi. Ancu quelli sistemi induve u fornitore di terzu ricumanda di disattivà a sicurità rinfurzata. Sente u travagliu Ethan Hunt da "Mission: Impossible".

Di fronte à stu dilema, certi amministratori di u sistema decide di piglià pillola blu, perchè pensanu chì ùn sanu mai a risposta à a grande quistione di a vita, l'universu è tuttu ciò. È cum'è tutti sapemu, sta risposta hè 42.

In u spiritu di The Hitchhiker's Guide to the Galaxy, eccu 42 risposte à dumande impurtanti nantu à u cuntrollu è l'usu. SELinux nantu à i vostri sistemi.

1. SELinux hè un sistema di cuntrollu di accessu furzatu, chì significa chì ogni prucessu hà una etichetta. Ogni schedariu, repertoriu è ughjettu di u sistema hà ancu etichette. E regule di pulitica cuntrollanu l'accessu trà i prucessi è l'uggetti tagged. U kernel impone sti reguli.

2. I dui cuncetti più impurtanti sò: Etichettatura - marcature (fichi, prucessi, porti, etc.) è Tipu di rinfurzà (chì isola i prucessi l'una di l'altru basatu nantu à i tipi).

3. Formatu di l'etichetta curretta user:role:type:level (opcional).

4. U scopu di furnisce una sicurità multi-livellu (Sicurezza Multi-Level - MLS) hè di gestisce i prucessi (duminii) basatu annantu à u livellu di sicurità di e dati chì anu da utilizà. Per esempiu, un prucessu sicretu ùn pò micca leghje dati top secret.

5. Assicurendu a sicurità multi-categoria (Sicurezza Multi-Categoria - MCS) prutege i prucessi simili l'una di l'altru (per esempiu, macchine virtuali, mutori OpenShift, sandbox SELinux, cuntenituri, etc.).

6. Opzioni di u kernel per cambià i modi SELinux à u boot:

  • autorelabel=1 → provoca u sistema per eseguisce rietichettatura
  • selinux=0 → u kernel ùn carica micca l'infrastruttura SELinux
  • enforcing=0 → carica in modu permissive

7. Sè avete bisognu di rinfurzà tuttu u sistema:

# touch /.autorelabel
#reboot

Se a marcatura di u sistema cuntene un gran numaru d'errori, pudete avè bisognu di boot in modu permissivu per rimarcà per successu.

8. Per verificà se SELinux hè attivatu: # getenforce

9. Per attivà / disattivà temporaneamente SELinux: # setenforce [1|0]

10. Verificate u statutu SELinux: # sestatus

11. File di cunfigurazione: /etc/selinux/config

12. Cumu funziona SELinux? Eccu un esempiu di marcatura per u servitore web Apache:

  • Rappresentazione binaria: /usr/sbin/httpd→httpd_exec_t
  • Directory di cunfigurazione: /etc/httpd→httpd_config_t
  • U cartulare di u schedariu di logu: /var/log/httpd → httpd_log_t
  • Directory di cuntenutu: /var/www/html → httpd_sys_content_t
  • Script di lanciamentu: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • Proċessu: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • Porti: 80/tcp, 443/tcp → httpd_t, http_port_t

Prucessu in esecuzione in u cuntestu httpd_t, pò interagisce cù un oggettu marcatu httpd_something_t.

13. Parechji cumandamenti accettanu un argumentu -Z per vede, creà è cambià u cuntestu:

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

I cuntesti sò stabiliti quandu i schedari sò creati in basa di u cuntestu di u so repertoriu parenti (cù alcune eccezzioni). L'RPM ponu stabilisce cuntesti cum'è durante a stallazione.

14. Ci sò quattru causi principali di l'errore SELinux, chì sò descritti in più detail in punti 15-21 quì sottu:

  • Problemi di etichettatura
  • A causa di qualcosa chì SELinux hà bisognu di sapè
  • Errore in a pulitica / applicazione SELinux
  • A vostra infurmazione pò esse cumprumessa

15. Prublemu di etichettatura: se i vostri schedari sò in /srv/myweb sò marcati incorrectamente, l'accessu pò esse denegatu. Eccu alcuni modi per riparà questu:

  • Se cunnosci l'etichetta:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • Se cunnosci un schedariu cù marcature equivalenti:
    # semanage fcontext -a -e /srv/myweb /var/www
  • Ripristina u cuntestu (per i dui casi):
    # restorecon -vR /srv/myweb

16. Problema di etichettatura: se move u schedariu invece di cupià, u schedariu mantene u so cuntestu originale. Per risolve stu prublema:

  • Cambia u cumandamentu di u cuntestu cù l'etichetta:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • Cambia u cumandamentu di u cuntestu cù l'etichetta di ligame:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • Ripristina u cuntestu (per i dui casi): # restorecon -vR /var/www/html/

17. se SELinux avete bisognu di sapèchì HTTPD sta à sente nantu à u portu 8585, dì à SELinux:

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

18. SELinux avete bisognu di sapè Valori booleani chì permettenu parte di a pulitica SELinux per esse cambiata in runtime senza sapè chì a pulitica SELinux hè soprascritta. Per esempiu, se vulete chì httpd invii email, entre: # setsebool -P httpd_can_sendmail 1

19. SELinux avete bisognu di sapè valori lògichi per attivà / disattivà i paràmetri SELinux:

  • Per vede tutti i valori booleani: # getsebool -a
  • Per vede una descrizzione di ognunu: # semanage boolean -l
  • Per stabilisce un valore booleanu: # setsebool [_boolean_] [1|0]
  • Per una stallazione permanente, aghjunghje -P. Per esempiu: # setsebool httpd_enable_ftp_server 1 -P

20. E pulitiche / applicazioni SELinux ponu cuntene errori, cumprese:

  • Percorsi di codice inusual
  • Cunfigurazioni
  • Redirecting stdout
  • Fuga di descrittore di file
  • Memoria eseguibile
  • Biblioteche mal custruite

Biglietti aperti (ùn inviate micca un rapportu à Bugzilla; Bugzilla ùn hà micca SLA).

21. A vostra infurmazione pò esse cumprumessas'è vo avete duminii ristretti chì prova à:

  • Caricà i moduli di u kernel
  • Disattivate u modu SELinux infurzatu
  • Scrivite à etc_t/shadow_t
  • Cambia e regule iptables

22. Strumenti SELinux per u sviluppu di moduli di pulitica:

# yum -y install setroubleshoot setroubleshoot-server

Riavvia o riavvia auditd dopu a stallazione.

23. Usu

journalctl

per vede una lista di tutti i logs assuciati cù setroubleshoot:

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

24. Usu journalctl per listinu tutti i logs assuciati cù un tag SELinux specificu. Per esempiu:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. Se si verifica un errore SELinux, utilizate u logu setroubleshoot offre parechje soluzioni pussibuli.
Per esempiu, 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 l'infurmazioni in parechji posti:

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

27. Logging: ricerca di errori SELinux in u logu di auditu:

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

28. Per truvà missaghji SELinux Access Vector Cache (AVC) per un serviziu specificu:

# ausearch -m avc -c httpd

29. Utilità audit2allow raccoglie l'infurmazioni da i logs di l'operazioni pruibiti è poi genera regule di pulitica di permessu SELinux. Per esempiu:

  • Per creà una descrizzione leggibile da l'omu di perchè l'accessu hè denegatu: # audit2allow -w -a
  • Per vede un tipu di regula d'applicazione chì permette l'accessu denegatu: # audit2allow -a
  • Per creà un modulu persunalizatu: # audit2allow -a -M mypolicy
  • Opzione -M crea un schedariu d'infurzazioni di tipu (.te) cù u nome specificatu è compila a regula in un pacchettu di pulitica (.pp): mypolicy.pp mypolicy.te
  • Per installà un modulu persunalizatu: # semodule -i mypolicy.pp

30. Per cunfigurà un prucessu separatu (domain) per travaglià in modu permissivu: # semanage permissive -a httpd_t

31. Se ùn vulete più chì u duminiu sia permissivu: # semanage permissive -d httpd_t

32. Per disattivà tutti i domini permissivi: # semodule -d permissivedomains

33. Abilitazione di a pulitica MLS SELinux: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

Assicuratevi chì SELinux funziona in modu permissivu: # setenforce 0
Aduprate un script fixfilesper assicurà chì i schedari sò rietichettati in u prossimu reboot:

# fixfiles -F onboot # reboot

34. Crea un utilizatore cù un intervallu MLS specificu: # useradd -Z staff_u john

Utilizendu u cumandimu useradd, mappe u novu utilizatore à un utilizatore SELinux esistente (in questu casu, staff_u).

35. Per vede a mappatura trà l'utilizatori SELinux è Linux: # semanage login -l

36. Definite un intervallu specificu per l'utilizatori: # semanage login --modify --range s2:c100 john

37. Per correggere l'etichetta di u cartulare di casa di l'utilizatore (se necessariu): # chcon -R -l s2:c100 /home/john

38. Per vede e categurie attuali: # chcat -L

39. Per cambià e categurie o cuminciate à creà u vostru propiu, editate u schedariu cusì:

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

40. Per eseguisce un cumandamentu o script in un schedariu specificu, rolu è cuntestu d'utilizatore:

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

  • -t cuntestu di u schedariu
  • -r cuntestu di rolu
  • -u cuntestu di l'utilizatori

41. Contenituri chì funzionanu cù SELinux disattivati:

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

42. Sè avete bisognu di dà u cuntenutu sanu accessu à u sistema:

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

È avà sapete digià a risposta. Allora per piacè: ùn panicu è attivate SELinux.

Referenze:

Source: www.habr.com

Add a comment