Una guida per principianti à SELinux

Una guida per principianti à SELinux

Traduzzione di l'articulu preparatu per i studienti di u cursu "Sicurezza Linux"

SELinux o Security Enhanced Linux hè un mecanismu di cuntrollu d'accessu rinfurzatu sviluppatu da l'Agenzia di Sicurezza Naziunale di i Stati Uniti (NSA) per prevene intrusioni maliziusi. Implementa un mudellu di cuntrollu d'accessu furzatu (o ubligatoriu) (English Mandatory Access Control, MAC) in cima à u mudellu discretionary (o selettivu) esistenti (English Discretionary Access Control, DAC), vale à dì, permessi di leghje, scrive, eseguisce.

SELinux hà trè modi:

  1. Enforcing - negazione di accessu basatu nantu à e regule di pulitica.
  2. Permissivu - mantene un logu di l'azzioni chì violanu a pulitica, chì saria pruibita in u modu di rinfurzà.
  3. cacciatu - disabilitazione completa di SELinux.

Per automaticamente, i paràmetri sò in /etc/selinux/config

Cambia i modi SELinux

Per sapè u modu attuale, eseguite

$ getenforce

Per cambià u modu à permissivu, eseguite u cumandimu seguitu

$ setenforce 0

o, per cambià u modu da permissiva nantu rinfurzà, eseguisce

$ setenforce 1

Sè avete bisognu di disattivà SELinux cumplettamente, allora questu pò esse fattu solu attraversu u schedariu di cunfigurazione

$ vi /etc/selinux/config

Per disattivà, cambia u paràmetru SELINUX cum'è seguente:

SELINUX=disabled

Configurazione di SELinux

Ogni schedariu è prucessu hè marcatu cù un cuntestu SELinux, chì cuntene infurmazioni supplementari cum'è utilizatore, rolu, tipu, etc. Se questa hè a vostra prima volta chì permette SELinux, avete prima bisognu di cunfigurà u cuntestu è l'etichette. U prucessu di assignà etichette è u cuntestu hè cunnisciutu com'è tagging. Per inizià a marcatura, in u schedariu di cunfigurazione cambiamu u modu à permissiva.

$ vi /etc/selinux/config
SELINUX=permissive

Dopu avè stabilitu u modu permissiva, Crea un schedariu oculatu viotu in a radica cù u nome autorelabel

$ touch /.autorelabel

è ripigliate l'urdinatore

$ init 6

Nota: Avemu aduprà u modu permissiva per a marcatura, postu chì l'usu di u modu rinfurzà pò causari u sistema à crash durante u reboot.

Ùn vi preoccupate micca se u scaricamentu si blocca in qualchì schedariu, a marcatura dura un pocu. Quandu a marcatura hè cumpleta è u vostru sistema hè avviatu, pudete andà à u schedariu di cunfigurazione è stabilisce u modu rinfurzàè corre ancu:

$ setenforce 1

Avete avà attivatu SELinux cù successu in u vostru urdinatore.

Monitoring i logs

Pudete avè scontru qualchì errore durante a marcatura o mentre u sistema hè in esecuzione. Per verificà se u vostru SELinux funziona bè è s'ellu ùn hè micca bluccatu l'accessu à qualsiasi portu, applicazione, etc., avete bisognu di guardà i logs. U log SELinux hè situatu in /var/log/audit/audit.log, ma ùn avete micca bisognu di leghje tuttu per truvà errori. Pudete aduprà l'utilità audit2why per truvà errori. Eseguite u cumandimu seguitu:

$ audit2why < /var/log/audit/audit.log

In u risultatu, riceverete una lista di errori. S'ellu ùn ci era micca errori in u logu, ùn sarà micca affissatu nisun messagiu.

Configurazione di a pulitica SELinux

Una pulitica SELinux hè un inseme di regule chì guvernanu u mecanismu di sicurezza SELinux. Una pulitica definisce un inseme di regule per un ambiente specificu. Avà amparà cumu cunfigurà e pulitiche per permette l'accessu à i servizii pruibiti.

1. Valori lògichi (switches)

I switches (booleani) permettenu di cambià parte di una pulitica in runtime, senza avè da creà novi pulitiche. Permettenu di fà cambiamenti senza rebooting o recompiling politiche SELinux.

