Despre Linux

  • Facebook
  • Twitter
  • LinkedIn
  • Acasă
  • Linux
    • Comenzi Linux
    • Tutoriale
  • Kubernetes
  • RHCSA
    • Exerciții RHCSA
    • SELinux
    • Permisiuni
  • General
    • Open source
  • Contact

Tipuri de politici și atribute SELinux. Politica targeted

30 august 2018 By Bobses 2 comentarii

În articolul anterior am menționat că o politică SELinux este ca o carte uriașă care conține regulile politicii respective. SELinux conține 3 astfel de politici: targeted, minimum și mls (voi folosi termenii în engleză, pentru o mai bună recunoaștere - peste tot veți întâlni doar acești termeni, nicidecum traducerea lor).

Tipul politicii se definește în fișierul /etc/selinux/config:

$ 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 these three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

Politica targeted este cea mai folosită politică SELinux. Politica minimum este o versiune mai simplă a politicii targeted și este, în general, folosită pe sistemele cu specificații slabe și care nu fac față politicii targeted - de exemplu, pe calculatoarele cu viteză mai mică de procesare. Politica mls este o versiune mai puternică decât cea targeted și este folosită, în general, de diferite guverne.

Toate tipurile de politică SELinux sunt conținute de directorul /etc/selinux:

$ ls -l /etc/selinux/
total 12
-rw-r--r--. 1 root root 548 Jun 10 09:39 config
-rw-r--r--. 1 root root 2425 Jun 26 23:22 semanage.conf
drwxr-xr-x. 5 root root 4096 Aug 19 17:03 targeted

După cum se observă, într-o instalare normală, obișnuită, avem instalată doar politica targeted. Pentru a vizualiza și instala unul din celelalte două pachete (minimum și mls) rulăm comenzile:

# yum list available | grep policy | grep -E 'mls|minimum'
selinux-policy-minimum.noarch 3.13.1-192.el7_5.6 updates
selinux-policy-mls.noarch 3.13.1-192.el7_5.6 updates
#
# yum install selinux-policy-minimum
#
# ls -l /etc/selinux
total 24
-rw-r--r--. 1 root root 548 Aug 22 20:01 config
drwx------. 2 root root 4096 Aug 27 20:25 final
drwxr-xr-x. 7 root root 4096 Aug 27 20:25 minimum
-rw-r--r--. 1 root root 2321 Apr 11 11:01 semanage.conf
drwxr-xr-x. 7 root root 4096 Aug 22 20:06 targeted
drwxr-xr-x. 2 root root 4096 Apr 11 11:01 tmp

Fiecare din aceste foldere conține module care sunt încărcate în mod dinamic în kernel.

Principala diferență dintre aceste 3 politici este tipul atributului de securitate care este folosit ca decident pentru determinarea accesului.

Politica targeted

Politica targeted este cel mai folosit tip de politică SELinux. Din acest motiv vine instalată în mod prestabilit, spre deosebire de celelalte două (minimum și mls) care necesită instalare manuală.

Politica targeted utilizează, în primul rând, atributul de securitate type (_t). Acest atribut este utilizat ca decident principal atunci când un obiect încearcă să acceseze un alt obiect.

Procese și domenii

Când discutăm despre procese, ne referim la atributul de securitate type (_t) ca la un domeniu, ceea ce ne permite să ne putem raporta la un grup de procese. Să luăm ca exemplu comanda de mai jos:

$ ps faxZ | grep crond
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 8513 pts/1 S+ 0:00 | | _ grep --color=auto crond
system_u:system_r:crond_t:s0-s0:c0.c1023 818 ? Ss 0:00 /usr/sbin/atd -f
system_u:system_r:crond_t:s0-s0:c0.c1023 824 ? Ss 0:00 /usr/sbin/crond -n

Observăm că atât procesul crond, cât și procesul atd rulează sub domeniul crond_t (atributul de securitate crond_t), ceea ce înseamnă că procesul crond poate interacționa cu procesul atd, dar nu poate interacționa cu procese care au alt domeniu/atribut de securitate (de exemplu httpd_t).

Atribute de securitate SELinux

Totul, absolut tot ceea ce se află pe o mașină Linux, are atribuit un anumit context de securitate. Așa cum am menționat într-un articol anterior, un context de securitate SELinux este constituit dintr-un șir de 4 atribute delimitate de caracterul două puncte :. Cele 4 tipuri de atribute SELinux sunt următoarele:

  • user (_u)
  • rol (_r)
  • tip (_t)
  • sensibilitate sau nivel (_s)

