In hantlieding foar begjinners foar SELinux

In hantlieding foar begjinners foar SELinux

Oersetting fan it artikel taret foar kursusstudinten "Linux Feiligens"

SELinux of Security Enhanced Linux is in ferbettere tagongskontrôlemeganisme ûntwikkele troch de US National Security Agency (NSA) om kweade ynbraken te foarkommen. It ymplementearret in twongen (as ferplichte) tagongskontrôlemodel (Ingelsk ferplichte tagongskontrôle, MAC) boppe op it besteande diskresjonêre (as selektive) model (English Discretionary Access Control, DAC), dat is, lêze, skriuwe, útfiere tagongsrjochten.

SELinux hat trije modi:

  1. Hanthavenjen - ûntkenning fan tagong basearre op beliedsregels.
  2. Tastimming - it hâlden fan in log fan aksjes dy't yn striid binne mei it belied, dat soe wêze ferbean yn de hanthavenjen modus.
  3. Ynvalide - folsleine útskeakeljen fan SELinux.

Standert binne de ynstellings yn /etc/selinux/config

SELinux-modi feroarje

Om de aktuele modus út te finen, rinne

$ getenforce

Om de modus te feroarjen nei permissive, útfiere it folgjende kommando

$ setenforce 0

of, om modus te feroarjen fan permissive op hanthavenjen, eksekutearje

$ setenforce 1

As jo ​​SELinux folslein útskeakelje moatte, dan kin dit allinich dien wurde fia it konfiguraasjetriem

$ vi /etc/selinux/config

Om út te skeakeljen, feroarje de SELINUX-parameter as folget:

SELINUX=disabled

SELinux ynstelle

Elk bestân en proses is markearre mei in SELinux-kontekst, dy't ekstra ynformaasje befettet lykas brûker, rol, type, ensfh. As dit jo earste kear is dat jo SELinux ynskeakelje, moatte jo earst de kontekst en labels konfigurearje. It proses fan it tawizen fan labels en kontekst is bekend as tagging. Om te begjinnen mei markearjen, feroarje wy yn it konfiguraasjetriem de modus nei permissive.

$ vi /etc/selinux/config
SELINUX=permissive

Nei it ynstellen fan de modus permissive, meitsje in lege ferburgen triem yn 'e root mei de namme autorelabel

$ touch /.autorelabel

en start de kompjûter opnij

$ init 6

Opmerking: wy brûke de modus permissive foar markearring, sûnt it brûken fan de modus hanthavenjen kin it systeem crashe by it opnij opstarten.

Meitsje jo gjin soargen as de ynlaad fêst komt te sitten op guon bestân, markearje duorret in skoft. Sadree't it markearjen foltôge is en jo systeem is opstart, kinne jo nei it konfiguraasjetriem gean en de modus ynstelle hanthavenjenen ek rinne:

$ setenforce 1

Jo hawwe no mei súkses ynskeakele SELinux op jo kompjûter.

Kontrolearje de logs

Jo binne miskien wat flaters tsjinkaam by it markearjen of wylst it systeem rint. Om te kontrolearjen oft jo SELinux goed wurket en as it gjin tagong blokkearret ta ien haven, applikaasje, ensfh., Jo moatte nei de logs sjen. It SELinux-logboek leit yn /var/log/audit/audit.log, mar jo hoege net it hiele ding te lêzen om flaters te finen. Jo kinne it hulpprogramma audit2why brûke om flaters te finen. Run it folgjende kommando:

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

As gefolch krije jo in list mei flaters. As der gjin flaters wiene yn it log, dan sille gjin berjochten werjûn wurde.

SELinux-belied konfigurearje

In SELinux-belied is in set regels dy't it SELinux-befeiligingsmeganisme regelje. In belied definiearret in set regels foar in spesifike omjouwing. No sille wy leare hoe't jo belied kinne ynstelle om tagong ta ferbeane tsjinsten te tastean.

1. Logyske wearden (skeakels)

Switches (booleans) kinne jo dielen fan in belied feroarje by runtime, sûnder nij belied te meitsjen. Se tastean jo wizigingen oan te meitsjen sûnder SELinux-belied opnij te begjinnen of te kompilearjen.

