Biztonság felsőfokon: SELinux alapok Fedora rendszereken

A digitális világban a biztonság sosem volt még ilyen kritikus fontosságú. A fenyegetések folyamatosan fejlődnek, és a hagyományos védelmi mechanizmusok gyakran nem elegendőek. Itt jön képbe a SELinux (Security-Enhanced Linux), egy olyan technológia, amely alapjaiban változtatja meg a Linux rendszerek biztonsági modelljét. A Fedora operációs rendszer, mint innovatív úttörő, hosszú évek óta integrálja és használja a SELinux-ot, így kiváló platformot biztosít a megismeréséhez és elsajátításához.

Sokan tartanak tőle, bonyolultnak és megfoghatatlannak tartják, pedig a SELinux egy rendkívül erőteljes eszköz, amely, ha helyesen konfigurálják, áttörhetetlen védelmi réteget biztosít a rendszernek. Ez a cikk arra hivatott, hogy eloszlassa a tévhiteket, és bevezesse Önt a SELinux alapjaiba Fedora rendszereken, lépésről lépésre megmutatva, hogyan ellenőrizheti, kezelheti és oldhatja meg a vele kapcsolatos leggyakoribb problémákat. Készüljön fel, hogy a biztonság következő szintjére emelje rendszerét!

Miért Van Szükségünk SELinuxra? A Hagyományos Biztonság Határai

Ahhoz, hogy megértsük a SELinux jelentőségét, először tekintsük át a hagyományos Linux biztonsági modellt, az úgynevezett Diszkrecionális Hozzáférés-vezérlést (DAC – Discretionary Access Control). Ez az, amit mindannyian ismerünk: fájlok és könyvtárak hozzáférési jogai (olvasás, írás, futtatás), amelyek felhasználókhoz és csoportokhoz vannak rendelve (pl. rwx r-x r--). A DAC rendszerben a felhasználók maguk dönthetik el, ki férhet hozzá a fájljaikhoz. Ez rendben is van egy alapszintű védelemhez, de mi történik, ha egy szolgáltatás biztonsága sérül, vagy maga a root felhasználó kompromittálódik?

Képzeljünk el egy webszervert (Apache vagy Nginx), amely általában egy alacsony jogosultságú felhasználóként (pl. apache vagy nginx) fut. Ha egy kártékony támadó kihasznál egy biztonsági rést a webszerver szoftverében, akkor a támadó az apache felhasználó nevében hajtja végre a műveleteit. A DAC modellben ez azt jelentené, hogy a támadó hozzáférhetne minden olyan fájlhoz és erőforráshoz, amihez az apache felhasználónak joga van – akár adatbázisokhoz, más konfigurációs fájlokhoz, vagy akár a teljes rendszert feltérképezhetné. A DAC korlátai itt válnak nyilvánvalóvá: nem tudja megakadályozni, hogy egy legitim folyamat (még ha kompromittált is) a saját jogosultságain belül kárt tegyen.

Itt lép be a képbe a Mandatory Access Control (MAC), aminek a SELinux az egyik legismertebb megvalósítása. A MAC rendszerben a hozzáférési döntéseket egy központi policy (szabályzat) hozza meg, nem pedig a felhasználók. Ez azt jelenti, hogy még egy root jogosultságú felhasználó vagy egy kompromittált szolgáltatás sem tehet meg bármit, ha a policy megtiltja. A SELinux egy „minden alapértelmezetten tiltott” (default deny) elven alapuló rendszert valósít meg, ahol minden hozzáférést explicit módon engedélyezni kell. Ez a „defence in depth” megközelítés lényegi eleme.

SELinux Alapfogalmak és Működési Elvek

A SELinux megértéséhez kulcsfontosságú néhány alapfogalom tisztázása:

Kontextus (Context)

A kontextus a SELinux szíve és lelke. Minden fájl, folyamat, hálózati port és egyéb rendszerobjektum rendelkezik egy SELinux kontextussal. Ez a kontextus írja le az objektum biztonsági jellemzőit. Egy kontextus négy részből áll, kettő általában elhagyható, de a két legfontosabb mindig jelen van:

  • User (Felhasználó): A SELinux felhasználó, nem azonos a Linux felhasználóval (pl. system_u).
  • Role (Szerep): Meghatározza a SELinux felhasználó által elérhető tartományokat (pl. object_r, system_r).
  • Type (Típus): Ez a legfontosabb elem. A típus definiálja az objektum funkcióját és azt, hogy milyen hozzáféréseket engedélyeznek vagy tiltanak neki. Folyamatok esetén a típust tartománynak (domain), fájlok és egyéb objektumok esetén típusnak (type) nevezzük. Például egy webszerver folyamat a httpd_t tartományban fut, míg a weboldalak tartalma httpd_sys_content_t típusú.
  • Sensitivity (Érzékenység): Katonai és kormányzati rendszerekben használt több szintű biztonságra (MLS – Multi-Level Security) utal (pl. s0). Otthoni és vállalati rendszereknél ez általában s0.

A leggyakrabban látott forma: user:role:type:sensitivity, pl. system_u:object_r:httpd_sys_content_t:s0.

Policy (Szabályzat)

A policy egy előre definiált szabályrendszer, amely meghatározza, hogy az egyes kontextusok között milyen interakciók engedélyezettek. Például a policy tartalmaz egy szabályt, amely kimondja, hogy a httpd_t tartományban futó folyamatok olvashatják a httpd_sys_content_t típusú fájlokat. Ha egy folyamat megpróbál hozzáférni egy olyan objektumhoz, amelynek kontextusa alapján a policy nem engedélyezi, a SELinux blokkolja a hozzáférést és naplózza az eseményt.

Enforcement Mode (Kényszerítő Mód)

A SELinux három különböző módban futhat:

  • Enforcing: Ez az alapértelmezett és legbiztonságosabb mód. A SELinux aktívan blokkolja az összes, a policy által nem engedélyezett műveletet, és naplózza azokat.
  • Permissive: Ebben a módban a SELinux nem blokkol semmilyen hozzáférést, de továbbra is naplózza az összes, a policy által tiltott tevékenységet. Ez a mód ideális a hibakereséshez vagy új szolgáltatások bevezetéséhez, mivel láthatja, mi lenne blokkolva anélkül, hogy a működést megzavarná.
  • Disabled: A SELinux teljesen kikapcsolva van. Ez a legkevésbé biztonságos mód, és általában nem ajánlott, hacsak nincs rá különleges oka. Ha kikapcsolja a SELinux-ot, újra kell címkéznie az egész fájlrendszert, amikor újra engedélyezi, ami sok időt vehet igénybe.

SELinux Állapotának Ellenőrzése és Kezelése

A SELinux állapotának ellenőrzése és módosítása egyszerű feladat. Íme a legfontosabb parancsok:

  • A SELinux aktuális állapotának lekérdezése:
    sestatus

    Ez részletes információt ad, beleértve a jelenlegi módot (enforcing, permissive, disabled) és a használt policyt.

  • Csak az aktuális mód lekérdezése:
    getenforce
  • Az aktuális mód ideiglenes beállítása (csak a következő újraindításig érvényes):
    sudo setenforce [Enforcing|Permissive|0|1]

    Ahol Enforcing vagy 1 az aktív mód, Permissive vagy 0 pedig az engedélyező mód. Például: sudo setenforce Permissive.

  • Az indításkor érvényes mód tartós beállítása:

    Ehhez szerkesztenie kell a /etc/selinux/config fájlt. Keresse meg a SELINUX= sort és módosítsa:

    sudo nano /etc/selinux/config
    # This file controls the state of SELinux on the system.
    # SELINUX= can take one of these three values:
    #       enforcing - SELinux security policy is enforced.
    #       permissive - SELinux prints warnings instead of enforcing.
    #       disabled - No SELinux policy is loaded.
    SELINUX=enforcing
    # SELINUXTYPE= can take one of these three values:
    #       targeted - Targeted processes are protected,
    #                  the rest are not.
    #       minimum - Process protections are a subset of targeted.
    #       mls - Multi Level Security protection.
    SELINUXTYPE=targeted

    Módosítás után mentse a fájlt, és indítsa újra a rendszert a változtatások érvénybe lépéséhez.

A Kontextusok Megértése és Kezelése

A kontextusok helyes beállítása alapvető fontosságú a SELinux hatékony működéséhez. Íme, hogyan kezelheti őket:

Fájlkontextusok megtekintése

Használja az ls -Z parancsot a fájlok és könyvtárak SELinux kontextusának megtekintéséhez:

ls -Z /var/www/html/index.html

Példa kimenet: -rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html. Itt a httpd_sys_content_t a fájl típusa.

Folyamatkontextusok megtekintése

A folyamatok SELinux kontextusát a ps -Z paranccsal nézheti meg:

ps -Z aux | grep httpd

Példa kimenet: system_u:system_r:httpd_t:s0 apache 9876 ... /usr/sbin/httpd. Itt a httpd_t a folyamat tartománya.

Fájlkontextusok módosítása (átmenetileg)

A chcon paranccsal ideiglenesen megváltoztathatja egy fájl vagy könyvtár kontextusát. Ez hasznos lehet hibakereséskor, de a fájlrendszer újra címkézésekor vagy a fájl mozgatásakor elvesznek a változtatások.

sudo chcon -t httpd_sys_content_t /path/to/my_web_file.html

Az -R kapcsolóval rekurzívan is megváltoztatható egy könyvtár és annak tartalma.

Fájlkontextusok tartós módosítása (a helyes út)

A SELinux policy tartalmazza a fájlrendszer címkézési szabályait, amelyek meghatározzák, hogy egy adott útvonalon lévő fájloknak milyen kontextussal kell rendelkezniük. Ha egyedi helyre telepít egy szolgáltatást, vagy új könyvtárat hoz létre, amely eltér a standardtól, akkor frissítenie kell ezeket a szabályokat a semanage fcontext paranccsal, majd alkalmaznia kell a restorecon paranccsal.

  1. Adja hozzá az új szabályt (pl. weboldalak tárolása a /srv/www könyvtárban):
    sudo semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?"

    A (/.*)? reguláris kifejezés biztosítja, hogy a könyvtár összes al_könyvtára és fájlja is megkapja a megfelelő kontextust.

  2. Alkalmazza a szabályt (címkézze újra a fájlrendszert):
    sudo restorecon -Rv /srv/www

    A -R rekurzív, a -v pedig részletes kimenetet biztosít.

Ez a módszer biztosítja, hogy a fájlok a rendszer újraindítása után is megőrizzék a helyes kontextusukat, vagy ha a fájlrendszert újra címkézik.

SELinux Booleane-ek: A Szabályzat Finomhangolása

A SELinux policy rendkívül részletes, de gyakran szükség van arra, hogy bizonyos funkciókat engedélyezzünk vagy letiltjunk anélkül, hogy az egész policyt megváltoztatnánk. Erre szolgálnak a SELinux booleane-ek. Ezek gyakorlatilag kapcsolók, amelyek bizonyos szabályokat aktiválnak vagy inaktiválnak a policyn belül.

  • Az összes elérhető boolean listázása:
    getsebool -a

    A kimenet formátuma: boolean_name --> on/off.

  • Egy boolean állapotának beállítása (átmenetileg):
    sudo setsebool boolean_name on/off

    Például: sudo setsebool httpd_can_network_connect on

  • Egy boolean állapotának tartós beállítása (újraindítás után is megmarad):
    sudo setsebool -P boolean_name on/off

    A -P kapcsoló elengedhetetlen a tartós beállításhoz. Ez a beállítás bekerül a SELinux policy konfigurációjába.

Néhány gyakran használt boolean példa:

  • httpd_can_network_connect: Engedélyezi a webkiszolgálónak, hogy hálózati kapcsolatokat kezdeményezzen más szerverekkel (pl. adatbázisokhoz).
  • allow_ftpd_full_access: Engedélyezi az FTP szervernek a teljes hozzáférést a fájlrendszerhez.
  • samba_enable_home_dirs: Engedélyezi a Samba-nak a felhasználói home könyvtárak megosztását.

Mindig keressen rá egy kapcsolódó booleanre, mielőtt manuálisan módosítaná a kontextusokat vagy kikapcsolná a SELinux-ot. A booleanek használata sokkal finomabb és biztonságosabb módja a rendszer finomhangolásának.

SELinux Naplózás és Hibakeresés

A SELinux egyik legfontosabb funkciója a részletes naplózás. Ha a SELinux blokkol egy műveletet, az egy úgynevezett AVC (Access Vector Cache) üzenetként rögzítésre kerül az audit naplóban. Ez az üzenet kulcsfontosságú a problémák azonosításához és megoldásához.

Az Audit Napló

Az audit napló alapértelmezetten a /var/log/audit/audit.log fájlban található. Ez a napló tele van részletes információkkal, de a SELinux üzenetekre a type=AVC sor alapján szűrhetünk:

sudo grep "type=AVC" /var/log/audit/audit.log

Ausearch a naplóban való kereséshez

Az ausearch parancs a legkényelmesebb módja az audit naplóban való keresésnek. Példák:

  • Keresés az összes AVC üzenetre a mai napon:
    sudo ausearch -m AVC -ts today
  • Keresés egy adott folyamat (pl. httpd) által generált AVC üzenetekre:
    sudo ausearch -c httpd --raw | audit2allow -Dw

    Az audit2allow segédprogram segítségével egyedi policy szabályokat generálhatunk a naplóüzenetek alapján, de ezt csak óvatosan és megfontoltan szabad használni, mivel gyengítheti a biztonságot, ha felelőtlenül alkalmazzuk.

Sealert a problémamegoldáshoz

A setroubleshoot-server csomag telepítése (ha még nincs telepítve) rendkívül hasznos:

sudo dnf install setroubleshoot-server

A telepítés után a sealert paranccsal vagy a grafikus felülettel (ha elérhető) elemzésre küldheti az audit napló üzeneteket. A sealert megpróbálja értelmezni a SELinux hibákat, és konkrét javaslatokat tesz a megoldásra, pl. milyen boolean-t kell beállítani, vagy milyen semanage fcontext parancsot kell futtatni. Ez egy nagyon felhasználóbarát eszköz a SELinux hibaelhárításához.

sudo sealert -a /var/log/audit/audit.log > selinux_errors.txt

Ez egy fájlba menti az elemzett hibákat és javaslatokat.

Hibakeresési tippek lépésről lépésre:

  1. Ellenőrizze az audit naplót: Ha valami nem működik, elsődlegesen az /var/log/audit/audit.log fájlban keresse a type=AVC sorokat az esemény időpontja körül.
  2. Használja a sealert-et: Ha telepítve van, futtassa a sealert-et az audit naplón. A legtöbb esetben pontosan megmondja, mi a probléma és hogyan oldható meg.
  3. Ideiglenesen állítsa át Permissive módba: Ha a sealert nem segít, vagy gyorsan kell tesztelnie, állítsa át a SELinux-ot Permissive módra (sudo setenforce Permissive). Ismételje meg a problémát okozó műveletet. Ha Permissive módban működik, de Enforcing módban nem, akkor a SELinux okozza a problémát, és a naplóban már látni fogja az üzenetet. Ne felejtse el visszakapcsolni Enforcing módba a teszt után!
  4. Keresse meg a megfelelő boolean-t: Sok esetben egy boolean egyszerű beállítása megoldja a problémát.
  5. Módosítsa a kontextust: Ha a fájl vagy könyvtár kontextusa helytelen, használja a semanage fcontext és restorecon parancsokat.

Gyakori SELinux Feladatok és Tippek

  • Webszerver tartalom nem standard helyen: Ha weboldalait nem a /var/www/html alatt tárolja, hanem mondjuk a /home/user/my_website mappában, akkor a SELinux alapértelmezetten blokkolja az Apache hozzáférését. Megoldás:
    sudo semanage fcontext -a -t httpd_sys_content_t "/home/user/my_website(/.*)?"
    sudo restorecon -Rv /home/user/my_website
  • Adatbázis elérés webszerverről: Ha a webszervernek egy külső adatbázishoz kell csatlakoznia, valószínűleg a httpd_can_network_connect boolean-t kell engedélyezni:
    sudo setsebool -P httpd_can_network_connect on
  • FTP feltöltés engedélyezése: Amennyiben FTP szervert használ, és engedélyezni szeretné a felhasználóknak a feltöltést a home könyvtárukba, a ftpd_full_access booleanre lehet szüksége:
    sudo setsebool -P ftpd_full_access on
  • Egyedi szolgáltatás futtatása: Ha saját fejlesztésű vagy nem standard szolgáltatást futtat, gyakran saját SELinux policy modulra van szüksége, vagy legalábbis pontosan meg kell értenie, milyen kontextusokkal kell rendelkeznie a szolgáltatás futtatható fájljainak és a hozzá tartozó adatoknak. A audit2allow és a sealert segíthet az ehhez szükséges szabályok azonosításában.

Konklúzió: SELinux, a Lássa Be, a Biztonság Jövője

A SELinux elsőre ijesztőnek tűnhet, de reméljük, ez a cikk segített megérteni alapjait és gyakorlati működését. Nem egy akadály, hanem egy rendkívül hatékony eszköz a rendszer biztonságának megerősítésére. Azzal, hogy megakadályozza a jogosulatlan hozzáféréseket még akkor is, ha egy alkalmazás vagy felhasználó kompromittálódik, jelentősen csökkenti a támadási felületet.

A Fedora rendszerek a SELinux teljes erejét kihasználva biztosítják a legmagasabb szintű biztonságot. Ne kapcsolja ki, hanem tanulja meg használni! Az alapok elsajátítása, a kontextusok megértése, a booleane-ek helyes alkalmazása és az audit.log értelmezése kulcsfontosságú a Fedora rendszerek profi szintű kezeléséhez. A biztonság nem egy funkció, amit bekapcsolunk, hanem egy folyamat, amit folyamatosan fejlesztünk. A SELinux ebben a folyamatban az egyik legfontosabb szövetségesünk.

Fejlessze tudását, kísérletezzen (lehetőleg tesztkörnyezetben!), és tegye rendszerét valóban biztonságossá a SELinux segítségével! A befektetett energia megtérül a nyugodtabb alvás és a megbízhatóbb rendszerek formájában.

Leave a Reply

Az e-mail címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük