Жаңадан бастаушыларға арналған SELinux нұсқаулығы

Жаңадан бастаушыларға арналған SELinux нұсқаулығы

Курс студенттері үшін дайындалған мақаланың аудармасы «Linux қауіпсіздігі»

SELinux немесе Security Enhanced Linux — зиянды енулердің алдын алу үшін АҚШ Ұлттық қауіпсіздік агенттігі (NSA) әзірлеген қолжетімділікті басқарудың жетілдірілген механизмі. Ол бар дискрециялық (немесе таңдамалы) үлгінің (ағылшынша дискрециялық қатынасты басқару, DAC), яғни оқу, жазу, орындау рұқсаттарының үстіне мәжбүрлі (немесе міндетті) қол жеткізуді басқару үлгісін (Ағылшынша міндетті қол жеткізуді басқару, MAC) жүзеге асырады.

SELinux үш режимі бар:

  1. Орындау — саясат ережелеріне негізделген қатынаудан бас тарту.
  2. Рұқсат етуші — мәжбүрлеу режимінде тыйым салынатын саясатты бұзатын әрекеттер журналын жүргізу.
  3. мүгедек — SELinux толық өшіру.

Әдепкі бойынша параметрлер енгізілген /etc/selinux/config

SELinux режимдерін өзгерту

Ағымдағы режимді білу үшін іске қосыңыз

$ getenforce

Режимді рұқсат етушіге өзгерту үшін келесі пәрменді орындаңыз

$ setenforce 0

немесе, режимін өзгерту үшін рұқсат беруші туралы орындау, орындау

$ setenforce 1

SELinux-ты толығымен өшіру қажет болса, мұны тек конфигурация файлы арқылы жасауға болады

$ vi /etc/selinux/config

Өшіру үшін SELINUX параметрін келесідей өзгертіңіз:

SELINUX=disabled

SELinux орнату

Әрбір файл мен процесс SELinux контекстімен белгіленеді, онда пайдаланушы, рөл, тип, т.б. сияқты қосымша ақпарат бар. SELinux-ті бірінші рет қосып жатсаңыз, алдымен контекст пен белгілерді конфигурациялауыңыз қажет. Белгілер мен мәтінмәнді тағайындау процесі тегтеу деп аталады. Белгілеуді бастау үшін конфигурация файлында режимді өзгертеміз рұқсат беруші.

$ vi /etc/selinux/config
SELINUX=permissive

Режимді орнатқаннан кейін рұқсат беруші, аты бар түбірде бос жасырын файлды жасаңыз autorelabel

$ touch /.autorelabel

және компьютерді қайта іске қосыңыз

$ init 6

Ескерту: Біз режимді қолданамыз рұқсат беруші таңбалау үшін, режимді қолданғаннан бері орындау қайта жүктеу кезінде жүйенің бұзылуына әкелуі мүмкін.

Жүктеп алу қандай да бір файлда тұрып қалса, алаңдамаңыз, белгілеу біраз уақыт алады. Белгілеу аяқталып, жүйе жүктелгеннен кейін конфигурация файлына өтіп, режимді орнатуға болады орындаужәне де іске қосыңыз:

$ setenforce 1

Енді компьютерде SELinux сәтті қосылды.

Журналдарды бақылау

Белгілеу кезінде немесе жүйе жұмыс істеп тұрған кезде кейбір қателерге тап болуыңыз мүмкін. SELinux дұрыс жұмыс істеп тұрғанын және ол қандай да бір портқа, қолданбаға және т.б. кіруге тыйым салмайтынын тексеру үшін журналдарды қарау керек. SELinux журналы мына жерде орналасқан /var/log/audit/audit.log, бірақ қателерді табу үшін толық оқудың қажеті жоқ. Қателерді табу үшін audit2why утилитасын пайдалануға болады. Келесі пәрменді іске қосыңыз:

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

Нәтижесінде сіз қателер тізімін аласыз. Егер журналда қателер болмаса, хабарламалар көрсетілмейді.

SELinux саясатын конфигурациялау

SELinux саясаты - SELinux қауіпсіздік механизмін реттейтін ережелер жиынтығы. Саясат белгілі бір орта үшін ережелер жинағын анықтайды. Енді тыйым салынған қызметтерге кіруге рұқсат беру үшін саясаттарды конфигурациялауды үйренеміз.

1. Логикалық мәндер (қосқыштар)

Коммутаторлар (логикалық мәндер) жаңа саясаттарды жасамай-ақ орындалу уақытында саясат бөліктерін өзгертуге мүмкіндік береді. Олар SELinux саясаттарын қайта жүктемей немесе қайта құрастырмай өзгертулер енгізуге мүмкіндік береді.

