|  Obě strany předchozí revize Předchozí verze Následující verze |  Předchozí verze | 
| navody:fc6selinux [2007/03/04 14:21]  –  macky | navody:fc6selinux [2022/11/14 11:25] (aktuální)  – upraveno mimo DokuWiki 127.0.0.1 | 
|---|
| === Implementace SELinuxu === | === Implementace SELinuxu === | 
 |  | 
| //SELinux// implementuje //MAC// a //RBAC// do jádra ve formě modulu //LSM//. Administrátor může prostřednictvím tzv. bezpečnostního serveru nastavit, jací uživatelé a procesy (tzv. subjekty) mohou přistupovat k jakým souborům popř. zařízením (tzv. objektům). V praxi je nejprve zkoumáno, zda-li má uživatel práva k požadovanému souboru dle //DAC// (tj. jestli má právo čtení, zápisu apod.). Je-li tato podmínka splněna, následuje kontrola splnění podmínek definovaných v rámci //MAC// (tj. zda-li má příslušný proces oprávnění k danému souboru).\\  | //SELinux// implementuje //MAC// a //RBAC// do jádra ve formě modulu //LSM//. Administrátor může prostřednictvím tzv. bezpečnostního serveru nastavit, jací uživatelé a procesy (tzv. subjekty) mohou přistupovat k jakým souborům popř. zařízením (tzv. objektům). V praxi je nejprve zkoumáno, zda-li má uživatel práva k požadovanému souboru dle //DAC// (tj. jestli má právo čtení, zápisu apod.). Je-li tato podmínka splněna, následuje kontrola splnění podmínek definovaných v rámci //MAC// (tj. zda-li má příslušný proces oprávnění k danému souboru). To znamená, že kdyby se útočník "zmocnil" procesu vlastněného superuživatelem, mohl by manipulovat pouze se soubory a zařízením, ke kterým má tento proces oprávnění. Potenciální škoda, kterou by takto mohl napáchat, je nesrovnatelně menší než v případě, že by byl implementován pouze //DAC//.\\ | 
| V praxi to znamená, že kdyby se útočník "zmocnil" procesu vlastněného superuživatelem, mohl by manipulovat pouze se soubory a zařízením, ke kterým má tento proces oprávnění. Potenciální škoda, kterou by takto mohl napáchat, je nesrovnatelně menší než v případě, že by byl implementován pouze //DAC//.\\ |  | 
| //SELinux// také umožňuje implementaci tzv. //MLS// (**M**ulti-**L**evel **S**ecurity model). Filozofií tohoto modelu je přiřazení jednotlivých objektů (tj. souborů) do tzv. bezpečnostních vrstev. Tyto vrstvy jsou hierarchicky uspořádány a platí obecné pravidlo, že informace může být předána pouze z vyšší bezpečnostní vrstvy do nižší. To umožňuje dále omezit okruh uživatelů, kteří mají přístup k vybraným souborům. | //SELinux// také umožňuje implementaci tzv. //MLS// (**M**ulti-**L**evel **S**ecurity model). Filozofií tohoto modelu je přiřazení jednotlivých objektů (tj. souborů) do tzv. bezpečnostních vrstev. Tyto vrstvy jsou hierarchicky uspořádány a platí obecné pravidlo, že informace může být předána pouze z vyšší bezpečnostní vrstvy do nižší. To umožňuje dále omezit okruh uživatelů, kteří mají přístup k vybraným souborům. | 
 |  | 
 |  | 
|   * Přečtěte si kapitolu [[navody:fc6Obsah|Obecné poznámky]]. |   * Přečtěte si kapitolu [[navody:fc6Obsah|Obecné poznámky]]. | 
 |   | 
| {{ navody: selinux.png | SELinux }} |   | 
 |  | 
| Bezpečnostní omezení daná //SELinux//em občas mohou způsobovat, že nelze do systému přidávat např. pluginy nebo ovladače, které nepocházejí ze standardních repozitářů pro //Fedora Core//. Řešením tohoto problému pak může být vypnutí //SELinux//u. | Bezpečnostní omezení daná //SELinux//em občas mohou způsobovat, že nelze do systému přidávat např. pluginy nebo ovladače, které nepocházejí ze standardních repozitářů pro //Fedora Core//. Řešením tohoto problému pak může být vypnutí //SELinux//u. | 
 |  | 
| Všechny tři módy se dají nastavit prostřednictvím nabídky //Aplikace -> Systém -> Správa -> Úroveň zabezpečení a firewall//. V okně //Nastavení úrovně zabezpečení//, zvolte záložku //SELinux//. Jednotlivé módy je pak možné zvolit v roletkové nabídce položky //Nastavení SELinux//. | Všechny tři módy se dají nastavit prostřednictvím nabídky //Aplikace -> Systém -> Správa -> Úroveň zabezpečení a firewall//. V okně //Nastavení úrovně zabezpečení//, zvolte záložku //SELinux//. Jednotlivé módy je pak možné zvolit v roletkové nabídce položky //Nastavení SELinux//. | 
|   |  | 
|   | {{ navody: selinux.png | SELinux }} | 
 |  | 
| Módy //SELinux//u je možné nastavit také přímo v souboru ''/etc/selinux/config''. | Módy //SELinux//u je možné nastavit také přímo v souboru ''/etc/selinux/config''. | 
|   SETLOCALDEFS=0 |   SETLOCALDEFS=0 | 
 |  | 
| Módy ''Vynucující'' a ''Tolerantní'' lze také nastavit pomocí příkazu ''setenforce''. Pomocí | Módy ''Vynucující'' a ''Tolerantní'' lze také nastavit pomocí příkazu ''setenforce''. Toto nastavení je však platné pouze pro aktuální sezení - po restartu bude obnoveno defaultní nastavení. Pomocí | 
 |  | 
|   /usr/sbin/setenforce 1 |   /usr/sbin/setenforce 1 | 
| ==== Bezpečnostní kontext ==== | ==== Bezpečnostní kontext ==== | 
 |  | 
| Bezpečnostní kontext lze  charakterizovat jako bezpečnostní sadu pravidel, která se váží ke konkrétnímu uživateli, procesu nebo souboru. V případě souborů se někdy můžete setkat s ekvivalentním pojmem //file_context// a v případě procesu s pak často používá pojmem //domain//. Informace o bezpečnostním kontextu souborů jsou uloženy v rozšířeném atributu systému souborů a jsou tudíž jehou součástí. | Bezpečnostní kontext lze  charakterizovat jako sadu příznaků, které se váží ke konkrétnímu uživateli, procesu nebo souboru. V rámci bezpečnostní politiky jsou pak definovány možné interakce mezi subjekty a objekty právě na základě těchto příznaků. Informace o bezpečnostním kontextu souborů jsou uloženy v rozšířeném atributu systému souborů a jsou tudíž jehou součástí.\\  | 
|   |   | 
|   | **Poznámka:** V případě souborů se někdy můžete setkat s ekvivalentním pojmem //file_context// a v případě procesu s pak často používá pojmem //domain//. | 
 |  | 
| === Struktura bezpečnostního kontextu === | === Struktura bezpečnostního kontextu === | 
 |  | 
|   ls -laZ |   ls -laZ | 
|    |  | 
|   -rw-rw-r--  macky macky user_u:object_r:user_home_t      black_scholes.m~ |   -rw-rw-r--  macky macky user_u:object_r:user_home_t      black_scholes.m~ | 
|   drwxr-xr-x  macky macky user_u:object_r:user_home_t      Desktop |   drwxr-xr-x  macky macky user_u:object_r:user_home_t      Desktop | 
|   -rw-rw-rw-  macky macky user_u:object_r:user_home_t      skript~ |   -rw-rw-rw-  macky macky user_u:object_r:user_home_t      skript~ | 
 |  | 
| Bezpečnostní profil aktivního uživatele zjistíte příkazem | Bezpečnostní kontext aktivního uživatele zjistíte příkazem | 
 |  | 
|   /usr/bin/id -Z |   /usr/bin/id -Z | 
|   user_u:system_r:unconfined_t |   user_u:system_r:unconfined_t | 
 |  | 
| Ve všech případech získáte informaci o tzv. bezpečnostním kontextu. V prvním případě se jednalo o bezpečnostní kontext procesů, v druhém případě o bezpečnostní kontext souborů / adresářů a ve třetím případě o bezpečnostní kontext uživatele. Konkrétně se jedná o část výpisu ve tvaru ''xxx_u:xxx_r:xxx_t''. Bezpečnostní kontext se skládá ze tří částí oddělených dvojtečnou - uživatele, role a typu. Z výše zmiňovaných součástí //SELinux//u schází //**MLS**// - ta by se nacházela úplně na konci, tj. za typem. | Ve všech případech získáte informaci o tzv. bezpečnostním kontextu. Konkrétně se jedná o část výpisu ve tvaru ''xxx_u:xxx_r:xxx_t''. Bezpečnostní kontext se skládá ze tří částí oddělených dvojtečnou - uživatele, role a typu. Z výše zmiňovaných součástí //SELinux//u schází //**MLS**// - ta by se nacházela úplně na konci, tj. za typem. | 
 |  | 
