Usa ka Giya sa Nagsugod sa SELinux

Usa ka Giya sa Nagsugod sa SELinux

Paghubad sa artikulo nga giandam alang sa mga estudyante sa kurso "Seguridad sa Linux"

Ang SELinux o Security Enhanced Linux usa ka gipauswag nga mekanismo sa pagkontrol sa pag-access nga gimugna sa US National Security Agency (NSA) aron malikayan ang mga makadaot nga pagsulod. Nagpatuman kini og pinugos (o mandatory) nga modelo sa pagkontrol sa pag-access (English Mandatory Access Control, MAC) sa ibabaw sa kasamtangan nga discretionary (o pinili) nga modelo (English Discretionary Access Control, DAC), nga mao, mga permiso sa pagbasa, pagsulat, pagpatuman.

Ang SELinux adunay tulo ka mga mode:

  1. Pagpatuman - pagdumili sa pag-access base sa mga lagda sa palisiya.
  2. permissive — pagtipig sa usa ka talaan sa mga aksyon nga naglapas sa palisiya, nga gidili sa pagpatuman nga paagi.
  3. Baldado - kompleto nga pag-disable sa SELinux.

Sa default ang mga setting naa /etc/selinux/config

Pag-usab sa SELinux mode

Aron mahibal-an ang karon nga mode, pagdagan

$ getenforce

Aron mabag-o ang mode sa permissive ipadagan ang mosunud nga mando

$ setenforce 0

o, aron usbon ang mode gikan sa matugoton sa nagpatuman, ipatuman

$ setenforce 1

Kung kinahanglan nimo nga hingpit nga pag-disable ang SELinux, mahimo ra kini pinaagi sa configuration file

$ vi /etc/selinux/config

Aron ma-disable, usba ang SELINUX parameter sama sa mosunod:

SELINUX=disabled

Pag-set up sa SELinux

Ang matag file ug proseso gimarkahan sa konteksto sa SELinux, nga adunay dugang nga kasayuran sama sa tiggamit, papel, tipo, ug uban pa. Kung kini ang imong unang higayon nga makapahimo sa SELinux, kinahanglan nimo nga i-configure ang konteksto ug mga label. Ang proseso sa pag-assign sa mga label ug konteksto nailhan nga tagging. Sa pagsugod sa pagmarka, sa configuration file atong usbon ang mode sa matugoton.

$ vi /etc/selinux/config
SELINUX=permissive

Human sa pag-set sa mode matugoton, paghimo og walay sulod nga tinago nga file sa gamut nga adunay ngalan autorelabel

$ touch /.autorelabel

ug i-reboot ang computer

$ init 6

Note: Gigamit namo ang mode matugoton alang sa pagmarka, sukad sa paggamit sa mode nagpatuman mahimong hinungdan nga ang sistema mag-crash sa panahon sa pag-reboot.

Ayaw kabalaka kung ang pag-download ma-stuck sa usa ka file, ang pagmarka magdugay. Kung kompleto na ang pagmarka ug ma-boot ang imong sistema, makaadto ka sa configuration file ug i-set ang mode nagpatumanug modagan usab:

$ setenforce 1

Malampuson na nimo karon ang SELinux sa imong kompyuter.

Pag-monitor sa mga log

Mahimong nasugatan nimo ang pipila ka mga sayup sa panahon sa pagmarka o samtang nagdagan ang sistema. Aron masusi kung ang imong SELinux nagtrabaho sa husto ug kung wala kini nagpugong sa pag-access sa bisan unsang pantalan, aplikasyon, ug uban pa, kinahanglan nimo nga tan-awon ang mga troso. Ang SELinux log nahimutang sa /var/log/audit/audit.log, apan dili nimo kinahanglan nga basahon ang tibuok nga butang aron makit-an ang mga sayup. Mahimo nimong gamiton ang audit2why utility aron makit-an ang mga sayup. Pagdalagan ang mosunod nga sugo:

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

Ingon usa ka sangputanan, makadawat ka usa ka lista sa mga sayup. Kung walay mga sayop sa log, nan walay mga mensahe nga ipakita.

Pag-configure sa SELinux Policy

Ang polisiya sa SELinux usa ka hugpong sa mga lagda nga nagdumala sa mekanismo sa seguridad sa SELinux. Ang usa ka palisiya naghubit sa usa ka hugpong sa mga lagda alang sa usa ka piho nga palibot. Karon kita makakat-on kon sa unsang paagi sa pag-configure sa mga palisiya sa pagtugot sa access sa gidili nga mga serbisyo.

1. Mga lohikal nga kantidad (mga switch)

Ang mga switch (booleans) nagtugot kanimo sa pag-ilis sa mga bahin sa usa ka polisiya sa runtime, nga dili kinahanglang maghimo ug bag-ong mga polisiya. Gitugotan ka nila nga maghimo mga pagbag-o nga wala mag-reboot o mag-recompile sa mga palisiya sa SELinux.

Pananglitan:
Ingnon ta nga gusto namong ipaambit ang home directory sa usa ka user pinaagi sa FTP read/write, ug gipaambit na namo kini, apan sa among pagsulay sa pag-access, wala kami'y makita. Kini tungod kay ang polisiya sa SELinux nagpugong sa FTP server sa pagbasa ug pagsulat sa home directory sa user. Kinahanglan natong usbon ang polisiya aron ang FTP server maka-access sa mga home directory. Atong tan-awon kung adunay bisan unsang mga switch alang niini pinaagi sa pagbuhat

$ semanage boolean -l

Kini nga mando maglista sa mga magamit nga switch sa ilang kasamtangan nga kahimtang (on o wala) ug paghulagway. Mahimo nimong mapino ang imong pagpangita pinaagi sa pagdugang sa grep aron makit-an ang mga resulta nga ftp-only:

$ semanage boolean -l | grep ftp

ug imong makita ang mosunod

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

Kini nga switch gi-disable, mao nga ato kining gamiton setsebool $ setsebool ftp_home_dir on

Karon ang among ftp daemon makahimo na sa pag-access sa home directory sa user.
Mubo nga sulat: Mahimo ka usab makakuha usa ka lista sa magamit nga mga switch nga wala’y paghulagway pinaagi sa pagbuhat getsebool -a

2. Mga label ug konteksto

Kini ang labing kasagaran nga paagi sa pagpatuman sa palisiya sa SELinux. Ang matag file, folder, proseso ug pantalan gimarkahan sa konteksto sa SELinux:

  • Alang sa mga file ug folder, ang mga label gitipigan ingon nga gipalapdan nga mga hiyas sa file system ug mahimong tan-awon gamit ang mosunod nga sugo:
    $ ls -Z /etc/httpd
  • Alang sa mga proseso ug mga pantalan, ang pagmarka gidumala sa kernel, ug mahimo nimong tan-awon kini nga mga label sama sa mosunod:

proseso

$ ps –auxZ | grep httpd

pantalan

$ netstat -anpZ | grep httpd

Pananglitan:
Karon tan-awon nato ang usa ka pananglitan aron mas masabtan ang mga label ug konteksto. Ingnon ta nga naa tay web server nga, imbes nga direktoryo /var/www/html/ использует /home/dan/html/. Giisip kini sa SELinux nga usa ka paglapas sa palisiya ug dili nimo makita ang imong mga panid sa web. Kini tungod kay wala namo gitakda ang konteksto sa seguridad nga nalangkit sa mga HTML file. Aron makita ang default nga konteksto sa seguridad, gamita ang mosunud nga mando:

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

Dinhi nakuha namo httpd_sys_content_t isip konteksto sa html files. Kinahanglan namon nga ibutang kini nga konteksto sa seguridad alang sa among kasamtangan nga direktoryo, nga sa pagkakaron adunay mosunod nga konteksto:

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

Usa ka alternatibo nga sugo aron masusi ang konteksto sa seguridad sa usa ka file o direktoryo:

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

Gamiton usab namo ang semanage aron usbon ang konteksto sa higayon nga makit-an na namo ang hustong konteksto sa seguridad. Aron usbon ang konteksto sa /home/dan/html, padagana ang mosunod nga mga sugo:

$ 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

Human mausab ang konteksto gamit ang semanage, ang restorecon command magkarga sa default nga konteksto para sa mga file ug direktoryo. Ang among web server makahimo na sa pagbasa sa mga file gikan sa folder /home/dan/htmltungod kay ang konteksto sa seguridad alang niini nga folder giusab ngadto sa httpd_sys_content_t.

3. Paghimo og lokal nga mga palisiya

Mahimong adunay mga sitwasyon diin ang mga pamaagi sa ibabaw wala’y kapuslanan kanimo ug nakakuha ka mga sayup (avc/denial) sa audit.log. Kung mahitabo kini, kinahanglan nimo nga maghimo usa ka lokal nga palisiya. Makita nimo ang tanang mga sayop gamit ang audit2why, sama sa gihulagway sa ibabaw.

Makahimo ka og lokal nga palisiya aron masulbad ang mga sayup. Pananglitan, nakakuha kami usa ka sayup nga may kalabutan sa httpd (apache) o smbd (samba), among gi-grep ang mga sayup ug naghimo usa ka palisiya alang 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

kini mao ang http_policy и smb_policy mao ang mga ngalan sa lokal nga mga palisiya nga among gihimo. Karon kinahanglan namon nga i-load kini nga gihimo nga lokal nga mga palisiya sa karon nga palisiya sa SELinux. Mahimo kini sama sa mosunod:

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

Na-download na ang among lokal nga mga polisiya ug dili na kami makadawat ug bisan unsang avc o denail sa audit.log.

Kini ang akong pagsulay sa pagtabang kanimo nga masabtan ang SELinux. Nanghinaut ko nga human sa pagbasa niini nga artikulo mobati ka nga mas komportable sa SELinux.

Source: www.habr.com

Idugang sa usa ka comment