Esempiu:
Diciamu chì vulemu sparte u cartulare di casa di un utilizatore via FTP lettura / scrittura, è l'avemu digià spartutu, ma quandu avemu pruvatu à accede, ùn vedemu nunda. Questu hè chì a pulitica SELinux impedisce à u servitore FTP di leghje è scrive in u cartulare di casa di l'utilizatori. Avemu bisognu di cambià a pulitica per chì u servitore FTP pò accede à i cartulari di casa. Videmu s'ellu ci hè qualchì switch per questu per fà

$ semanage boolean -l

Stu cumandamentu listerà i switches dispunibili cù u so statu attuale (on o off) è a descrizzione. Pudete raffinà a vostra ricerca aghjunghjendu grep per truvà risultati solu ftp:

$ semanage boolean -l | grep ftp

è truverete i seguenti

ftp_home_dir        -> off       Allow ftp to read & write file in user home directory

Stu switch hè disattivatu, cusì l'attiveremu cun setsebool $ setsebool ftp_home_dir on

Avà u nostru daemon ftp hà da pudè accede à u cartulare di casa di l'utilizatori.
Nota: Pudete ancu ottene una lista di i switches dispunibili senza descrizzione per fà getsebool -a

2. Etichette è cuntestu

Questu hè u modu più cumuni per implementà a pulitica SELinux. Ogni schedariu, cartulare, prucessu è portu hè marcatu cù u cuntestu SELinux:

  • Per i fugliali è i cartulare, l'etichette sò guardate cum'è attributi estesi in u sistema di fugliale è ponu esse vistu cù u cumandimu seguente:
    $ ls -Z /etc/httpd
  • Per i prucessi è i porti, l'etichettatura hè gestita da u kernel, è pudete vede sti etichette cum'è seguente:

prucessu

$ ps –auxZ | grep httpd

u portu

$ netstat -anpZ | grep httpd

Esempiu:
Avà fighjemu un esempiu per capisce megliu e etichette è u cuntestu. Dicemu chì avemu un servitore web chì, invece di un annuariu /var/www/html/ использует /home/dan/html/. SELinux cunsiderà questu una violazione di a pulitica è ùn puderete micca vede e vostre pagine web. Questu hè perchè ùn avemu micca stabilitu u cuntestu di sicurità assuciatu cù i schedari HTML. Per vede u cuntestu di sicurezza predeterminatu, utilizate u cumandimu seguente:

$ ls –lz /var/www/html
 -rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/

Eccu avemu httpd_sys_content_t cum'è cuntestu per i schedari html. Avemu bisognu di stabilisce stu cuntestu di sicurità per u nostru repertoriu attuale, chì attualmente hà u cuntestu seguente:

-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/

Un cumandamentu alternativu per verificà u cuntestu di sicurità di un schedariu o cartulare:

$ semanage fcontext -l | grep '/var/www'

Avemu ancu aduprà semanage per cambià u cuntestu quandu avemu trovu u cuntestu di sicurità currettu. Per cambià u cuntestu di /home/dan/html, eseguite i seguenti cumandamenti:

$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html

Dopu chì u cuntestu hè cambiatu cù semanage, u cumandamentu restorecon caricarà u cuntestu predeterminatu per i fugliali è i cartulari. U nostru servitore web serà avà capaci di leghje i schedari da u cartulare /home/dan/htmlperchè u cuntestu di sicurità per stu cartulare hè statu cambiatu httpd_sys_content_t.

3. Crià pulitiche lucali

Ci ponu esse situazioni induve i metudi di sopra ùn sò micca utili per voi è avete sbagliati (avc/denial) in audit.log. Quandu succede questu, avete bisognu di creà una pulitica lucale. Pudete truvà tutti l'errori cù audit2why, cum'è descrittu sopra.

Pudete creà una pulitica lucale per risolve l'errori. Per esempiu, avemu un errore ligatu à httpd (apache) o smbd (samba), grep l'errori è creanu una pulitica per elli:

apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy

http_policy и smb_policy sò i nomi di e pulitiche lucali chì avemu creatu. Avà avemu bisognu di carricà queste pulitiche lucali create in a pulitica attuale SELinux. Questu pò esse fattu cusì:

$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp

E nostre pulitiche lucali sò state scaricate è ùn duvemu più riceve alcun avc o denail in audit.log.

Questu era u mo tentativu di aiutà vi capisce SELinux. Spergu chì dopu avè lettu stu articulu vi sentite più còmode cù SELinux.

Source: www.habr.com

Add a comment