Traduzzione di l'articulu preparatu per i studienti di u cursu
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:
- Enforcing - negazione di accessu basatu nantu à e regule di pulitica.
- Permissivu - mantene un logu di l'azzioni chì violanu a pulitica, chì saria pruibita in u modu di rinfurzà.
- 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/html
perchè 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
hè 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