Aloittelijan opas SELinuxiin

Aloittelijan opas SELinuxiin

Kurssin opiskelijoille laaditun artikkelin käännös "Linux Security"

SELinux tai Security Enhanced Linux on Yhdysvaltain kansallisen turvallisuusviraston (NSA) kehittämä parannettu kulunvalvontamekanismi, joka estää haitalliset tunkeutumiset. Se toteuttaa pakotetun (tai pakollisen) kulunvalvontamallin (English Mandatory Access Control, MAC) olemassa olevan harkinnanvaraisen (tai valikoivan) mallin (English Discretionary Access Control, DAC) päälle, toisin sanoen luku-, kirjoitus- ja suoritusoikeudet.

SELinuxilla on kolme tilaa:

  1. täytäntöönpanossa — pääsyn epääminen käytäntöjen perusteella.
  2. Salliva — pitää kirjaa toimista, jotka rikkovat käytäntöä, mikä olisi kiellettyä täytäntöönpanotilassa.
  3. Vammaiset - SELinuxin poistaminen kokonaan käytöstä.

Oletuksena asetukset ovat käytössä /etc/selinux/config

SELinux-tilojen vaihtaminen

Selvitä nykyinen tila suorittamalla

$ getenforce

Jos haluat muuttaa tilan sallivaksi, suorita seuraava komento

$ setenforce 0

tai tilan vaihtamiseksi salliva päälle täytäntöön, suorita

$ setenforce 1

Jos sinun on poistettava SELinux kokonaan käytöstä, se voidaan tehdä vain asetustiedoston kautta

$ vi /etc/selinux/config

Voit poistaa käytöstä muuttamalla SELINUX-parametria seuraavasti:

SELINUX=disabled

SELinuxin asetukset

Jokainen tiedosto ja prosessi on merkitty SELinux-kontekstilla, joka sisältää lisätietoja, kuten käyttäjä, rooli, tyyppi jne. Jos tämä on ensimmäinen kerta, kun otat SELinuxin käyttöön, sinun on ensin määritettävä konteksti ja tunnisteet. Tunnisteiden ja kontekstin määrittäminen tunnetaan nimellä merkintä. Merkitsemisen aloittamiseksi konfiguraatiotiedostossa muutamme tilaksi salliva.

$ vi /etc/selinux/config
SELINUX=permissive

Tilan asettamisen jälkeen salliva, luo tyhjään piilotettuun tiedostoon juurinimellä autorelabel

$ touch /.autorelabel

ja käynnistä tietokone uudelleen

$ init 6

Huomautus: Käytämme tilaa salliva merkitsemistä varten tilan käytöstä lähtien täytäntöön saattaa aiheuttaa järjestelmän kaatumisen uudelleenkäynnistyksen aikana.

Älä huoli, jos lataus juuttuu johonkin tiedostoon, merkitseminen kestää hetken. Kun merkintä on valmis ja järjestelmäsi on käynnistetty, voit siirtyä asetustiedostoon ja asettaa tilan täytäntöönja ajaa myös:

$ setenforce 1

Olet nyt onnistuneesti ottanut SELinuxin käyttöön tietokoneessasi.

Lokien seuranta

Olet saattanut kohdata virheitä merkinnän aikana tai järjestelmän ollessa käynnissä. Tarkistaaksesi, toimiiko SELinux oikein ja jos se ei estä pääsyä mihinkään porttiin, sovellukseen jne., sinun on katsottava lokit. SELinux-loki sijaitsee /var/log/audit/audit.log, mutta sinun ei tarvitse lukea koko juttua löytääksesi virheitä. Voit etsiä virheitä audit2why-apuohjelman avulla. Suorita seuraava komento:

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

Tämän seurauksena saat luettelon virheistä. Jos lokissa ei ollut virheitä, viestejä ei näytetä.

SELinux-käytännön määrittäminen

SELinux-käytäntö on joukko sääntöjä, jotka ohjaavat SELinuxin suojausmekanismia. Käytäntö määrittelee joukon sääntöjä tietylle ympäristölle. Nyt opimme määrittämään käytännöt sallimaan pääsyn kiellettyihin palveluihin.

1. Loogiset arvot (kytkimet)

Kytkimien (booleans) avulla voit muuttaa käytännön osia ajon aikana ilman, että sinun tarvitsee luoda uusia käytäntöjä. Niiden avulla voit tehdä muutoksia ilman uudelleenkäynnistystä tai SELinux-käytäntöjen uudelleenkääntämistä.