Întotdeauna contextele SELinux apar sub forma următoare:

user_u:role_r:type_t:level_s

Sufixul face foarte ușor de recunoscut și de înțeles tipul fiecărui atribut.

Atributul de securitate type este, așa cum am văzut până acum, cel mai important din cei 4 pentru politica targeted, deoarece această politică decide dacă un obiect Linux (de ex. un proces) poate accesa un alt obiect Linux (de ex. un fișier de configurare) în funcție de valoarea atributului de securitate type.

Pentru exemplificare, să ne uităm un pic la contextul de securitate al procesului Apache:

# ps faxZ | grep httpd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 27729 pts/0 S+ 0:00 _ grep --color=auto httpd
system_u:system_r:httpd_t:s0 27719 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 27720 ? S 0:00 _ /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 27721 ? S 0:00 _ /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 27722 ? S 0:00 _ /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 27723 ? S 0:00 _ /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 27724 ? S 0:00 _ /usr/sbin/httpd -DFOREGROUND

Iar dacă listăm conținutul directorului /etc/httpd obținem:

# ll -Z /etc/httpd
drwxr-xr-x. root root system_u:object_r:httpd_config_t:s0 conf
drwxr-xr-x. root root system_u:object_r:httpd_config_t:s0 conf.d
drwxr-xr-x. root root system_u:object_r:httpd_config_t:s0 conf.modules.d
lrwxrwxrwx. root root system_u:object_r:httpd_log_t:s0 logs -> ../../var/log/httpd
lrwxrwxrwx. root root system_u:object_r:httpd_modules_t:s0 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. root root system_u:object_r:httpd_config_t:s0 run -> /run/httpd

După cum se observă, toate procesele Apache au atributul de securitate httpd_t. În politica targeted, există o regulă pentru atributul type httpd_t care spune că toate obiectele cu httpd_t pot accesa oricare alt obiect care are unul din următoarele atribute de securitate:

httpd_modules_t
httpd_sys_script_t
httpd_user_content_t
httpd_suexec_exec_t
httpd_unit_file_t
httpd_unconfined_script_t
httpd_config_t
httpd_t
httpd_log_t
httpd_cache_t
httpd_tmpfs_t
[...]

Această abordare înseamnă că un obiect de tipul httpd_t este oprit de la interacționare cu un obiect de alt tip (de exemplu crond_t). Altfel spus, dacă Apache/httpd este compromis, dezastrul este limitat doar la sine însuși, astfel încât celelalte obiecte (ftp, ssh, cron, etc.) NU vor fi compromise.

Pentru a ne face o idee despre cât de multe atribute de securitate type există, vom rula comanda seinfo:

# seinfo -t | head

Types: 4891
NetworkManager_etc_rw_t
NetworkManager_etc_t
NetworkManager_exec_t
NetworkManager_initrc_exec_t
NetworkManager_log_t
NetworkManager_ssh_t
NetworkManager_t
NetworkManager_tmp_t

# seinfo -t | wc -l
4893

Atributul de securitate de tip unconfined_t

După cum am văzut atât în articolele precedente, cât și un pic mai sus, există un atribut de securitate type numit unconfined_t:

$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

$ ps axZ | grep unconfined_t | head
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1024 ? Ss 0:00 /usr/lib/systemd/systemd --user
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1052 ? Ss 0:00 /bin/sh /etc/xdg/xfce4/xinitrc -- vt
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1239 ? Sl 0:00 /usr/libexec/imsettings-daemon
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1248 ? Ssl 0:00 /usr/libexec/gvfsd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1261 ? Sl 0:00 /usr/libexec/gvfsd-fuse /run/user/1000/gvfs -f -o big_writes
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1387 ? Ss 0:00 /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "startxfce4"
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1413 ? Sl 0:01 xfce4-session
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1417 ? S 0:00 /usr/lib64/xfce4/xfconf/xfconfd
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1420 ? Ss 0:00 /usr/bin/gpg-agent --sh --daemon --write-env-file /home/bobses/.cache/gpg-agent-info
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 1421 ? S 0:42 xfwm4 --display :0.0 --sm-client-id 29f9608c2-787c-4626-ae6d-df2c87cfbce5

Toate obiectele de acest tip - unconfined_t - nu sunt restricționate de SELinux în niciun fel, sau, altfel spus, putem considera că SELinux este dezactivat pentru aceste obiecte. Așadar, neaplicându-se stratul de securitate MAC (Mandatory Access Control), singurele restricții care rămân asupra acestor obiecte sunt cele de tipul DAC (Discretionary Access Control).