Мысал:
Біз FTP оқу/жазу арқылы пайдаланушының үй каталогын ортақ пайдаланғымыз келеді делік және біз оны бөлісіп қойғанбыз, бірақ оған кіруге тырысқанда біз ештеңе көрмейміз. Себебі SELinux саясаты FTP серверінің пайдаланушының үй каталогын оқуына және жазуына жол бермейді. FTP сервері үй каталогтарына қол жеткізе алатындай етіп саясатты өзгертуіміз керек. Мұны істеу арқылы кез келген қосқыштар бар-жоғын көрейік

$ semanage boolean -l

Бұл пәрмен ағымдағы күйі (қосу немесе өшірулі) және сипаттамасымен қол жетімді қосқыштарды тізімдейді. Тек ftp нәтижелерін табу үшін grep қосу арқылы іздеуді нақтылауға болады:

$ semanage boolean -l | grep ftp

және сіз келесіні таба аласыз

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

Бұл қосқыш өшірілген, сондықтан біз оны қосамыз setsebool $ setsebool ftp_home_dir on

Енді біздің ftp демоны пайдаланушының үй каталогына қол жеткізе алады.
Ескертпе: Сондай-ақ қол жетімді қосқыштардың тізімін орындау арқылы сипаттамасыз алуға болады getsebool -a

2. Белгілер және контекст

Бұл SELinux саясатын жүзеге асырудың ең кең тараған тәсілі. Әрбір файл, қалта, процесс және порт SELinux контекстімен белгіленеді:

  • Файлдар мен қалталар үшін белгілер файлдық жүйеде кеңейтілген атрибуттар ретінде сақталады және оларды келесі пәрмен арқылы көруге болады:
    $ ls -Z /etc/httpd
  • Процестер мен порттар үшін таңбалау ядро ​​арқылы басқарылады және сіз бұл белгілерді келесідей көре аласыз:

процесс

$ ps –auxZ | grep httpd

айлақ

$ netstat -anpZ | grep httpd

Мысал:
Енді белгілер мен контекстті жақсырақ түсіну үшін мысалды қарастырайық. Бізде каталогтың орнына веб-сервер бар делік /var/www/html/ использует /home/dan/html/. SELinux мұны саясатты бұзу деп санайды және сіз веб-беттеріңізді көре алмайсыз. Бұл HTML файлдарымен байланысты қауіпсіздік контекстін орнатпағандықтан. Әдепкі қауіпсіздік контекстін көру үшін келесі пәрменді пайдаланыңыз:

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

Міне, жеттік httpd_sys_content_t html файлдары үшін контекст ретінде. Қазіргі уақытта келесі мәтінмәні бар ағымдағы каталогымыз үшін осы қауіпсіздік контекстін орнатуымыз керек:

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

Файлдың немесе каталогтың қауіпсіздік контекстін тексеруге арналған балама пәрмен:

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

Дұрыс қауіпсіздік контекстін тапқаннан кейін контекстті өзгерту үшін семанажды да қолданамыз. /home/dan/html мәтінмәнін өзгерту үшін келесі пәрмендерді орындаңыз:

$ 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

Мәтінмәнді semanage арқылы өзгерткеннен кейін, restorecon пәрмені файлдар мен каталогтар үшін әдепкі мәтінмәнді жүктейді. Біздің веб-сервер енді файлдарды қалтадан оқи алады /home/dan/htmlсебебі бұл қалтаның қауіпсіздік контекстіне өзгертілген httpd_sys_content_t.

3. Жергілікті саясаттарды жасаңыз

Жоғарыда көрсетілген әдістер сізге тиімсіз болып, audit.log сайтында қателер (avc/denial) пайда болуы мүмкін. Бұл орын алған кезде жергілікті саясатты жасау керек. Жоғарыда сипатталғандай audit2why арқылы барлық қателерді таба аласыз.

Қателерді шешу үшін жергілікті саясатты жасауға болады. Мысалы, біз httpd (apache) немесе smbd (samba) қатысты қатені аламыз, біз қателерді қарастырамыз және олар үшін саясат жасаймыз:

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

Бұл http_policy и smb_policy біз жасаған жергілікті саясаттардың атаулары. Енді осы құрылған жергілікті саясаттарды ағымдағы SELinux саясатына жүктеуіміз керек. Мұны келесідей жасауға болады:

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

Біздің жергілікті саясаттар жүктеп алынды және біз audit.log сайтында бұдан былай ешқандай avc немесе denail қабылдамауымыз керек.

Бұл сізге SELinux-ті түсінуге көмектесу әрекетім болды. Осы мақаланы оқығаннан кейін сіз SELinux-те өзіңізді жайлы сезінесіз деп үміттенемін.

Ақпарат көзі: www.habr.com

пікір қалдыру