Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze |
navody:fc6bezpecnost [2007/02/19 19:31] – macky | navody:fc6bezpecnost [2022/11/14 11:25] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 |
---|
**Poznámka: ** Tímto způsobem je ošetřen pouze případ, kdy uživatel zadá smazání více souborů pomocí ''rm'' z příkazové řádky. S výše definovaným aliasem bude třeba potvrdit smazání každého jednotlivého souboru.\\ | **Poznámka: ** Tímto způsobem je ošetřen pouze případ, kdy uživatel zadá smazání více souborů pomocí ''rm'' z příkazové řádky. S výše definovaným aliasem bude třeba potvrdit smazání každého jednotlivého souboru.\\ |
Mělo by se jednat o defaultní nastavení, a proto by nemělo být zapotřebí definovat výše uvedený alias. | Mělo by se jednat o defaultní nastavení, a proto by nemělo být zapotřebí definovat výše uvedený alias. |
| |
| |
==== SELinux ==== | ==== SELinux ==== |
| SELinux (Security Enhanced Linux) zvyšuje bezpečnost Vašeho systému Fedora Core tak, že omezuje množinu souborů, se kterými mohou aplikace pracovat a množinu úkonů, které mohou tyto aplikace provádět. Bezpečnostní přínos SELinuxu tak spočívá v tom, že implementuje mechanismus kontroly přístupů. Více o //SELinux//u se dočtete v samostatné [[navody:fc6selinux|kapitole]]. |
Tato kapitola vznikla na základě následujících článků: | |
* [[http://en.wikipedia.org/wiki/Selinux|Wikipedia - SELinux]] | |
* [[http://www.samag.com/documents/s=7835/sam0303a/0303a.htm|SELinux od K.Thompsona]] | |
* [[http://www.crypt.gen.nz/selinux/faq.html| UnOfficial FAQ]] | |
* [[http://fedoraproject.org/wiki/SELinux/Understanding|SELinux for dummies]] | |
| |
=== Úvod do teorie === | |
| |
//SELinux// (**S**ecurity **E**nhanced **Linux**) zvyšuje bezpečnost Vašeho systému //Fedora Core// tak, že omezuje množinu souborů, se kterými mohou aplikace pracovat a množinu úkonů, které mohou aplikace provádět. Bezpečnostní přínos //SELinux//u tedy spočívá v tom, že implementuje mechanismus kontroly přístupů.\\ | |
| |
//SELinux// byl vyvinut agenturou //NSA// (U.S. **N**ational **S**ecurity **A**gency) ve spolupráci s firmami jako např. //NAI Labs//, //Secure Computing Corp.// a //MITRE Corp.//. Pro potřeby komunity byl uvolněn 22. prosince 2000. //SELinux// má formu jádrového modulu //LSM// - (**L**inux **S**ecurity **M**odule) od verze 2.4 je podporován formou patche, od verze 2.6 je přímo součástí jádra. //SELinux// je zahrnut také do distribuce //Fedora Core// a to od její druhé verze.\\ | |
| |
== Modely kontroly přístupů == | |
| |
V praxi existují různé tzv. modely kontroly přístupů. V unixových systémech se tradičně používá tzv. //DAC// (**D**iscretionary **A**ccess **C**ontrol) mechanismus. Hlavní myšlenka tohoto přístupu spočívá v tom, že každý uživatel má plnou kontrolu nad všemi svými procesy((Zjednodušeně lze pod pojmem "proces" chápat jako spuštěnou aplikaci. Jestliže tedy např. spustíte textový editor, inicializovali jste tímto nový proces.)) a soubory((Adresář je ve své podstatě také soubor. Jediným rozdílem mezi klasickým souborem a adresářem je ten, že adresář má přesně danou strukturu.)) Některá práva k těmto procesům a souborů pak může poskytnout také jiným uživatelům. Slabým místem této filozofie je tzv. superuživatel((Velice často se namísto pojmu "superuživatel" můžete setkat s pojmem "root". Tyto pojmy jsou ekvivalentní.)). Jedná se o uživatele, který má administrátorská práva k celému systému, což v praxi znamená, že má absolutní práva ke všem procesům a soborů v systému. Jestliže se tedy někomu podaří "ovládnout" proces, který patří superuživateli, stává se neomezeným vládcem systému. | |
Druhou možností kontroly přístupů je tzv. //MAC// (**M**andatory **A**ccess **C**ontrol). Tento mechanismus je implementován právě v rámci //SELinux//. V tomto případě jsou přístupová práva definovaná administrátorem a nemohou být změněna jiným uživatelem. To, k jakým souborům mohou jednotlivé procesy přistupovat, je dáno sadou striktních pravidel. Obecné pravidlo zní, že co není povoleno je zakázáno. Použití koncepce //MAC// v unixových systémech výše popsaným způsobem by bylo však příliš složité, protože by to vyžadovalo definovaní práv pro každého uživatele a každý proces, který tento uživatel může spustit. | |
Rozšířením myšlenky //MAC// je tak //RBAC// (**R**ole-**B**ased **A**ccess **C**ontrol). Zde administrátor vytvoří tzv. role, pro které následně definuje sadu pravidel. Jednotlivým uživatelům pak přiřadí konkrétní role. | |
| |
== 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 (v terminologii //SELinux//u se hovoří o tzv. subjektech) mohou přistupovat k jakým souborům popř. zařízením (tzv. objektech). V praxi celý mechanismus funguje tak, že nejprve je 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). V //SELinux//u je výše popsaný proces nazýván jako //TE// (**T**ype **E**nforcement).\\ | |
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žší. | |
| |
=== Vypnutí/zapnutí SELinuxu === | |
| |
* Přečtěte si kapitolu [[navody:fc6Obsah|Obecné poznámky]]. | |
| |
{{ selinux.png }} | |
| |
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í se standardních repozitářů pro //Fedora Core//. | |
| |
//SELinux// má tři základní módy - ''Vynucující'' (Enforcing), ''Tolerantní'' (Permissive), ''Zakázán'' (Disabled). V rámci módu ''Vynucující'' je bezpečnostní politika //SELinuxu// aktivně vynucována. To znamená, že procesy mohou přistupovat pouze k souborů, které jsou jim v rámci pravidel přiřazeny. Mód ''Tolerantní'' znamená, že //SELinux// posílá varovné zprávy do souboru ''/var/log/messages'', avšak dodržování bezpečnostních pravidel nevyžaduje. V režimu ''Zakázán'' nejsou pravidla //SELinux//u aplikována vůbec.\\ | |
| |
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//. | |
| |
Jednotlivé módy //SELinux//u je možné nastavit také přímo v souboru ''/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 - SELinux is fully disabled. | |
SELINUX=enforcing | |
# SELINUXTYPE= type of policy in use. Possible values are: | |
# targeted - Only targeted network daemons are protected. | |
# strict - Full SELinux protection. | |
SELINUXTYPE=targeted | |
| |
# SETLOCALDEFS= Check local definition changes | |
SETLOCALDEFS=0 | |
| |
**Poznámka:** Pokud jste měli //SELinux// vypnutý a zapnete jej, bude třeba systém restartovat a při startu systému počkat, až //SELinux// "označkuje" všechny soubory na disku. | |
| |
=== Bezpečnostní kontext === | |
| |
V případě, že máte povolený //SELinux//, měli byste pomocí příkazu | |
| |
ps -e --context | |
| |
získat následující výstup pro aktuálně spuštěné procesy | |
| |
PID CONTEXT COMMAND | |
1 system_u:system_r:init_t init [5] | |
2 system_u:system_r:kernel_t [migration/0] | |
3 system_u:system_r:kernel_t [ksoftirqd/0] | |
4 system_u:system_r:kernel_t [watchdog/0] | |
5 system_u:system_r:kernel_t [events/0] | |
6 system_u:system_r:kernel_t [khelper] | |
7 system_u:system_r:kernel_t [kthread] | |
53 system_u:system_r:kernel_t [kblockd/0] | |
54 system_u:system_r:kernel_t [kacpid] | |
131 system_u:system_r:kernel_t [cqueue/0] | |
132 system_u:system_r:kernel_t [ksuspend_usbd] | |
135 system_u:system_r:kernel_t [khubd] | |
137 system_u:system_r:kernel_t [kseriod] | |
161 system_u:system_r:kernel_t [pdflush] | |
162 system_u:system_r:kernel_t [pdflush] | |
163 system_u:system_r:kernel_t [kswapd0] | |
164 system_u:system_r:kernel_t [aio/0] | |
329 system_u:system_r:kernel_t [kpsmoused] | |
346 system_u:system_r:kernel_t [kjournald] | |
382 system_u:system_r:kernel_t [kauditd] | |
... | |
| |
Pro soubory lze podobný výpis získat pomocí příkazu | |
| |
ls -e --context | |
| |
-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 | |
drwxrwxr-x macky macky user_u:object_r:user_home_t Manuály | |
drwxr-xr-x macky macky user_u:object_r:user_home_t Octave | |
-rw-r--r-- macky macky user_u:object_r:user_home_t octave-core | |
-rw-r--r-- root root user_u:object_r:user_home_t repozitare.txt | |
-rw-rw-rw- macky macky user_u:object_r:user_home_t skript~ | |
| |
V obou případech získáte informaci o tzv. bezpečnostním kontextu. Konkrétně se jedná o část výpisu ''user_u:object_r:user_home_t''. Bezpečnostní kontext se tedy v našem případě skládá ze tří částí - uživatele, role, a typu. Z výše zmiňovaných součástí //SELinux//u schází //**MLS**// - ten by se nacházel úplně na konci, tj. za typem. **Typ** je nejdůležitější složkou //SELinux//u - velká část bezpečnostních pravidel se "opírá" právě o něj. Typ vždy končí na ''_t'' (//type//). Další složkou je **role**. Ta má smysl pouze v případě subjektů (tj. uživatelů a procesů). Jak již bylo zmíněno dříve, role slouží k vytváření bezpečnostních profilů a tvoří tak základ //RBAC//. Role končí standardně na ''_r'' (//role//). Poslední složkou je **uživatel**. Na uživatele lze pohlížet jako seskupení rolí - bezpečnostní profil uživatele lze vytvořit totiž tak, že mu přiřadíme roli popř. role. Standardně v //SELinux//u figurují dva uživatelé - ''user_u'' a ''system_u''. Uživatel ''user_u'' je standardním profilem uživatele; pomocí ''system_u'' jsou označeny procesy spuštěné v průběhu bootování systému (tj. procesy, které nebyly aktivovány uživatelem). Složka uživatel končí na ''_u'' (//user//). | |
| |
===== ===== | ===== ===== |
[[navody:fc6obsah|Hlavní stránka]] | [[navody:fc6obsah|Hlavní stránka]] |