ProHoster > Blog > Amministrazione > SELinux cheat sheet per amministratori di sistema: 42 risposte à dumande impurtanti
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".
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:
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:
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:
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: