Știm deja că, atunci când creăm un fișier sau un director nou, SELinux îi atribuie automat anumite atribute de securitate. Comanda semanage fcontext -l
ne oferă informații despre modul în care SELinux determină ce context de securitate este necesar să fie atribuit tuturor fișierelor și folderelor din sistem:
#semanage fcontext -l | wc -l
6428 # #semanage fcontext -l | head -n 20
SELinux fcontext type Context / directory system_u:object_r:root_t:s0 /.* all files system_u:object_r:default_t:s0 /[^/]+ regular file system_u:object_r:etc_runtime_t:s0 /\.autofsck regular file system_u:object_r:etc_runtime_t:s0 /\.autorelabel regular file system_u:object_r:etc_runtime_t:s0 /\.ismount-test-file regular file system_u:object_r:sosreport_tmp_t:s0 /\.journal all files <<None>> /\.snapshots(/.*)? all files system_u:object_r:snapperd_data_t:s0 /\.suspended regular file system_u:object_r:etc_runtime_t:s0 /a?quota\.(user|group) regular file system_u:object_r:quota_db_t:s0 /afs directory system_u:object_r:mnt_t:s0 /bacula(/.*)? all files system_u:object_r:bacula_store_t:s0 /bin all files system_u:object_r:bin_t:s0 /bin/.* all files system_u:object_r:bin_t:s0 /bin/alsaunmute regular file system_u:object_r:alsa_exec_t:s0 /bin/bash regular file system_u:object_r:shell_exec_t:s0 /bin/bash2 regular file system_u:object_r:shell_exec_t:s0 /bin/d?ash regular file system_u:object_r:shell_exec_t:s0
Trebuie menționat că "(/.*)?" înseamnă că toate elementele-copil vor moșteni automat contextul de securitate al părintelui.
Comanda semanage
ne oferă informații esențiale despre contextul pe care trebuie să-l aibă un anumit fișier sau director în sistem. Aceste informații sunt extrase din politica SELinux care este activă în momentul respectiv (de cele mai multe ori este vorba de politica targeted, cea mai folosită).
Trebuie știut că, de fiecare dată când instalăm un program, contextele de securitate sunt atribuite în funcție de politica SELinux, avându-se în vedere și moștenirea, așa cum am zis câteva rânduri mai sus. De exemplu, dacă un utilizator pornește un proces nou, acest nou proces va moșteni atributele de securitate ale userului respectiv; dacă un nou fișier este creat, acesta va moșteni atributele de securitate ale directorului în interiorul căruia se află.
Editarea contextelor SELinux folosind comanda semanage
Dacă dorim ca un fișier sau un director să aibă un context SELinux diferit de cel definit de comanda semanage fcontext -l
, trebuie să avem în vedere că cea mai bună modalitate de a face acest lucru este să modificăm, în primul rând, politica targeted folosită (prin intermediul comenzii semanage
). Aceasta înseamnă că modificările vor deveni parte integrantă a politicii targeted și vor supraviețui unui reboot al sistemului, sau chiar unei reetichetări, așa cum vom vedea în alt articol. După ce politica targeted este modificată, următorul pas este să aplicăm noua regulă schimbată obiectului Linux avut în vedere.
Astfel, cei doi pași sunt:
- actualizarea/modificarea politicii targeted
- aplicarea politicii actualizate/modificate fișierelor sau directoarelor.
Comanda semanage
Această comandă este un instrument puternic pentru SELinux. În principiu, comanda este folosită pentru a configura anumite elemente ale politicii SELinux. Suportă mai multe subcomenzi: import, export, login, user, port, interface, module, node, fcontext, boolean, permissive, dontaudit. Pentru a afla mai multe informații: semanage -h
.
În acest moment, suntem interesați doar de subcomanda fcontext a comenzii semanage - man semanage-fcontext
sau semanage fcontext -h
(observați argumentele opționale marcate din imaginea de mai jos - add, delete, modify și list):
Aceste argumente ale comenzii semanage-fcontext
permit adăugarea/modificarea/ștergerea atributelor de securitate ale politicii targeted. Modalitatea de executare a acestor schimbări este arătată prin câteva exemple în pagina de manual a comenzii semanage-fcontext - man semanage-fcontext
:
EXAMPLE remember to run restorecon after you set the file context Add file-context for everything under /web # semanage fcontext -a -t httpd_sys_content_t "/web(/.*)?" # restorecon -R -v /web Substitute /home1 with /home when setting file context # semanage fcontext -a -e /home /home1 # restorecon -R -v /home1 For home directories under top level directory, for example /disk6/home, execute the following commands. # semanage fcontext -a -t home_root_t "/disk6" # semanage fcontext -a -e /home /disk6/home # restorecon -R -v /disk6
Și acum să lucrăm cu această comandă. Prima dată vom crea un fișier și-i vom vizualiza contextul SELinux:
# touch fisier.txt # ll -Z fisier.txt -rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0 0 Aug 31 20:49 fisier.txt
Să schimbăm atributul type din admin_home_t în home_root_t; bazându-ne pe pagina de manual a comenzii, vom scrie:
# semanage fcontext -m -t home_root_t fisier.txt
Rulăm comanda restorecon
pe fisierul respectiv și-i vom atribui contextul de securitate specificat de comanda semanage fcontext
mai sus:
# restorecon /root/fisier.txt
# ll -Z -rw-r--r--. 1 root root unconfined_u:object_r:home_root_t:s0 0 Aug 31 20:49 fisier.txt
În exemplul de mai sus am rulat comanda restorecon
pe un singur fișier; pentru a rula aceeași comandă pe un director și pe tot ceea ce se află în interiorul său:
# semanage fcontext -a -t home_root_t "/nume_director(/.*)?" # restorecon -R -v /nume_director
Sunt situații când dorim să rulăm această comandă pe fiecare fișier sau director de pe mașină (de exemplu, atunci când am schimbat parola de root folosind metoda descrisă în acest articol). Pentru aceasta, vom face un fișier gol în directorul rădăcină al sistemului și vom restarta computerul:
# touch /.autorelabel # reboot
Va dura un pic mai mult decât restartul normal, căci SELinux reverifică fiecare fișier și îi aplică contextul de securitate stabilit de politica aflată în uz. După ce reetichetarea este completă, fișierul /.autorelabel va fi șters automat.
O altă metodă de a rula comanda restorecon pe întregul sistem este de a schimba SELinux în disabled, apoi reboot, urmat de o revenire la SELinux permisiv sau activ - după cum se observă, această metodă necesită 2 restarturi.
Exemplu de schimbare a politicii targeted pe un director Apache
Acest exemplu este, de fapt, o situație reală des întâlnită în practică. Prestabilit, httpd folosește calea /var/www ca Documentroot. Atributele de securitate pentru directorul /var/www sunt:
# ls -Z | grep www system_u:object_r:httpd_sys_content_t:s0 www
Să presupunem că vrem să schimbăm această cale în alt director - să zicem în directorul /continutweb. Pentru început vom crea acest director cu comanda mkdir
, vom adăuga un fișier index.html în interiorul său și-i vom schimba proprietarul din root în apache cu comanda chown
:
# mkdir /continutweb # echo "Salutare!" > /continutweb/index.html # ls -Z | grep continutweb unconfined_u:object_r:default_t:s0 continutweb # chown -R apache. /continutweb
De asemenea, observăm că am listat și contextul de securitate al acestui director nou - atributul type este unul generic (default_t). Vom lista politica targeted folosită și nu vom găsi nicio regulă care trebuie aplicată directorului /continutweb:
# semanage fcontext -l | grep continutweb #
Dacă ne întoarcem în directorul /var și listăm contextul de securiotate al directorului /var/www (cel în care apache își ține prestabilit conținutul), observăm că acesta este httpd_sys_content_t:
# ls -Z | grep www system_u:object_r:httpd_sys_content_t:s0 www
Va trebui să schimbăm politica targeted referitoare la directorul /continutweb și la conținutul său (folosind comanda semanage fcontext
) și să aplicăm această nouă politică prin reetichetare cu comanda restorecon
:
#semanage fcontext -a -t httpd_sys_content_t "/continutweb(/.*)?"
--> schimbăm politica # #semanage fcontext -l | grep continutweb
--> listăm să vedem că politica s-a schimbat /continutweb(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 # #restorecon -R /continutweb
--> rulăm comanda de aplicare a noii reguli a politicii #ll -aZ /continutweb
--> listăm contextul să vedem că s-a schimbat total 12 drwxr-xr-x. 2 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 4096 Sep 1 08:38 . dr-xr-xr-x. 19 root root system_u:object_r:root_t:s0 4096 Sep 1 08:37 .. -rw-r--r--. 1 apache apache unconfined_u:object_r:httpd_sys_content_t:s0 10 Sep 1 08:38 index.html
În acest moment putem accesa fișierul index.html cu un browser web și se va încărca pagina cu mesajul Salutare!
Comenzile din acest exemplu pot fi urmărite și în imaginea de mai jos:
Lasă un răspuns