Isang Gabay ng Baguhan sa SELinux

Isang Gabay ng Baguhan sa SELinux

Pagsasalin ng artikulong inihanda para sa mga mag-aaral ng kurso "Seguridad ng Linux"

Ang SELinux o Security Enhanced Linux ay isang pinahusay na mekanismo ng kontrol sa pag-access na binuo ng US National Security Agency (NSA) upang maiwasan ang mga malisyosong panghihimasok. Nagpapatupad ito ng sapilitang (o ipinag-uutos) na modelo ng kontrol sa pag-access (English Mandatory Access Control, MAC) sa itaas ng kasalukuyang discretionary (o selective) na modelo (English Discretionary Access Control, DAC), iyon ay, basahin, isulat, isagawa ang mga pahintulot.

Ang SELinux ay may tatlong mga mode:

  1. Pagpapataw — pagtanggi sa pag-access batay sa mga patakaran ng patakaran.
  2. Pinahihintulutan — pag-iingat ng talaan ng mga aksyon na lumalabag sa patakaran, na ipagbabawal sa mode ng pagpapatupad.
  3. Hindi pinagana — kumpletong hindi pagpapagana ng SELinux.

Bilang default, ang mga setting ay nasa /etc/selinux/config

Pagbabago ng SELinux mode

Upang malaman ang kasalukuyang mode, tumakbo

$ getenforce

Upang baguhin ang mode sa permissive patakbuhin ang sumusunod na command

$ setenforce 0

o, upang baguhin ang mode mula sa mapagpahintulot sa Pagpapatupad, isagawa

$ setenforce 1

Kung kailangan mong ganap na huwag paganahin ang SELinux, maaari lamang itong gawin sa pamamagitan ng configuration file

$ vi /etc/selinux/config

Upang hindi paganahin, baguhin ang SELINUX parameter bilang sumusunod:

SELINUX=disabled

Pagse-set up ng SELinux

Ang bawat file at proseso ay minarkahan ng konteksto ng SELinux, na naglalaman ng karagdagang impormasyon gaya ng user, tungkulin, uri, atbp. Kung ito ang iyong unang pagkakataon na i-enable ang SELinux, kakailanganin mo munang i-configure ang konteksto at mga label. Ang proseso ng pagtatalaga ng mga label at konteksto ay kilala bilang pag-tag. Upang simulan ang pagmamarka, sa configuration file binago namin ang mode sa mapagpahintulot.

$ vi /etc/selinux/config
SELINUX=permissive

Matapos itakda ang mode mapagpahintulot, lumikha ng isang walang laman na nakatagong file sa ugat na may pangalan autorelabel

$ touch /.autorelabel

at i-restart ang computer

$ init 6

Tandaan: Ginagamit namin ang mode mapagpahintulot para sa pagmamarka, dahil sa paggamit ng mode Pagpapatupad maaaring maging sanhi ng pag-crash ng system sa panahon ng pag-reboot.

Huwag mag-alala kung ang pag-download ay natigil sa ilang file, ang pagmamarka ay tumatagal ng ilang sandali. Kapag kumpleto na ang pagmamarka at na-boot ang iyong system, maaari kang pumunta sa configuration file at itakda ang mode Pagpapatupadat tumakbo din:

$ setenforce 1

Matagumpay mo na ngayong pinagana ang SELinux sa iyong computer.

Pagsubaybay sa mga log

Maaaring nakatagpo ka ng ilang mga error habang nagmamarka o habang tumatakbo ang system. Upang suriin kung gumagana nang tama ang iyong SELinux at kung hindi nito hinaharangan ang access sa anumang port, application, atbp., kailangan mong tingnan ang mga log. Ang log ng SELinux ay matatagpuan sa /var/log/audit/audit.log, ngunit hindi mo kailangang basahin ang buong bagay upang makahanap ng mga error. Maaari mong gamitin ang audit2why utility para maghanap ng mga error. Patakbuhin ang sumusunod na command:

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

Bilang resulta, makakatanggap ka ng isang listahan ng mga error. Kung walang mga error sa log, walang mga mensahe na ipapakita.

Pag-configure ng SELinux Policy

Ang patakaran ng SELinux ay isang hanay ng mga panuntunan na namamahala sa mekanismo ng seguridad ng SELinux. Ang isang patakaran ay tumutukoy sa isang hanay ng mga panuntunan para sa isang partikular na kapaligiran. Ngayon ay matututunan natin kung paano i-configure ang mga patakaran upang payagan ang pag-access sa mga ipinagbabawal na serbisyo.

1. Mga lohikal na halaga (mga switch)

Nagbibigay-daan sa iyo ang mga switch (boolean) na baguhin ang mga bahagi ng isang patakaran sa runtime, nang hindi kinakailangang gumawa ng mga bagong patakaran. Pinapayagan ka nitong gumawa ng mga pagbabago nang hindi nagre-reboot o nagre-compile ng mga patakaran ng SELinux.

Halimbawa
Sabihin nating gusto naming ibahagi ang home directory ng isang user sa pamamagitan ng FTP read/write, at naibahagi na namin ito, ngunit kapag sinubukan naming i-access ito, wala kaming makita. Ito ay dahil pinipigilan ng patakaran ng SELinux ang FTP server na magbasa at magsulat sa home directory ng user. Kailangan nating baguhin ang patakaran para ma-access ng FTP server ang mga home directory. Tingnan natin kung mayroong anumang mga switch para dito sa pamamagitan ng paggawa

$ semanage boolean -l

Ililista ng command na ito ang mga available na switch kasama ang kanilang kasalukuyang estado (naka-on o naka-off) at paglalarawan. Maaari mong pinuhin ang iyong paghahanap sa pamamagitan ng pagdaragdag ng grep upang makahanap ng mga resultang ftp-only:

$ semanage boolean -l | grep ftp

at makikita mo ang mga sumusunod

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

Naka-disable ang switch na ito, kaya paganahin namin ito setsebool $ setsebool ftp_home_dir on

Ngayon, maa-access na ng aming ftp daemon ang home directory ng user.
Tandaan: Maaari ka ring makakuha ng listahan ng mga available na switch nang walang paglalarawan sa pamamagitan ng paggawa getsebool -a

2. Mga label at konteksto

Ito ang pinakakaraniwang paraan upang ipatupad ang patakaran ng SELinux. Ang bawat file, folder, proseso at port ay minarkahan ng konteksto ng SELinux:

  • Para sa mga file at folder, ang mga label ay iniimbak bilang pinalawig na mga katangian sa file system at maaaring matingnan gamit ang sumusunod na command:
    $ ls -Z /etc/httpd
  • Para sa mga proseso at port, ang pag-label ay pinamamahalaan ng kernel, at maaari mong tingnan ang mga label na ito tulad ng sumusunod:

paraan

$ ps –auxZ | grep httpd

port

$ netstat -anpZ | grep httpd

Halimbawa
Ngayon tingnan natin ang isang halimbawa para mas maunawaan ang mga label at konteksto. Sabihin nating mayroon kaming isang web server na, sa halip na isang direktoryo /var/www/html/ использует /home/dan/html/. Ituturing ito ng SELinux na isang paglabag sa patakaran at hindi mo makikita ang iyong mga web page. Ito ay dahil hindi namin naitakda ang konteksto ng seguridad na nauugnay sa mga HTML file. Upang tingnan ang default na konteksto ng seguridad, gamitin ang sumusunod na command:

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

Dito nakuha namin httpd_sys_content_t bilang konteksto para sa mga html file. Kailangan naming itakda ang kontekstong pangseguridad na ito para sa aming kasalukuyang direktoryo, na kasalukuyang may sumusunod na konteksto:

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

Isang alternatibong command upang suriin ang konteksto ng seguridad ng isang file o direktoryo:

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

Gagamitin din namin ang semanage upang baguhin ang konteksto kapag nahanap na namin ang tamang konteksto ng seguridad. Upang baguhin ang konteksto ng /home/dan/html, patakbuhin ang mga sumusunod na command:

$ 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

Pagkatapos baguhin ang konteksto gamit ang semanage, ilo-load ng restorecon command ang default na konteksto para sa mga file at direktoryo. Mababasa na ngayon ng aming web server ang mga file mula sa folder /home/dan/htmldahil ang konteksto ng seguridad para sa folder na ito ay binago sa httpd_sys_content_t.

3. Lumikha ng mga lokal na patakaran

Maaaring may mga sitwasyon kung saan ang mga pamamaraan sa itaas ay walang silbi sa iyo at nakakakuha ka ng mga error (avc/denial) sa audit.log. Kapag nangyari ito, kailangan mong gumawa ng lokal na patakaran. Mahahanap mo ang lahat ng error gamit ang audit2why, gaya ng inilarawan sa itaas.

Maaari kang lumikha ng lokal na patakaran upang malutas ang mga error. Halimbawa, nakakakuha kami ng error na nauugnay sa httpd (apache) o smbd (samba), hinanap namin ang mga error at gumawa kami ng patakaran para sa kanila:

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

Dito http_policy и smb_policy ay ang mga pangalan ng mga lokal na patakaran na aming ginawa. Ngayon kailangan nating i-load ang mga nilikhang lokal na patakarang ito sa kasalukuyang patakaran ng SELinux. Ito ay maaaring gawin tulad ng sumusunod:

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

Na-download na ang aming mga lokal na patakaran at hindi na kami dapat tumanggap ng anumang avc o denail sa audit.log.

Ito ang aking pagtatangka upang tulungan kang maunawaan ang SELinux. Umaasa ako na pagkatapos basahin ang artikulong ito ay mas komportable ka sa SELinux.

Pinagmulan: www.habr.com

Magdagdag ng komento