Esimerkki
Oletetaan, että haluamme jakaa käyttäjän kotihakemiston FTP-luku-/kirjoitustoiminnolla, ja olemme jo jakaneet sen, mutta kun yritämme käyttää sitä, emme näe mitään. Tämä johtuu siitä, että SELinux-käytäntö estää FTP-palvelinta lukemasta ja kirjoittamasta käyttäjän kotihakemistoon. Meidän on muutettava käytäntöä, jotta FTP-palvelin voi käyttää kotihakemistoja. Katsotaan, onko tähän olemassa kytkimiä tekemällä

$ semanage boolean -l

Tämä komento näyttää käytettävissä olevat kytkimet niiden nykyisen tilan (päällä tai pois päältä) ja kuvauksen kanssa. Voit tarkentaa hakuasi lisäämällä grep löytääksesi vain ftp-tuloksia:

$ semanage boolean -l | grep ftp

ja löydät seuraavat

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

Tämä kytkin on poistettu käytöstä, joten otamme sen käyttöön setsebool $ setsebool ftp_home_dir on

Nyt ftp-demonimme voi päästä käyttäjän kotihakemistoon.
Huomautus: Voit myös saada luettelon käytettävissä olevista kytkimistä ilman kuvausta tekemällä getsebool -a

2. Tunnisteet ja konteksti

Tämä on yleisin tapa toteuttaa SELinux-käytäntö. Jokainen tiedosto, kansio, prosessi ja portti on merkitty SELinux-kontekstilla:

  • Tiedostojen ja kansioiden tarrat tallennetaan laajennettuina attribuutteina tiedostojärjestelmään, ja niitä voidaan tarkastella seuraavalla komennolla:
    $ ls -Z /etc/httpd
  • Prosessien ja porttien merkintöjä hallitsee ydin, ja voit tarkastella näitä tarroja seuraavasti:

prosessi

$ ps –auxZ | grep httpd

portti

$ netstat -anpZ | grep httpd

Esimerkki
Katsotaanpa nyt esimerkkiä tunnisteiden ja kontekstin ymmärtämiseksi paremmin. Oletetaan, että meillä on web-palvelin hakemiston sijaan /var/www/html/ использует /home/dan/html/. SELinux pitää tätä käytäntöjen vastaisena, etkä voi tarkastella verkkosivujasi. Tämä johtuu siitä, että emme ole määrittäneet HTML-tiedostoihin liittyvää suojauskontekstia. Voit tarkastella oletusarvoista suojauskontekstia käyttämällä seuraavaa komentoa:

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

Tässä olemme httpd_sys_content_t html-tiedostojen kontekstina. Meidän on asetettava tämä suojauskonteksti nykyiselle hakemistollemme, jolla on tällä hetkellä seuraava konteksti:

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

Vaihtoehtoinen komento tiedoston tai hakemiston suojauskontekstin tarkistamiseksi:

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

Käytämme myös semanagea kontekstin muuttamiseksi, kun olemme löytäneet oikean suojauskontekstin. Jos haluat muuttaa /home/dan/html-kontekstia, suorita seuraavat komennot:

$ 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

Kun kontekstia on muutettu semanagen avulla, restorecon-komento lataa tiedostojen ja hakemistojen oletuskontekstin. Verkkopalvelimemme pystyy nyt lukemaan kansion tiedostoja /home/dan/htmlkoska tämän kansion suojauskonteksti on muutettu muotoon httpd_sys_content_t.

3. Luo paikallisia käytäntöjä

Saattaa olla tilanteita, joissa yllä olevista menetelmistä ei ole sinulle hyötyä ja saat virheitä (avc/denial) audit.logissa. Kun näin tapahtuu, sinun on luotava paikallinen käytäntö. Löydät kaikki virheet käyttämällä audit2why-toimintoa, kuten yllä on kuvattu.

Voit luoda paikallisen käytännön virheiden ratkaisemiseksi. Saamme esimerkiksi httpd:hen (apache) tai smbd:hen (samba) liittyvän virheen, grep virheet ja luo niille käytännön:

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

Täällä http_policy и smb_policy ovat luomiemme paikallisten käytäntöjen nimiä. Nyt meidän on ladattava nämä luodut paikalliset käytännöt nykyiseen SELinux-käytäntöön. Tämä voidaan tehdä seuraavasti:

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

Paikalliset käytäntömme on ladattu, emmekä saa enää avc- tai denail-ilmoituksia audit.logissa.

Tämä oli yritykseni auttaa sinua ymmärtämään SELinuxia. Toivon, että tämän artikkelin lukemisen jälkeen tunnet olosi mukavammaksi SELinuxin kanssa.

Lähde: will.com

Lisää kommentti