Unu di i mutivi di u tremendu successu di u Linux OS nantu à i dispositi mobili è i servitori incrustati hè u livellu abbastanza altu di sicurità di u kernel, servizii è applicazioni cunnessi. Ma si
Sfondate nantu à i Moduli di Sicurezza Linux è SELinux
Security Enhanced Linux hè un inseme di regule è di meccanismi d'accessu basati nantu à mudelli d'accessu obbligatori è basati nantu à u rolu per prutege i sistemi Linux da i potenziali minacce è corregge i difetti di u Controlu di Accessu Discretionary (DAC), u sistema tradiziunale di sicurezza Unix. U prughjettu urigginatu in l'intestini di l'Agenzia di Sicurezza Naziunale di i Stati Uniti, è hè statu sviluppatu direttamente principalmente da i cuntratturi Secure Computing Corporation è MITRE, è ancu una quantità di laboratori di ricerca.
Moduli di sicurezza Linux
Linus Torvalds hà fattu una quantità di cumenti nantu à i novi sviluppi NSA per pudè esse inclusi in u kernel Linux principale. Discriva un ambiente generale, cù un inseme di interceptors per cuntrullà l'operazioni cù l'uggetti è un settore di certi campi protettivi in strutture di dati di kernel per almacenà l'attributi currispundenti. Questu ambiente pò esse adupratu da i moduli di kernel caricabili per implementà qualsiasi mudellu di sicurità desideratu. LSM hà intrutu cumplettamente in u kernel Linux v2.6 in 2003.
U quadru LSM include campi di guardia in strutture di dati è chjama à funzioni di intercettazione in punti critichi in u codice di u kernel per manipulà è eseguisce u cuntrollu di l'accessu. Aghjunghje ancu funziunalità per registrà moduli di sicurezza. L'interfaccia /sys/kernel/security/lsm cuntene una lista di moduli attivi in u sistema. I ganci LSM sò almacenati in listi chì sò chjamati in l'ordine specificatu in CONFIG_LSM. A documentazione dettagliata nantu à i ganci hè inclusa in u file header include/linux/lsm_hooks.h.
U subsistema LSM hà permessu di cumplettà l'integrazione completa di SELinux cù a stessa versione di u kernel Linux stabile v2.6. Quasi subitu, SELinux hè diventatu u standard de facto per un ambiente Linux sicuru è hè stata inclusa in e distribuzioni più populari: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.
Glossariu SELinux
- Identità - L'utilizatore SELinux ùn hè micca u listessu cum'è l'identificatore di usu Unix / Linux; ponu coesiste in u stessu sistema, ma sò completamente diffirenti in essenza. Ogni contu Linux standard pò currisponde à unu o più in SELinux. L'identità SELinux hè parti di u cuntestu generale di sicurezza, chì determina quale domini pudete è ùn pò micca unisce.
- Domini - In SELinux, un duminiu hè u cuntestu di esecuzione di un sughjettu, vale à dì un prucessu. U duminiu determina direttamente l'accessu chì un prucessu hà. Un duminiu hè basicamente una lista di ciò chì i prucessi ponu fà o ciò chì un prucessu pò fà cù diversi tipi. Certi esempi di domini sò sysadm_t per l'amministrazione di u sistema, è user_t chì hè un duminiu d'utilizatore normale senza privilegiu. U sistema init corre in u duminiu init_t, è u prucessu chjamatu in u duminiu named_t.
- Ruoli - Ciò chì serve cum'è intermediariu trà domini è utilizatori SELinux. I roli determinanu à quali domini un utilizatore pò appartene è chì tipi d'uggetti ponu accede. Stu mecanismu di cuntrollu di l'accessu impedisce a minaccia di attacchi di escalazione di privilegi. I roli sò scritti in u mudellu di sicurezza di u Controlu di Accessu Basatu in Role (RBAC) utilizatu in SELinux.
- Tipi - Un attributu di a lista di Enforcement Type chì hè assignatu à un oggettu è determina quale pò accede. Simile à a definizione di duminiu, salvu chì u duminiu s'applica à un prucessu, è u tipu s'applica à l'uggetti cum'è cartulari, schedarii, sockets, etc.
- Sugetti è ogetti - Prucessi sò sugetti è curriri in un cuntestu specifichi, o duminiu di sicurità. Risorse di u sistema upirativu: schedarii, cartulari, sockets, etc., sò ogetti chì sò attribuiti un certu tipu, in altri palori, un livellu di privacy.
- Politiche SELinux - SELinux usa una varietà di pulitiche per prutege u sistema. A pulitica SELinux definisce l'accessu di l'utilizatori à i roles, roles à i duminii, è i duminii à i tipi. Prima, l'utilizatore hè autorizatu à ottene un rolu, dopu u rolu hè autorizatu à accede à i domini. Infine, un duminiu pò avè accessu solu à certi tipi di oggetti.
LSM è l'architettura SELinux
Malgradu u nome, LSM ùn sò micca generalmente moduli Linux caricabili. Tuttavia, cum'è SELinux, hè direttamente integratu in u kernel. Ogni cambiamentu di u codice fonte LSM richiede una nova compilazione di u kernel. L'opzione currispondente deve esse attivata in i paràmetri di u kernel, altrimenti u codice LSM ùn serà micca attivatu dopu à u boot. Ma ancu in questu casu, pò esse attivatu da l'opzione di bootloader OS.
LSM check stack
LSM hè dotatu di ganci in funzioni core di u core chì ponu esse rilevanti per i cuntrolli. Una di e caratteristiche principali di LSM hè chì sò stacked. Cusì, i cuntrolli standard sò sempre realizati, è ogni strata di LSM aghjunghjenu solu cuntrolli è cuntrolli supplementari. Questu significa chì a pruibizione ùn pò micca esse ritruvata. Questu hè mostratu in a figura; se u risultatu di i cuntrolli di rutina DAC hè un fallimentu, allora a materia ùn ghjunghjerà mancu à i ganci LSM.
SELinux adopta l'architettura di sicurezza Flask di u sistema operatore di ricerca Fluke, in particulare u principiu di u minimu privilegiu. L'essenza di stu cuncettu, cum'è u so nome suggerisce, hè di cuncede à l'utilizatori o di processà solu quelli diritti chì sò necessarii per realizà l'azzioni previste. Stu principiu hè implementatu cù u typing d'accessu furzatu, cusì u cuntrollu di l'accessu in SELinux hè basatu annantu à u duminiu => mudellu di tipu.
Grazie à a scrittura d'accessu forzatu, SELinux hà capacità di cuntrollu di accessu assai più grande cà u mudellu DAC tradiziunale utilizatu in i sistemi operativi Unix / Linux. Per esempiu, pudete limità u numeru di u portu di a rete chì u servitore ftp hà da cunnette, permette di scrive è cambià i schedari in un certu cartulare, ma micca di sguassà.
I cumpunenti principali di SELinux sò:
- Servitore per l'applicazione di a pulitica - U mecanismu principale per urganizà u cuntrollu di l'accessu.
- basa di dati di pulitica di sicurità di u sistema.
- Interazzione cù l'interceptor di l'eventi LSM.
- Selinuxfs - Pseudo-FS, uguale à /proc è muntatu in /sys/fs/selinux. Populatu dinamicamente da u kernel Linux in runtime è chì cuntenenu i fugliali chì cuntenenu l'infurmazioni di status SELinux.
- Accessu Vector Cache - Un mecanismu ausiliariu per aumentà a produtividade.
Cumu funziona SELinux
Tuttu travaglia cusì.
- Un certu sughjettu, in termini SELinux, esegue una azzione permessa nantu à un ughjettu dopu un cuntrollu DAC, cum'è mostra in a stampa superiore. Questa dumanda per fà una operazione va à l'interceptor di eventi LSM.
- Da quì, a dumanda, inseme cù u sughjettu è u cuntestu di sicurità di l'ughjettu, hè passatu à u modulu SELinux Abstraction and Hook Logic, chì hè rispunsevule per interagisce cù u LSM.
- L'autorità di decisione nantu à l'accessu di un sughjettu à un ughjettu hè u Servitore di Enforcement Policy è riceve dati da SELinux AnHL.
- Per piglià decisioni nantu à l'accessu o a negazione, u Servitore di Enforcement di Politica si rivolge à u subsistema di cache di Access Vector Cache (AVC) per e regule più usate.
- Se una suluzione per a regula currispondente ùn hè micca truvata in u cache, a dumanda hè trasmessa à a basa di dati di pulitica di sicurità.
- U risultatu di ricerca da a basa di dati è AVC hè tornatu à u Servitore di Enforcement Policy.
- Se a pulitica truvata currisponde à l'azzione dumandata, l'operazione hè permessa. Altrimenti, l'operazione hè pruibita.
Gestisce i paràmetri SELinux
SELinux opera in unu di trè modi:
- Esecuzione - Aderenza stretta à e pulitiche di sicurità.
- Permissivu - A violazione di e restrizioni hè permessa; una nota currispondente hè fatta in u ghjurnale.
- Disabilitatu - Politiche di sicurezza ùn sò micca in vigore.
Pudete vede in quale modu SELinux hè in u cumandimu seguitu.
[admin@server ~]$ getenforce
Permissive
Cambià u modu prima di rebooting, per esempiu, mette in rispettu, o 1. U paràmetru permissive currisponde à u codice numericu 0.
[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое
Pudete ancu cambià u modu editendu u schedariu:
[admin@server ~]$ cat /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=destinazione
A diferenza cù setenfoce hè chì quandu u sistema upirativu boots, u modu SELinux serà stabilitu in cunfurmità cù u valore di u paràmetru SELINUX in u schedariu di cunfigurazione. Inoltre, i cambiamenti à l'infurzazione di <=> disattivati sò solu in effettu editendu u schedariu /etc/selinux/config è dopu un reboot.
Vede un brevi rapportu di statutu:
[admin@server ~]$ sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
Per vede l'attributi SELinux, certi utilità standard utilizanu u paràmetru -Z.
[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL PID TTY TIME CMD
system_u:system_r:httpd_t:s0 2914 ? 00:00:04 httpd
system_u:system_r:httpd_t:s0 2915 ? 00:00:00 httpd
system_u:system_r:httpd_t:s0 2916 ? 00:00:00 httpd
system_u:system_r:httpd_t:s0 2917 ? 00:00:00 httpd
...
system_u:system_r:httpd_t:s0 2918 ? 00:00:00 httpd
Comparatu à l'output normale di ls -l, ci sò parechji campi supplementari in u formatu seguente:
<user>:<role>:<type>:<level>
L'ultimu campu denota qualcosa cum'è una classificazione di sicurità è hè custituitu da una cumminazione di dui elementi:
- s0 - significatu, scrittu ancu cum'è intervallu lowlevel-highlevel
- c0, c1... c1023 - categuria.
Cambia a cunfigurazione di l'accessu
Aduprate semodule per carricà, aghjunghje è caccià i moduli SELinux.
[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль
Prima squadra settimana di login cunnette l'utente SELinux à l'utilizatore di u sistema operatore, u sicondu mostra una lista. Infine, l'ultimu cumandamentu cù u cambiamentu -r sguassate u mapping di l'utilizatori SELinux à i cunti OS. Una spiegazione di a sintassi per i valori di MLS / MCS Range hè in a sezione precedente.
[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol
squadra utilizatore di settimana utilizatu per gestisce i mappings trà utilizatori SELinux è roli.
[admin@server ~]$ semanage user -l
Labeling MLS/ MLS/
SELinux User Prefix MCS Level MCS Range SELinux Roles
guest_u user s0 s0 guest_r
staff_u staff s0 s0-s0:c0.c1023 staff_r sysadm_r
...
user_u user s0 s0 user_r
xguest_u user s0 s0 xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u
Parametri di cumandamentu:
- -a aghjunghje una entrata di mappatura di rolu persunalizata;
- -l lista d'utilizatori è roli currispondenti;
- -d sguassate l'entrata di mappatura di u rolu di l'utilizatori;
- -R lista di roli attaccati à l'utilizatore;
File, Ports è Valori Booleani
Ogni modulu SELinux furnisce un inseme di regule di tagging di file, ma pudete ancu aghjunghje e vostre regule se necessariu. Per esempiu, vulemu chì u servitore web hà diritti d'accessu à u cartulare /srv/www.
[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/
U primu cumandamentu registra novi règuli di marcatura, è u sicondu resetta, o piuttostu, i tipi di schedari in cunfurmità cù e regule attuali.
In listessu modu, i porti TCP / UDP sò marcati in modu chì solu i servizii apprupriati ponu sente nantu à elli. Per esempiu, per chì u servitore web sente à u portu 8080, avete bisognu di eseguisce u cumandamentu.
[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080
Un numeru significativu di moduli SELinux anu paràmetri chì ponu piglià valori booleani. A lista sana di tali parametri pò esse vistu cù getsebool -a. Pudete cambià i valori booleani cù setsebool.
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off
Workshop, accede à l'interfaccia Pgadmin-web
Fighjemu un esempiu praticu: avemu installatu pgadmin7.6-web in RHEL 4 per amministrari a basa di dati PostgreSQL. Andemu un pocu
Cuminciamu cù i suspettati tipici, cuntrollanu /var/log/httpd/error_log. Ci sò alcune entrate interessanti quì.
[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690]
[timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.
À questu puntu, a maiò parte di l'amministratori di Linux seranu assai tentati di eseguisce setencorce 0, è questu serà a fine. Francamente, aghju fattu questu a prima volta. Questu hè di sicuru ancu una manera di esce, ma luntanu da u megliu.
Malgradu i disinni ingombranti, SELinux pò esse user-friendly. Basta à stallà u pacchettu setroubleshoot è vede u log di u sistema.
[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd
Per piacè nutate chì u serviziu di auditd deve esse riavviatu in questu modu, è micca usendu systemctl, malgradu a presenza di systemd in u SO. In u logu di u sistema serà indicatu micca solu u fattu di bluccà, ma dinù u mutivu è manera di superà a pruibizione.
Eseguimu questi cumandamenti:
[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1
Cuntrollamu l'accessu à a pagina web pgadmin4-web, tuttu funziona.
Source: www.habr.com