| == Typ == | == Typ == | 
 |  | 
| == Role == | == Role == | 
| Role má smysl pouze v případě subjektů (tj. uživatelů a procesů). Soubory mají vždy přiřazenu roli ''object_r'' a jejich případě má tato role za úkol pouze "vyplnit" místo v příslušné části bezpečnostního kontextu. Jak již bylo zmíněno dříve, role slouží k vytváření bezpečnostních profilů a tvoří tak základ //RBAC//. Každý uživatel můžeme mit v jeden okamžik přiřazenu pouze jednu roli. V případě, že uživatel potřebuje jinou roli, musí se mezi těmito rolemi "přepnout".  | Role má smysl pouze v případě subjektů (tj. uživatelů a procesů). Objekty (tj. soubory a adresáře) mají vždy přiřazenu roli ''object_r'' a v jejich případě má tato role za úkol pouze "vyplnit" místo v příslušné části bezpečnostního kontextu((Tato "role" není ani explicitně definována v rámci bezpečnostní politiky.)). Jak již bylo zmíněno dříve, role slouží k vytváření bezpečnostních politik (viz. dále) a tvoří tak základ //RBAC//. Každý uživatel můžeme mit v jeden okamžik přiřazenu pouze jednu roli. V případě, že uživatel potřebuje jinou roli, musí se mezi těmito rolemi "přepnout".  | 
| Role končí standardně na ''_r'' (//role//). | V případě defaultní bezpečnostní politiky ''targeted'' (viz. dále) existují dvě role - ''system_r'' a právě výše zmiňovaná ''object_r''. Role končí standardně na ''_r'' (//role//). | 
 |  | 
| == Uživatel (identita) == | == Uživatel (identita) == | 
 |  | 
| === === | === === | 
 |   | 
| Bezpečnostní pravidla jsou pak dána formou matice, které "propojují" kontexty objektů a subjektů. Např. příkaz ''allow httpd_t net_conf_t:file { read getattr lock ioctl }'' umožňuje objektům ''httpd_t'' číst konfigurační soubory s typem ''net_conf_t''. Na základě tohoto pravidla může libovolný objekt typu ''httpd_t'' přistupovat k subjektům s typem ''net_conf_t''.  | Bezpečnostní pravidla jsou pak dána formou matice, které "propojují" kontexty objektů a subjektů. Např. příkaz ''allow httpd_t net_conf_t:file { read getattr lock ioctl }'' umožňuje objektům ''httpd_t'' číst konfigurační soubory s typem ''net_conf_t''. Na základě tohoto pravidla může libovolný objekt typu ''httpd_t'' přistupovat k subjektům s typem ''net_conf_t''.  | 
 |  | 
| Konfigurační soubory //SELinux//u jsou uloženy v adresáři ''/etc/selinux/''. Každý z podadresářů ''/etc/selinux'' pak může obsahovat samostatnou sadu bezpečnostních politik. | Konfigurační soubory //SELinux//u jsou uloženy v adresáři ''/etc/selinux/''. Každý z podadresářů ''/etc/selinux'' pak může obsahovat samostatnou sadu bezpečnostních politik. | 
| Ve //Fedora Core// naleznete v tomto adresáři podadresář ''targeted''. ''targeted'' je defaultní bezpečnostní politikou //SELinux//u. | Ve //Fedora Core// naleznete v tomto adresáři podadresář ''targeted''. ''targeted'' je defaultní bezpečnostní politikou //SELinux//u. | 
| V případě bezpečnostní politiky ''targeted'' mají pouze některé klíčové aplikace((Konkrétně se jedná o deamony ''dhcpd'', ''httpd'', ''mysqld'', ''named'', ''nscd'', ''ntpd'', ''portmap'', ''postgres'', ''snmpd'', ''squid'', ''syslogd'' a ''winbind''. To, o jaké deamony se bude jednat ve Vašem případě, závisí na Vaší instalaci.)) "vlastní" bezpečnostní typ. Ostatní aplikace používají typ ''unconfined_t'' - v tomto případě spoléhají pouze na //DAC//. Opakem politiky ''targeted'' je politika ''strict''((Bezpečnostní politika ''strict'' není defautně nainstalována. Instalaci provedete pomocí ''yum -y install selinux-policy-strict''.)). Tato politika implementuje samostatný typ pro každou aplikaci a vyžaduje explicitní pravidla pro všechny vzájemné interakce subjektů a objektů. Bezpečnostní politika ''strict'' je tedy velice komplexním bezpečnostním nástrojem vyžadující pravidelnou aktualizaci v závislosti na nově přidaných aplikacích a detailní znalost //SELinux//u.\\ | V případě bezpečnostní politiky ''targeted'' mají pouze některé klíčové aplikace((Konkrétně se jedná o deamony ''dhcpd'', ''httpd'', ''mysqld'', ''named'', ''nscd'', ''ntpd'', ''portmap'', ''postgres'', ''snmpd'', ''squid'', ''syslogd'' a ''winbind''. To, o jaké deamony se bude jednat ve Vašem případě, závisí na Vaší instalaci.)) "vlastní" bezpečnostní typ. Ostatní aplikace používají typ ''unconfined_t'' - v tomto případě spoléhají pouze na //DAC//. Opakem politiky ''targeted'' je politika ''strict''((Bezpečnostní politika ''strict'' není defautně nainstalována. Instalaci provedete pomocí ''yum -y install selinux-policy-strict''.)). Tato politika implementuje samostatný typ pro každou aplikaci a vyžaduje explicitní pravidla pro všechny vzájemné interakce subjektů a objektů. Bezpečnostní politika ''strict'' je tedy velice komplexním bezpečnostním nástrojem vyžadujícím detailní znalost //SELinux//u a pravidelnou aktualizaci v závislosti na nově přidaných aplikacích.\\ | 
 |  | 
| Aktuální bezpečnostní politiku je možné nastavit v souboru ''/etc/selinux/config''((Pokud ovšem opravdu nevíte, co děláte, není dobrý nápad toto nastavení měnit.)) | Aktuální bezpečnostní politiku je možné nastavit v souboru ''/etc/selinux/config''((Pokud ovšem opravdu nevíte, co děláte, není dobrý nápad toto nastavení měnit.)) | 
|   ... |   ... | 
 |  | 
| Změnou nastavení Je tak možné nadefinovat několik bezpečnostních politik a ty následně měnit podle potřeby((Nicméně z logiky věci plyne, že v jeden okamžik může být aktivní pouze jedna politika.)).\\ | Změnou nastavení je tak možné nadefinovat několik bezpečnostních politik a ty následně měnit podle potřeby((Nicméně z logiky věci plyne, že v jeden okamžik může být aktivní pouze jedna politika.)).\\ | 
 |  | 
| Vraťme se zpět k adresáři ''/etc/selinux/targeted''. Tento adresář obsahuje další adresáře a soubory. | Vraťme se zpět k adresáři ''/etc/selinux/targeted''. Tento adresář obsahuje další adresáře a soubory. | 
| ==== Změna nastavení bezpečnostního kontextu ==== | ==== Změna nastavení bezpečnostního kontextu ==== | 
 |  | 
| === Základní změna nastavení ===  | === Úroveň zabezpečení a firewall === | 
|   |  | 
| == Úroveň zabezpečení a firewall == |  | 
 |  | 
| Elementární změny bezpečnostního profilu lze provádět přes nabídku //Aplikace -> Systém -> Správa -> Úroveň zabezpečení a firewall// na záložce //SELinux//. Zde lze nastavit některé zákazy / povolení pro základní aplikace (viz. výše uvedená obrazovka).\\ | Elementární změny bezpečnostního profilu lze provádět přes nabídku //Aplikace -> Systém -> Správa -> Úroveň zabezpečení a firewall// na záložce //SELinux//. Zde lze nastavit některé zákazy / povolení pro základní aplikace (viz. výše uvedená obrazovka).\\ | 
 |  | 
| {{ navody:selinux_management_tool.png | SELinux Management Tool }} | {{ navody:selinux_management_tool.png | SELinux Management Tool }} | 
 |   | 
 |   | 
 |  | 
| ===== ===== | ===== ===== | 
| [[navody:fc6obsah|Hlavní stránka]] | [[navody:fc6obsah|Hlavní stránka]] |