Linux biztonsági rendszerek

A Linux operációs rendszer óriási sikerének egyik oka a beágyazott, mobil eszközökön és szervereken a kernel, a kapcsolódó szolgáltatások és alkalmazások meglehetősen magas fokú biztonsága. De ha nézd meg közelebbről a Linux kernel architektúrájához, akkor lehetetlen megtalálni benne a biztonságért, mint olyanért felelős négyzetet. Hol rejtőzik a Linux biztonsági alrendszer, és miből áll?

Háttér a Linux biztonsági modulokról és a SELinuxról

A Security Enhanced Linux kötelező és szerepalapú hozzáférési modelleken alapuló szabályok és hozzáférési mechanizmusok összessége, amelyek megvédik a Linux rendszereket a potenciális fenyegetésektől, és kijavítják a diszkrecionális hozzáférés-vezérlés (DAC), a hagyományos Unix biztonsági rendszer hiányosságait. A projekt az Egyesült Államok Nemzetbiztonsági Ügynökségétől indult, és közvetlenül a Secure Computing Corporation és a MITER alvállalkozók, valamint számos kutatólaboratórium fejlesztette ki.

Linux biztonsági rendszerek
Linux biztonsági modulok

Linus Torvalds számos megjegyzést fűzött az új NSA fejlesztésekhez, hogy azok bekerülhessenek a fő Linux kernelbe. Leírt egy általános környezetet, amelyben egy sor elfogó található az objektumokkal végzett műveletek vezérlésére, valamint bizonyos védőmezők a kernel adatstruktúráiban a megfelelő attribútumok tárolására. Ezt a környezetet ezután a betölthető kernelmodulok használhatják bármilyen kívánt biztonsági modell megvalósításához. Az LSM 2.6-ban teljesen belépett a Linux kernel 2003-os verziójába.

Az LSM keretrendszer őrző mezőket tartalmaz az adatstruktúrákban, valamint a kernelkód kritikus pontjain lévő elfogási funkciókat, hogy ezeket manipulálják és hozzáférés-szabályozást hajtsanak végre. A biztonsági modulok regisztrálásához is hozzáadódik a funkció. A /sys/kernel/security/lsm felület tartalmazza a rendszer aktív moduljainak listáját. Az LSM-horogok a CONFIG_LSM-ben megadott sorrendben meghívott listákban tárolódnak. A horgokról szóló részletes dokumentációt az include/linux/lsm_hooks.h fejlécfájl tartalmazza.

Az LSM alrendszer lehetővé tette a SELinux teljes integrációját a stabil Linux kernel v2.6 változatával. A SELinux szinte azonnal a biztonságos Linux környezet de facto szabványává vált, és bekerült a legnépszerűbb disztribúciókba: RedHat Enterprise Linux, Fedora, Debian, Ubuntu.

SELinux szószedet

  • azonosság — A SELinux felhasználó nem azonos a szokásos Unix/Linux felhasználói azonosítóval, ugyanazon a rendszeren együtt létezhetnek, de lényegükben teljesen eltérőek. Minden szabványos Linux-fiók megfelelhet egy vagy többnek a SELinuxban. A SELinux identitás része az általános biztonsági környezetnek, amely meghatározza, hogy mely tartományokhoz csatlakozhat és mely tartományokhoz nem.
  • Domains - A SELinuxban a tartomány egy alany, azaz egy folyamat végrehajtási kontextusa. A tartomány közvetlenül határozza meg a folyamat hozzáférését. A tartomány alapvetően egy lista arról, hogy a folyamatok mire képesek, vagy mit tud egy folyamat a különböző típusokkal. Néhány példa a tartományokra: a sysadm_t a rendszeradminisztrációhoz, és a user_t, amely egy normál, nem privilegizált felhasználói tartomány. Az init rendszer az init_t tartományban, a megnevezett folyamat pedig a named_t tartományban fut.
  • szerep — Mi szolgál közvetítőként a tartományok és a SELinux felhasználók között. A szerepek határozzák meg, hogy a felhasználó mely tartományokhoz tartozhat, és milyen típusú objektumokhoz férhet hozzá. Ez a hozzáférés-ellenőrzési mechanizmus megakadályozza a jogosultság-eszkalációs támadások veszélyét. A szerepek a SELinuxban használt szerepköralapú hozzáférés-vezérlési (RBAC) biztonsági modellbe vannak beírva.
  • típusai — Egy objektumhoz rendelt Type Enforcement list attribútum, amely meghatározza, hogy ki férhet hozzá. Hasonló a tartománydefinícióhoz, kivéve, hogy a tartomány egy folyamatra vonatkozik, a típus pedig olyan objektumokra vonatkozik, mint például könyvtárak, fájlok, socketek stb.
  • Alanyok és tárgyak - A folyamatok alanyok, és meghatározott kontextusban vagy biztonsági tartományban futnak. Az operációs rendszer erőforrásai: a fájlok, könyvtárak, socketek stb. olyan objektumok, amelyekhez egy bizonyos típus, más szóval egy adatvédelmi szint van hozzárendelve.
  • SELinux szabályzatok — A SELinux számos házirendet használ a rendszer védelmére. A SELinux házirend határozza meg a felhasználók hozzáférését a szerepekhez, a szerepköröket a tartományokhoz és a tartományoknak a típusokhoz. Először a felhasználó jogosult szerepkör megszerzésére, majd a szerepkör jogosult a tartományokhoz való hozzáférésre. Végül egy tartomány csak bizonyos típusú objektumokhoz férhet hozzá.

LSM és SELinux architektúra

A név ellenére az LSM-ek általában nem betölthető Linux-modulok. A SELinuxhoz hasonlóan azonban közvetlenül a kernelbe van integrálva. Az LSM forráskód bármilyen módosítása új kernel-fordítást igényel. A megfelelő opciót engedélyezni kell a kernel beállításainál, különben az LSM kód nem aktiválódik a rendszerindítás után. De még ebben az esetben is engedélyezhető az OS bootloader opciójával.

Linux biztonsági rendszerek
LSM ellenőrző verem

Az LSM fel van szerelve horgokkal az alapvető kernelfunkciókban, amelyek relevánsak lehetnek az ellenőrzéseknél. Az LSM-ek egyik fő jellemzője, hogy egymásra vannak rakva. Így a szabványos ellenőrzéseket továbbra is végrehajtják, és az LSM minden rétege csak további vezérlőket és vezérlőket ad hozzá. Ez azt jelenti, hogy a tilalmat nem lehet visszavonni. Ez az ábrán látható, ha a rutin DAC ellenőrzések eredménye meghiúsul, akkor az LSM horgokat sem éri el az ügy.

A SELinux a Fluke kutatási operációs rendszer Flask biztonsági architektúráját alkalmazza, különös tekintettel a legkevesebb privilégium elvére. Ennek a koncepciónak a lényege, ahogy a neve is sugallja, hogy csak azokat a jogokat biztosítsa a felhasználónak vagy a feldolgozásnak, amelyek a tervezett műveletek végrehajtásához szükségesek. Ez az elv kényszerített hozzáférésű gépeléssel valósul meg, így a SELinux hozzáférés-szabályozása a tartomány => típusú modellen alapul.

A kényszerített hozzáférésű gépelésnek köszönhetően a SELinux sokkal nagyobb hozzáférés-vezérlési képességekkel rendelkezik, mint a Unix/Linux operációs rendszerekben használt hagyományos DAC-modell. Például korlátozhatja a hálózati port számát, amelyhez az ftp-szerver csatlakozni fog, engedélyezheti a fájlok írását és módosítását egy bizonyos mappában, de nem törölheti azokat.

A SELinux fő összetevői a következők:

  • Policy Enforcement Server — A hozzáférés-szabályozás megszervezésének fő mechanizmusa.
  • Rendszerbiztonsági szabályzat adatbázis.
  • Interakció az LSM eseményelfogóval.
  • Selinuxfs - Pseudo-FS, ugyanaz, mint a /proc, és a /sys/fs/selinux könyvtárba van felszerelve. Dinamikusan a Linux kernel tölti fel futás közben, és SELinux állapotinformációkat tartalmazó fájlokat tartalmaz.
  • Hozzáférés a vektoros gyorsítótárhoz — Kisegítő mechanizmus a termelékenység növelésére.

Linux biztonsági rendszerek
Hogyan működik a SELinux

Mindez így működik.

  1. Egy bizonyos alany a SELinux kifejezéssel egy engedélyezett műveletet hajt végre egy objektumon a DAC ellenőrzése után, amint az a felső képen látható. Ez a művelet végrehajtására vonatkozó kérés az LSM eseményelfogóhoz kerül.
  2. Innentől a kérés az alany és az objektum biztonsági környezetével együtt a SELinux Abstraction and Hook Logic modulhoz kerül, amely az LSM-mel való együttműködésért felelős.
  3. Az alany objektumhoz való hozzáférésével kapcsolatos döntéshozó hatóság a Policy Enforcement Server, és az adatokat a SELinux AnHL-től kapja.
  4. A hozzáféréssel vagy elutasítással kapcsolatos döntések meghozatalához a Policy Enforcement Server az Access Vector Cache (AVC) gyorsítótárazási alrendszeréhez fordul a leggyakrabban használt szabályokért.
  5. Ha a megfelelő szabályra nem található megoldás a gyorsítótárban, akkor a kérést továbbítja a biztonsági házirend-adatbázisnak.
  6. Az adatbázisból és az AVC-ből származó keresési eredmény visszakerül a Policy Enforcement Serverre.
  7. Ha a talált házirend megegyezik a kért művelettel, akkor a művelet engedélyezett. Ellenkező esetben a művelet tilos.

A SELinux beállításainak kezelése

A SELinux három üzemmód egyikében működik:

  • Betartatás – A biztonsági szabályzatok szigorú betartása.
  • Megengedő – A korlátozások megsértése megengedett, a naplóban ennek megfelelő megjegyzést kell tenni.
  • Letiltva – a biztonsági szabályzatok nem érvényesek.

A következő paranccsal láthatja, hogy a SELinux milyen üzemmódban van.

[admin@server ~]$ getenforce
Permissive

Az üzemmód megváltoztatása az újraindítás előtt, például az enforcing beállítása, vagy 1. A megengedő paraméter a 0 numerikus kódnak felel meg.

[admin@server ~]$ setenfoce enforcing
[admin@server ~]$ setenfoce 1 #то же самое

A módot a fájl szerkesztésével is módosíthatja:

[admin@server ~]$ cat /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 three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.

SELINUXTYPE=cél

A setenfoce-hoz képest az a különbség, hogy az operációs rendszer indításakor a SELinux mód a konfigurációs fájlban található SELINUX paraméter értékének megfelelően lesz beállítva. Ezenkívül a letiltott <=> kényszerítő módosítások csak az /etc/selinux/config fájl szerkesztésével és újraindítás után lépnek érvénybe.

Tekintse meg a rövid állapotjelentést:

[admin@server ~]$ sestatus

SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31

A SELinux attribútumok megtekintéséhez néhány szabványos segédprogram a -Z paramétert használja.

[admin@server ~]$ ls -lZ /var/log/httpd/
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200920
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20200927
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201004
-rw-r--r--. root root system_u:object_r:httpd_log_t:s0 access_log-20201011
[admin@server ~]$ ps -u apache -Z
LABEL                             PID TTY          TIME CMD
system_u:system_r:httpd_t:s0     2914 ?        00:00:04 httpd
system_u:system_r:httpd_t:s0     2915 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2916 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     2917 ?        00:00:00 httpd
...
system_u:system_r:httpd_t:s0     2918 ?        00:00:00 httpd

Az ls -l normál kimenetéhez képest számos további mező található a következő formátumban:

<user>:<role>:<type>:<level>

Az utolsó mező valami biztonsági besorolást jelöl, és két elem kombinációjából áll:

  • s0 - szignifikancia, alacsony-magas szintű intervallumként is írva
  • c0, c1… c1023 - kategória.

Hozzáférési konfiguráció módosítása

Használja a semodult a SELinux modulok betöltéséhez, hozzáadásához és eltávolításához.

[admin@server ~]$ semodule -l |wc -l #список всех модулей
408
[admin@server ~]$ semodule -e abrt #enable - активировать модуль
[admin@server ~]$ semodule -d accountsd #disable - отключить модуль
[admin@server ~]$ semodule -r avahi #remove - удалить модуль

Első csapat semanage bejelentkezés összeköti a SELinux felhasználót az operációs rendszer felhasználójával, a második megjelenít egy listát. Végül az utolsó parancs az -r kapcsolóval eltávolítja a SELinux felhasználók operációs rendszer-fiókokhoz való hozzárendelését. Az MLS/MCS Range értékek szintaxisának magyarázata az előző részben található.

[admin@server ~]$ semanage login -a -s user_u karol
[admin@server ~]$ semanage login -l

Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
system_u system_u s0-s0:c0.c1023 *
[admin@server ~]$ semanage login -d karol

Csapat semanage felhasználó a SELinux felhasználók és szerepkörök közötti leképezések kezelésére szolgál.

[admin@server ~]$ semanage user -l
                Labeling   MLS/       MLS/                          
