Utekelezaji wa Udhibiti wa Ufikiaji wa Lazima na SELinux au AppArmor katika Linux


Ili kuondokana na vikwazo vya na kuongeza mbinu za usalama zinazotolewa na ruhusa za kawaida za ugo/rwx na orodha za udhibiti wa ufikiaji, Shirika la Usalama wa Taifa la Marekani (NSA) lilibuni mbinu inayoweza kubadilika ya Udhibiti wa Ufikiaji wa Lazima (MAC) inayojulikana. kama SELinux (fupi kwa ajili ya Linux Iliyoimarishwa Usalama) ili kuzuia miongoni mwa mambo mengine, uwezo wa michakato ya kufikia au kufanya shughuli nyingine kwenye vipengee vya mfumo (kama vile faili, saraka, bandari za mtandao, n.k) kwa ruhusa ndogo iwezekanavyo, wakati bado. kuruhusu marekebisho ya baadaye kwa mtindo huu.

MAC nyingine maarufu na inayotumika sana ni AppArmor, ambayo pamoja na vipengele vilivyotolewa na SELinux, inajumuisha hali ya kujifunza ambayo inaruhusu mfumo kujifunza jinsi programu mahususi inavyofanya kazi, na kuweka mipaka kwa kusanidi wasifu kwa matumizi salama ya programu. .

Katika CentOS 7, SELinux imejumuishwa kwenye kernel yenyewe na imewezeshwa katika hali ya Utekelezaji kwa chaguo-msingi (zaidi juu ya hii katika sehemu inayofuata), kinyume na openSUSE na Ubuntu ambayo hutumia AppArmor.

Katika makala hii tutaelezea mambo muhimu ya SELinux na AppArmor na jinsi ya kutumia mojawapo ya zana hizi kwa manufaa yako kulingana na usambazaji uliochaguliwa.

Utangulizi wa SELinux na Jinsi ya Kuitumia kwenye CentOS 7

Linux Iliyoimarishwa Usalama inaweza kufanya kazi kwa njia mbili tofauti:

  1. Kutekeleza: SELinux inakataa ufikiaji kulingana na sheria za sera za SELinux, seti ya miongozo inayodhibiti injini ya usalama.
  2. Ruhusa: SELinux haikatai ufikiaji, lakini kukataliwa kunawekwa kwa vitendo ambavyo vingekataliwa ikiwa inaendeshwa katika hali ya kutekeleza.

SELinux pia inaweza kulemazwa. Ingawa sio hali ya operesheni yenyewe, bado ni chaguo. Hata hivyo, kujifunza jinsi ya kutumia chombo hiki ni bora kuliko kupuuza tu. Weka akilini!

Ili kuonyesha hali ya sasa ya SELinux, tumia getenforce. Ikiwa ungependa kubadilisha hali ya uendeshaji, tumia setenforce 0 (ili kuiweka Ruhusa) au setenforce 1 (Enforcing).

Kwa kuwa mabadiliko haya hayatadumu kuwashwa upya, utahitaji kuhariri /etc/selinux/config faili na kuweka kigezo cha SELINUX kuwa ama kutekeleza, ruhusa, au imezimwa ili kupata kuendelea katika kuwashwa upya:

Kwa kidokezo cha kando, ikiwa getenforce itarejesha Imezimwa, itabidi uhariri /etc/selinux/config ukitumia modi ya uendeshaji unayotaka na uwashe upya. Vinginevyo, hutaweza kuweka (au kugeuza) hali ya uendeshaji kwa setenforce.

Mojawapo ya matumizi ya kawaida ya setenforce inajumuisha kugeuza kati ya modi za SELinux (kutoka kutekeleza hadi kuruhusu au kwa njia nyingine) ili kutatua programu ambayo inatenda vibaya au haifanyi kazi inavyotarajiwa. Iwapo itafanya kazi baada ya kuweka SELinux kwa Hali ya Ruhusa, unaweza kuwa na uhakika kuwa unatazama suala la ruhusa za SELinux.

Kesi mbili za kawaida ambapo tutalazimika kushughulika na SELinux ni:

  1. Kubadilisha mlango chaguomsingi ambapo daemon inasikiza.
  2. Kuweka maagizo ya DocumentRoot kwa mwenyeji pepe nje ya /var/www/html.

Wacha tuangalie kesi hizi mbili kwa kutumia mifano ifuatayo.

