Innleiða lögboðna aðgangsstýringu með SELinux eða AppArmor í Linux


Til að vinna bug á takmörkunum á og auka öryggiskerfin sem stöðluð ugo/rwx heimildir og aðgangsstýringarlistar bjóða upp á, mótaði Þjóðaröryggisstofnun Bandaríkjanna (NSA) sveigjanlega lögboðna aðgangsstýringu (MAC) aðferð sem þekkt er. sem SELinux (stutt fyrir Security Enhanced Linux) til að takmarka meðal annars getu ferla til að fá aðgang að eða framkvæma aðrar aðgerðir á kerfishlutum (svo sem skrár, möppur, nettengi o.s.frv.) í sem minnst leyfi, en samt gerir ráð fyrir síðari breytingum á þessu líkani.

Annar vinsæll og mikið notaður MAC er AppArmor, sem til viðbótar við eiginleikana sem SELinux býður upp á, inniheldur námsham sem gerir kerfinu kleift að „læra“ hvernig tiltekið forrit hegðar sér og setja takmörk með því að stilla snið fyrir örugga notkun forrita. .

Í CentOS 7 er SELinux felld inn í kjarnann sjálfan og er sjálfgefið virkt í enforcing mode (meira um þetta í næsta kafla), öfugt við openSUSE og Ubuntu sem nota AppArmor.

Í þessari grein munum við útskýra grundvallaratriði SELinux og AppArmor og hvernig á að nota eitt af þessum verkfærum þér til hagsbóta, allt eftir valinni dreifingu.

Kynning á SELinux og hvernig á að nota það á CentOS 7

Öryggisbætt Linux getur starfað á tvo mismunandi vegu:

  1. Að framfylgja: SELinux neitar aðgangi á grundvelli SELinux stefnureglna, safn leiðbeininga sem stjórna öryggisvélinni.
  2. Leyfilegt: SELinux neitar ekki aðgangi, en neitanir eru skráðar fyrir aðgerðir sem hefði verið hafnað ef keyrt væri í framfylgdarham.

Einnig er hægt að slökkva á SELinux. Þó að það sé ekki rekstrarhamur sjálfur, þá er það samt valkostur. Hins vegar er betra að læra hvernig á að nota þetta tól en bara að hunsa það. Hafðu það í huga!

Til að sýna núverandi stillingu SELinux, notaðu getenforce. Ef þú vilt skipta um aðgerðaham, notaðu setenforce 0 (til að stilla það á leyfilegt) eða setenforce 1 (Enforcing).

Þar sem þessi breyting mun ekki lifa af endurræsingu þarftu að breyta /etc/selinux/config skránni og stilla SELINUX breytuna á annað hvort enforcing, permissive eða >óvirkt til að ná þrautseigju við endurræsingu:

Til hliðar, ef getenforce skilar Disabled, verður þú að breyta /etc/selinux/config með æskilegum aðgerðaham og endurræsa. Annars muntu ekki geta stillt (eða kveikt á) aðgerðahamnum með setenforce.

Ein dæmigerð notkun setenforce felst í því að skipta á milli SELinux stillinga (frá framfylgd yfir í leyfilegt eða öfugt) til að leysa forrit sem hegðar sér illa eða virkar ekki eins og búist var við. Ef það virkar eftir að þú stillir SELinux á leyfilega stillingu geturðu verið viss um að þú sért að skoða SELinux leyfisvandamál.

Tvö klassísk tilvik þar sem við munum líklegast þurfa að takast á við SELinux eru:

  1. Breyting á sjálfgefna gáttinni þar sem púkinn hlustar á.
  2. Stilling DocumentRoot tilskipunarinnar fyrir sýndarhýsil utan /var/www/html.

Við skulum skoða þessi tvö tilvik með því að nota eftirfarandi dæmi.

Eitt af því fyrsta sem flestir kerfisstjórar gera til að tryggja netþjóna sína er að breyta höfninni þar sem SSH-púkinn hlustar á, aðallega til að letja gáttaskanna og utanaðkomandi árásarmenn. Til að gera þetta notum við Port tilskipunina í /etc/ssh/sshd_config og síðan nýja portnúmerið sem hér segir (við munum nota port 9999 í þessu tilfelli):

Port 9999

Eftir að hafa reynt að endurræsa þjónustuna og athugað stöðu hennar munum við sjá að það tókst ekki að ræsa:

# systemctl restart sshd
# systemctl status sshd

Ef við skoðum /var/log/audit/audit.log munum við sjá að SELinux kom í veg fyrir að sshd gæti byrjað á höfn 9999 vegna þess að það er frátekin höfn fyrir JBoss Management þjónustuna (SELinux notendaskilaboð innihalda orðið AVC“ þannig að auðvelt sé að bera kennsl á þau úr öðrum skilaboðum):

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

Á þessum tímapunkti myndu flestir líklega slökkva á SELinux en við gerum það ekki. Við munum sjá að það er leið fyrir SELinux, og sshd að hlusta á annarri höfn, til að lifa í sátt og samlyndi. Gakktu úr skugga um að þú hafir policycoreutils-python pakkann uppsettan og keyrt:

# yum install policycoreutils-python

Til að skoða lista yfir tengin þar sem SELinux leyfir sshd að hlusta á. Á eftirfarandi mynd getum við líka séð að höfn 9999 var frátekin fyrir aðra þjónustu og því getum við ekki notað hana til að keyra aðra þjónustu í bili:

# semanage port -l | grep ssh

Auðvitað gætum við valið aðra höfn fyrir SSH, en ef við erum viss um að við þurfum ekki að nota þessa tilteknu vél fyrir neina JBoss tengda þjónustu, getum við breytt núverandi SELinux reglu og úthlutað þeirri höfn til SSH í staðinn:

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

Eftir það getum við notað fyrstu semanage skipunina til að athuga hvort gáttinni hafi verið rétt úthlutað, eða -lC valmöguleikana (stytting á list sérsniðnum):

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

Við getum nú endurræst SSH og tengst þjónustunni með því að nota port 9999. Athugaðu að þessi breyting mun lifa af endurræsingu.

Ef þú þarft að setja upp Apache sýndargestgjafa með því að nota aðra möppu en /var/www/html sem DocumentRoot (segðu til dæmis /websrv/sites/gabriel/public_html):

DocumentRoot “/websrv/sites/gabriel/public_html”

Apache mun neita að birta innihaldið vegna þess að index.html hefur verið merkt með default_t SELinux gerðinni, sem Apache hefur ekki aðgang að:

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

Eins og með fyrra dæmið geturðu notað eftirfarandi skipun til að staðfesta að þetta sé örugglega SELinux-tengt mál:

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

Til að breyta merkinu /websrv/sites/gabriel/public_html endurkvæmt í httpd_sys_content_t, gerðu:

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

Ofangreind skipun mun veita Apache skrifvarinn aðgang að þeirri möppu og innihaldi hennar.

Að lokum, til að beita stefnunni (og láta merkisbreytinguna gilda strax), gerðu:

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

Nú ættir þú að geta fengið aðgang að möppunni:

# wget http://localhost/index.html

Fyrir frekari upplýsingar um SELinux, skoðaðu Fedora 22 SELinux og stjórnandahandbókina.