SELinux User    Prefix     MCS Level  MCS Range             SELinux Roles
guest_u         user       s0         s0                    guest_r
staff_u         staff      s0         s0-s0:c0.c1023        staff_r sysadm_r
...
user_u          user       s0         s0                    user_r
xguest_u        user       s0         s0                    xguest_r
[admin@server ~]$ semanage user -a -R 'staff_r user_r'
[admin@server ~]$ semanage user -d test_u

Parancs paraméterek:

  • -egy egyéni szerepkör-leképezési bejegyzés hozzáadása;
  • -l a megfelelő felhasználók és szerepkörök listája;
  • -d felhasználói szerepkör-leképezés bejegyzés törlése;
  • -R lista a felhasználóhoz kötött szerepekről;

Fájlok, portok és logikai értékek

Minden SELinux modul tartalmaz fájlcímkézési szabályokat, de szükség esetén saját szabályokat is hozzáadhat. Például azt szeretnénk, hogy a webszerver hozzáférési jogokkal rendelkezzen az /srv/www mappához.

[admin@server ~]$ semanage fcontext -a -t httpd_sys_content_t "/srv/www(/.*)?
[admin@server ~]$ restorecon -R /srv/www/

Az első parancs új jelölési szabályokat regisztrál, a második pedig alaphelyzetbe állítja, vagy inkább beállítja a fájltípusokat a jelenlegi szabályok szerint.

Ugyanígy a TCP/UDP portok is úgy vannak megjelölve, hogy csak a megfelelő szolgáltatások tudják hallgatni őket. Például ahhoz, hogy a webszerver figyeljen a 8080-as porton, le kell futnia a parancsot.

[admin@server ~]$ semanage port -m -t http_port_t -p tcp 8080

A SELinux modulok jelentős része rendelkezik olyan paraméterekkel, amelyek logikai értékeket vehetnek fel. Az ilyen paraméterek teljes listája a getsebool -a paranccsal tekinthető meg. A setsebool segítségével módosíthatja a logikai értékeket.

[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_cgi --> on
[admin@server ~]$ setsebool -P httpd_enable_cgi off
[admin@server ~]$ getsebool httpd_enable_cgi
httpd_enable_homedirs --> off

Workshop, hozzáférhet a Pgadmin-web felülethez

Nézzünk egy gyakorlati példát: RHEL 7.6-ra telepítettük a pgadmin4-web-et a PostgreSQL adatbázis adminisztrálására. Sétáltunk egy kicsit Keresés a pg_hba.conf, postgresql.conf és config_local.py beállításaival, mappaengedélyek beállítása, a hiányzó Python modulok telepítése pip-ből. Minden készen áll, elindítjuk és fogadjuk 500 Belső Szerver Hiba.

Linux biztonsági rendszerek

Kezdjük a tipikus gyanúsítottakkal, ellenőrizzük a /var/log/httpd/error_log fájlt. Vannak ott érdekes bejegyzések.

[timestamp] [core:notice] [pid 23689] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
...
[timestamp] [wsgi:error] [pid 23690] [Errno 13] Permission denied: '/var/lib/pgadmin'
[timestamp] [wsgi:error] [pid 23690] [timestamp] [wsgi:error] [pid 23690] HINT : You may need to manually set the permissions on
[timestamp] [wsgi:error] [pid 23690] /var/lib/pgadmin to allow apache to write to it.

Ezen a ponton a legtöbb Linux rendszergazdának nagy a kísértése a setencorce 0 futtatására, és ez lesz a vége. Őszintén szólva én is ezt tettem először. Természetesen ez is egy kiút, de messze nem a legjobb.

A nehézkes kialakítás ellenére a SELinux felhasználóbarát lehet. Csak telepítse a hibaelhárító csomagot, és tekintse meg a rendszernaplót.

[admin@server ~]$ yum install setroubleshoot
[admin@server ~]$ journalctl -b -0
[admin@server ~]$ service restart auditd

Felhívjuk figyelmét, hogy az auditd szolgáltatást így kell újraindítani, és nem kell systemctl-t használni, annak ellenére, hogy a systemd jelen van az operációs rendszerben. A rendszernaplóban lesz feltüntetve nemcsak a letiltás tényét, hanem az okát és a tilalom leküzdésének módja.

Linux biztonsági rendszerek

Ezeket a parancsokat hajtjuk végre:

[admin@server ~]$ setsebool -P httpd_can_network_connect 1
[admin@server ~]$ setsebool -P httpd_can_network_connect_db 1

Ellenőrizzük a pgadmin4-web oldal elérését, minden működik.

Linux biztonsági rendszerek

Linux biztonsági rendszerek

Forrás: will.com

Hozzászólás