Dacă o politică SELinux (politica targeted în cazul nostru) nu are nicio regulă scrisă pentru un anumit obiect, atunci automat obiectului respectiv i se atribuie atributul de securitate unconfined_t.

Trebuie reținut că politica targeted atribuie contextul unconfined_t tuturor conturilor de utilizator din Linux -  toate conturile de utilizator adăugate cu comanda useradd (inclusiv contul de superutilizator root) aparțin domeniului unconfined_t.  Toate procesele generate de un utilizator moștenesc atributele SELinux ale utilizatorului respectiv:

Obiectele Linux cu atributul unconfined_t se pot accesa unele pe altele și, cel mai important, pot accesa orice alt obiect din sistem.

Cele povestite până acum despre obiectele cu atributul unconfined_t par să provoace o imensă gaură de securitate în sistem - în realitate lucrurile nu stau chiar așa. Asta deoarece obiectul principal al SELinux este să securizeze în primul rând procesele care au acces la internet (căci ele sunt cele mai vulnerabile atacurilor), decât să se ocupe îndeaproape de toate procesele interne. De asemenea,  SELinux se ocupă de securizarea proceselor care pornesc la boot, în eventualizatea că aceste procese ar putea fi compromise.

Domeniul unconfined_t este doar o reprezentare a obiectelor Linux pentru care SELinux este dezactivat. Există mai multe domenii unconfined; o listă a acestora poate fi vizualizată folosind comanda seinfo:

# seinfo --attribute=unconfined_domain_type -x
unconfined_domain_type

abrt_handle_event_t
anaconda_t
install_t
preupgrade_t
httpd_unconfined_script_t
authconfig_t
bacula_unconfined_script_t
kernel_t
boinc_project_t
bootloader_t
certmonger_unconfined_t
cinder_api_t
cinder_backup_t
cinder_scheduler_t
cinder_volume_t
cloud_init_t
condor_startd_t
conman_unconfined_script_t
[...]

Partajează asta:

  • Dă clic pentru a partaja pe Facebook(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe LinkedIn(Se deschide într-o fereastră nouă)
  • Click to share on Twitter(Se deschide într-o fereastră nouă)

Similare

Din categoria: SELinux Etichete: RHCSA, SELinux

Trackbacks

  1. Editarea contextelor de securitate SELinux | Despre Linux spune:
    20 iunie 2021 la 11:45

    […] din politica SELinux care este activă în momentul respectiv (de cele mai multe ori este vorba de politica targeted, cea mai […]

    Răspunde
  2. Valori booleene ale SELinux | Despre Linux spune:
    20 iunie 2021 la 11:42

    […] prestabilit al politicii targeted poate fi personalizat prin configurarea unor parametri care pot activa sau dezactiva anumite reguli […]

    Răspunde

Lasă un răspunsAnulează răspunsul

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Copyright © 2025 · Bobses

Administrează consimțămintele pentru cookie-uri
Pentru a oferi cea mai bună experiență, folosim tehnologii, cum ar fi cookie-uri, pentru a stoca și/sau accesa informațiile despre dispozitive. Consimțământul pentru aceste tehnologii ne permite să procesăm date, cum ar fi comportamentul de navigare sau ID-uri unice pe acest site. Dacă nu îți dai consimțământul sau îți retragi consimțământul dat poate avea afecte negative asupra unor anumite funcționalități și funcții.
Funcționale Mereu activ
Stocarea tehnică sau accesul sunt strict necesare în scopul legitim de a permite utilizarea unui anumit serviciu cerut în mod explicit de către un abonat sau un utilizator sau în scopul exclusiv de a executa transmiterea unei comunicări printr-o rețea de comunicații electronice.
Preferințe
Stocarea tehnică sau accesul este necesară în scop legitim pentru stocarea preferințelor care nu sunt cerute de abonat sau utilizator.
Statistici
Stocarea tehnică sau accesul care sunt utilizate exclusiv în scopuri statistice. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
Stocarea tehnică sau accesul sunt necesare pentru a crea profiluri de utilizator pentru a trimite publicitate sau pentru a urmări utilizatorul pe un site web sau pe mai multe site-uri web în scopuri de marketing similare.
Administrează opțiunile Administrează serviciile Administrează vânzătorii {vendor_count} Citește mai multe despre aceste scopuri
Vizualizează preferințele
{title} {title} {title}