Foarbyld:
Litte we sizze dat wy wolle diele in brûker syn thús triemtafel fia FTP lêzen / skriuwe, en wy hawwe al dield it, mar as wy besykje om tagong ta it, wy sjogge neat. Dit is om't SELinux-belied foarkomt dat de FTP-tsjinner lêze en skriuwt nei de thúsmap fan de brûker. Wy moatte it belied feroarje, sadat de FTP-tsjinner tagong kin ta thúsmappen. Litte wy sjen oft d'r skeakels binne foar dit troch te dwaan

$ semanage boolean -l

Dit kommando sil de beskikbere skeakels listje mei har hjoeddeistige steat (oan of út) en beskriuwing. Jo kinne jo sykopdracht ferfine troch grep ta te foegjen om allinich ftp-resultaten te finen:

$ semanage boolean -l | grep ftp

en jo sille fine it folgjende

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

Dizze switch is útskeakele, dus wy sille it ynskeakelje mei setsebool $ setsebool ftp_home_dir on

No sil ús ftp-daemon tagong krije ta de thúsmap fan de brûker.
Opmerking: Jo kinne ek in list krije mei beskikbere skeakels sûnder beskriuwing troch te dwaan getsebool -a

2. Labels en kontekst

Dit is de meast foarkommende manier om SELinux-belied út te fieren. Elke triem, map, proses en poarte is markearre mei de SELinux-kontekst:

  • Foar bestannen en mappen wurde labels opslein as útwreide attributen op it bestânsysteem en kinne wurde besjoen mei it folgjende kommando:
    $ ls -Z /etc/httpd
  • Foar prosessen en havens wurdt de labeling beheard troch de kernel, en jo kinne dizze labels as folgjend besjen:

proses

$ ps –auxZ | grep httpd

haven

$ netstat -anpZ | grep httpd

Foarbyld:
Litte wy no nei in foarbyld sjen om labels en kontekst better te begripen. Litte wy sizze dat wy in webserver hawwe dy't, ynstee fan in map /var/www/html/ использует /home/dan/html/. SELinux sil dit beskôgje as in ynbreuk op it belied en jo sille jo websiden net kinne besjen. Dit komt om't wy de feiligenskontekst net ynsteld hawwe dy't ferbûn binne mei de HTML-bestannen. Om de standert feiligenskontekst te besjen, brûk it folgjende kommando:

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

Hjir hawwe wy httpd_sys_content_t as kontekst foar html-bestannen. Wy moatte dizze feiligenskontekst ynstelle foar ús hjoeddeistige map, dy't op it stuit de folgjende kontekst hat:

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

In alternatyf kommando om de feiligenskontekst fan in bestân of map te kontrolearjen:

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

Wy sille ek semanage brûke om de kontekst te feroarjen as wy de juste feiligenskontekst fûn hawwe. Om de kontekst fan /home/dan/html te feroarjen, útfiere de folgjende kommando's:

$ 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

Nei't de kontekst feroare is mei semanage, sil it kommando restorecon de standertkontekst lade foar bestannen en mappen. Us webserver sil no bestannen út 'e map kinne lêze /home/dan/htmlom't de feiligenskontekst foar dizze map is feroare yn httpd_sys_content_t.

3. Meitsje lokaal belied

D'r kinne situaasjes wêze wêr't de boppesteande metoaden foar jo gjin nut binne en jo flaters krije (avc / ûntkenning) yn audit.log. As dit bart, moatte jo in lokaal belied meitsje. Jo kinne alle flaters fine mei audit2why, lykas hjirboppe beskreaun.

Jo kinne in lokaal belied oanmeitsje om flaters op te lossen. Bygelyks, wy krije in flater relatearre oan httpd (apache) of smbd (samba), wy grep de flaters en meitsje in belied foar harren:

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

it is http_policy и smb_policy binne de nammen fan it lokale belied dat wy makke hawwe. No moatte wy dizze makke lokale belied laden yn it hjoeddeistige SELinux-belied. Dit kin dien wurde as folget:

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

Us lokale belied is ynladen en wy moatte gjin avc of ûntkenne mear ûntfange yn audit.log.

Dit wie myn besykjen om jo te helpen SELinux te begripen. Ik hoopje dat jo nei it lêzen fan dit artikel nofliker sille fiele mei SELinux.

Boarne: www.habr.com

Add a comment