Kohustusliku juurdepääsukontrolli juurutamine Linuxis SELinuxi või AppArmoriga


ugo/rwx standardsete lubade ja juurdepääsu kontrollnimekirjade pakutavate piirangute ületamiseks ja turvamehhanismide suurendamiseks lõi Ameerika Ühendriikide Riiklik Julgeoleku Agentuur (NSA) paindliku kohustusliku juurdepääsukontrolli (MAC) meetodi kui SELinux (lühend lühendist Security Enhanced Linux), et piirata muu hulgas protsesside võimalust pääseda süsteemi objektidele (nt failid, kataloogid, võrgupordid jne) juurde või teha neid võimalikult vähe, kuid siiski võimaldades seda mudelit hiljem modifitseerida.

Teine populaarne ja laialt kasutatav MAC on AppArmor, mis lisaks SELinuksi pakutavatele funktsioonidele sisaldab õpperežiimi, mis võimaldab süsteemil\"õppida \" konkreetse rakenduse käitumist ja seada piiranguid, seadistades profiilid rakenduse ohutuks kasutamiseks .

CentOS 7-s on SELinux inkorporeeritud kernelisse ja see on vaikimisi lubatud režiimis Enforcing (täpsemalt järgmises osas), erinevalt OpenSUSE ja Ubuntu, mis kasutavad AppArmorit.

Selles artiklis selgitame SELinuksi ja AppArmori põhitõdesid ning seda, kuidas ühte neist tööriistadest enda kasuks kasutada sõltuvalt teie valitud levitamisest.

SELinuxi sissejuhatus ja kuidas seda CentOS 7-s kasutada

Turvalisuse täiustatud Linux saab töötada kahel erineval viisil:

  1. Jõustamine: SELinux keelab juurdepääsu SELinuksi eeskirjade alusel, mis on turvamootorit juhtivate juhiste kogum.
  2. Lubav: SELinux ei keela juurdepääsu, kuid keeldumiste korral logitakse toimingud, mis oleks jõustamisrežiimis töötamise korral keelatud.

SELinuxi saab ka keelata. Kuigi see pole ise töörežiim, on see siiski valik. Kuid selle tööriista kasutamise õppimine on parem kui lihtsalt selle ignoreerimine. Pea seda meeles!

SELinuksi praeguse režiimi kuvamiseks kasutage getenforce . Kui soovite töörežiimi vahetada, kasutage setenforce 0 (selle määramiseks Permissive) või setenforce 1 (jõustamine).

Kuna see muudatus taaskäivitamise korral ellu ei jää, peate muutma faili/etc/selinux/config ja muutma SELINUX väärtuseks kas jõustamine , lubav või keelatud püsivuse saavutamiseks taaskäivitamisel:

Kõrvalmärkusena võib märkida, et kui getenforce naaseb keelatud, peate redigeerima/etc/selinux/config soovitud töörežiimiga ja taaskäivitama. Vastasel juhul ei saa te setenforce abil töörežiimi määrata (ega seda ümber lülitada).

Üks tüüpiline setenforce kasutusala seisneb SELinuksi režiimide vahel vahetamises (alates jõustamisest lubava või vastupidi) valesti käituva või ootuspäraselt mitte töötava rakenduse tõrkeotsinguks. Kui see töötab pärast seda, kui olete seadistanud SELinuksi režiimile Lubatav režiim, võite olla kindel, et uurite SELinuksi lubade probleemi.

Kaks klassikalist juhtumit, kus peame tõenäoliselt tegelema SELinuxiga, on järgmised:

  1. Vaikepordi muutmine, kus deemon kuulab.
  2. Dokumendi DocumentRoot määramine virtuaalsele hostile väljaspool/var/www/html.

Vaatame neid kahte juhtumit järgmiste näidete abil.

Üks esimesi asju, mida enamik süsteemiadministraatoreid oma serverite turvalisuse tagamiseks teevad, on muuta sadamat, kus SSH deemon kuulab, peamiselt selleks, et heidutada pordiskannerit ja väliseid ründajaid. Selleks kasutame kataloogis/etc/ssh/sshd_config olevat pordidirektiivi, millele järgneb uus pordi number järgmiselt (sel juhul kasutame porti 9999):

Port 9999

Pärast teenuse taaskäivitamise katsetamist ja selle oleku kontrollimist näeme, et teenust ei õnnestunud käivitada:

# systemctl restart sshd
# systemctl status sshd

Kui vaatame /var/log/audit/audit.log, näeme, et SELinux takistas sshd käivitamist pordil 9999, kuna see on JBossi haldusteenuse reserveeritud port (SELinuksi logisõnumid sisaldavad sõna " AVC ”, et neid saaks teistest sõnumitest hõlpsasti tuvastada):

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

Sel hetkel keelaks enamik inimesi tõenäoliselt SELinuksi, kuid me ei tee seda. Näeme, et SELinuxil ja teises sadamas kuulaval sshd-l on võimalus koos harmoonias elada. Veenduge, et teil oleks installitud ja käivitatud pakett policycoreutils-python:

# yum install policycoreutils-python

Nende portide loendi vaatamiseks, kus SELinux lubab sshd-l kuulata. Järgmisel pildil näeme ka seda, et port 9999 oli reserveeritud teisele teenusele ja seetõttu ei saa me seda praegu teise teenuse käitamiseks kasutada:

# semanage port -l | grep ssh

Muidugi võiksime SSH jaoks valida mõne teise pordi, kuid kui oleme kindlad, et me ei pea seda konkreetset masinat ühegi JBossiga seotud teenuse jaoks kasutama, saame seejärel muuta olemasolevat SELinuksi reeglit ja määrata selle pordi hoopis SSH-le:

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

Pärast seda saame kasutada esimest semanage'i käsku, et kontrollida, kas port on õigesti määratud, või valikuid -lC (loendi kohandatud lühend):

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

Nüüd saame SSH taaskäivitada ja teenusega porti 9999 abil ühenduse luua. Pange tähele, et see muudatus jääb taaskäivitamise korral ellu.

Kui peate seadistama Apache'i virtuaalse hosti, kasutades DocumentRootina muud kataloogi kui/var/www/html (öelge näiteks/websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Apache keeldub sisu esitamast, kuna index.html on sildistatud default_t SELinuksi tüübiga, millele Apache ei pääse juurde:

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

Nagu eelmises näites, saate ka järgmise käsu abil veenduda, et see on tõesti SELinuxiga seotud probleem:

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

/ Websrv/sites/gabriel/public_html sildi rekursiivseks muutmiseks httpd_sys_content_t toimige järgmiselt.

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

Ülaltoodud käsk annab Apache'ile kirjutuskaitstud juurdepääsu sellele kataloogile ja selle sisule.

Lõpuks tehke eeskirja rakendamiseks (ja sildi muutmise viivitamatu jõustamiseks) järgmist.

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

Nüüd peaksite saama kataloogi juurde pääseda:

# wget http://localhost/index.html

Lisateavet SELinuksi kohta leiate Fedora 22 SELinuxi ja administraatori juhendist.