Toto je starší verze dokumentu!
Bezpečnost
Základní informace
- Přečtěte si kapitolu Obecné poznámky.
Bezpečnost svého systému můžete výrazným způsobem zvýšit dodržováním několika vcelku jednoduchých pravidel. Zde jsou některá z nich.
- Ujistěte se, že BIOS Vašeho počítače je nastaven tak, aby jako první bootoval z pevného disku. Zabráníte tak tomu, aby někdo např. nabootoval Linux z CD/DVD mechaniky a získal tak práva superuživatele ke všem datům uloženým na Vašem disku.
- Ujistěte se, že BIOS je zabezpečen heslem. Tímto způsobem předejdete tomu, aby bylo možné triviálně změnit bootovací sekvenci jednotlivých zařízení.
- Ujistěte se, že je počítač uložen a bezpečném místě a že je zamezen přístup všem nepovolaným osobám - takto lze zabránit krádeži disku popř. vyjmutí baterie ze základní desky s cílem vymazat heslo chránící nastavení BIOSu.
- Ujistěte se, že heslo, které je vyžadováno pro přístup do systému, není triviální. Vaše heslo by mělo mít minimálně osm znaků, obsahovat malá i velká písmena a číslice popř. také speciální znaky (např. @, #, $ apod.).
- Ujistěte se, že je zakázána interaktivní editace pro zavaděče GRUB. Zabráníte tak tomu, aby někdo modifikoval parametry jádra při jeho zavádění a získal tak práva superuživatele. Přečtěte si kapitolu Zakázání interaktivní editace zavaděče GRUB.
- Ujistěte se, že je zákázáno prohlížení historie v módu konsole - takto lze zabránit, aby bylo možné prohlížet dříve spuštěné příkazy. Přečtěte si kapitolu Zakázání zobrazování historie v konzolovém módu.
- Ujistěte se, že je zakázána „trojkombinace“ Ctrl+Alt+Del v módu konsole. Zabráníte tak tomu, aby bylo možné restartovat počítač bez potřebných oprávnění. Přečtěte si kapitolu Zakázání restartování počítače pomocí Ctrl+Alt+Del v konzoli.
- Ujistěte se, že je v konzolovém módu nastaveno vynucené potvrzování pro přesun, přepsání souborů popř. adresářů. Tímto způsobem lze předejít nechtěnému přesunutí nebo přepsání souboru / adresáře. Přečtěte si kapitolu Vynucené potvrzování pro přesun / přepsání souborů a adresářů.
- Do systému se přihlašujte jako superuživatel pouze v případě, že je to nezbytně nutné. Pro standarní činnost se přihlašujte jako běžný uživatel. Předejte tak nechtěnému smazání / modifikaci systémových souborů a adresářů. Přečtěte si kapitolu Přidání, editace a mazání uživatelů a skupin.
- Zakažte účet superuživatele a používejte namísto něj příkaz
sudo
. Tento způsob poskytuje auditní stopu (/var/log/auth.log
). Přečtěte si kapitolu Zakázání účtu superuživatele (root). - Nainstalujte firewall. Firewall sice nezaručuje absolutní bezpečnost, avšak představuje první linii obrany proti útokům ze sítě. Přečtěte si kapitolu Instalace firewallu (Firestarter) a Otevření/Uzavření portů.
- Otestujte míru „zranitelnosti“ Vašeho systému. Vynikající aplikací k těmto účelům je Nessus, který provádí řadu testů zaměřených na známé bezpečnostní problémy. Přečtěte si kapitolu Instalace aplikace pro testování bezpečnosti systému (Nessus).
Zakázání zobrazování historie v konzolovém módu
- Přečtěte si kapitolu Obecné poznámky.
rm -f $HOME/.bash_history touch $HOME/.bash_history chmod 000 $HOME/.bash_history
Zakázání restartování počítače pomocí Ctrl+Alt+Del v konzoli
- Přečtěte si kapitolu Obecné poznámky.
Zazálohujte soubor inittab
cp /etc/inittab /etc/inittab_backup
a otevřete jej pomocí textového editoru
gedit /etc/inittab
V souboru inittab
nalezněte řádek
... ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now ...
nahraďte ho následujícím řádkem
#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
a uložte soubor. Níže uvedeným příkazem načtěte opětovně soubor inittab
.
/sbin/telinit q
Vynucené potvrzování pro přesun / přepsání souborů a adresářů
- Přečtěte si kapitolu Obecné poznámky.
Zazálohujte konfigurační soubor bash.bashrc
.
cp /etc/bashrc /etc/bashrc_backup
Otevřete tento soubor pomocí
gedit /etc/bashrc
na jeho konec přidejte
alias rm='rm -i' alias cp='cp -i' alias mv='mv -i'
a soubor uložte.
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.
SELinux
Tato kapitola vznikla na základě následujících článků:
Úvod do teorie
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 aplikace provádět. Bezpečnostní přínos SELinuxu tedy spočívá v tom, že implementuje mechanismus kontroly přístupů.
SELinux byl vyvinut agenturou NSA (U.S. National Security Agency) 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 - (Linux Security Module) 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 (Discretionary Access Control) mechanismus. Hlavní myšlenka tohoto přístupu spočívá v tom, že každý uživatel má plnou kontrolu nad všemi svými procesy1) a soubory2) 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živatel3). 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 (Mandatory Access Control). 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 (Role-Based Access Control). 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 SELinuxu 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 SELinuxu je výše popsaný proces nazýván jako TE (Type Enforcement).
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 (Multi-Level Security 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 Obecné poznámky.
Bezpečnostní omezení daná SELinuxem 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 SELinuxu 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 SELinuxu 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í SELinuxu schází MLS - ten by se nacházel úplně na konci, tj. za typem. Typ je nejdůležitější složkou SELinuxu - 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 SELinuxu 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).