Mojawapo ya jambo la kwanza ambalo wasimamizi wengi wa mfumo hufanya ili kulinda seva zao ni kubadilisha mlango ambapo daemon ya SSH husikiza, haswa ili kukatisha tamaa vichanganuzi vya bandari na washambuliaji wa nje. Ili kufanya hivyo, tunatumia maagizo ya Bandari katika /etc/ssh/sshd_config ikifuatiwa na nambari mpya ya bandari kama ifuatavyo (tutatumia bandari 9999 katika kesi hii):

Port 9999

Baada ya kujaribu kuanzisha tena huduma na kuangalia hali yake tutaona kuwa imeshindwa kuanza:

# systemctl restart sshd
# systemctl status sshd

Ikiwa tutaangalia /var/log/audit/audit.log, tutaona kwamba sshd ilizuiwa kuanza kwenye bandari 9999 na SELinux kwa sababu hiyo ni bandari iliyohifadhiwa kwa huduma ya Usimamizi wa JBoss (ujumbe wa logi wa SELinux ni pamoja na neno AVC ili ziweze kutambuliwa kwa urahisi kutoka kwa jumbe zingine):

# cat /var/log/audit/audit.log | grep AVC | tail -1

Kwa wakati huu watu wengi labda wangezima SELinux lakini hatutafanya. Tutaona kuwa kuna njia ya SELinux, na sshd kusikiliza kwenye bandari tofauti, kuishi kwa maelewano pamoja. Hakikisha una kifurushi cha policycoreutils-python kilichosakinishwa na kukimbia:

# yum install policycoreutils-python

Kuangalia orodha ya bandari ambapo SELinux inaruhusu sshd kusikiliza. Katika picha ifuatayo tunaweza pia kuona kwamba bandari 9999 ilihifadhiwa kwa huduma nyingine na kwa hivyo hatuwezi kuitumia kuendesha huduma nyingine kwa sasa:

# semanage port -l | grep ssh

Kwa kweli tunaweza kuchagua bandari nyingine ya SSH, lakini ikiwa tuna hakika kwamba hatutahitaji kutumia mashine hii maalum kwa huduma zozote zinazohusiana na JBoss, basi tunaweza kurekebisha sheria iliyopo ya SELinux na kukabidhi bandari hiyo kwa SSH badala yake:

# semanage port -m -t ssh_port_t -p tcp 9999

Baada ya hapo, tunaweza kutumia amri ya kwanza ya semanage kuangalia ikiwa lango liliwekwa kwa usahihi, au chaguzi za -lC (fupi kwa orodha maalum):

# semanage port -lC
# semanage port -l | grep ssh

Sasa tunaweza kuwasha upya SSH na kuunganisha kwenye huduma kwa kutumia mlango 9999. Kumbuka kuwa mabadiliko haya YATASALIMIA ikiwa yatawashwa tena.

Ikiwa unahitaji kusanidi mwenyeji wa Apache kwa kutumia saraka nyingine isipokuwa /var/www/html kama DocumentRoot (sema, kwa mfano, /websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Apache itakataa kutoa maudhui kwa sababu index.html imewekewa lebo ya default_t aina ya SELinux, ambayo Apache haiwezi kufikia:

# wget http://localhost/index.html
# ls -lZ /websrv/sites/gabriel/public_html/index.html

Kama ilivyo kwa mfano uliopita, unaweza kutumia amri ifuatayo ili kuthibitisha kuwa kweli hili ni suala linalohusiana na SELinux:

# cat /var/log/audit/audit.log | grep AVC | tail -1

Ili kubadilisha lebo ya /websrv/sites/gabriel/public_html kwa kujirudia kwa httpd_sys_content_t, fanya:

# semanage fcontext -a -t httpd_sys_content_t "/websrv/sites/gabriel/public_html(/.*)?"

Amri iliyo hapo juu itatoa ufikiaji wa Apache wa kusoma tu kwa saraka hiyo na yaliyomo.

Hatimaye, ili kutumia sera (na kufanya mabadiliko ya lebo yafanyike mara moja), fanya:

# restorecon -R -v /websrv/sites/gabriel/public_html

Sasa unapaswa kupata saraka:

# wget http://localhost/index.html

Kwa habari zaidi juu ya SELinux, rejelea Fedora 22 SELinux na mwongozo wa Msimamizi.