Řekneme si o:
- /etc/selinux/ a podřazených souborech a adresářích
- Politikách a módech SELinuxu
Chcete vědět o SELinux víc?
Chcete-li vědět víc, stáhněte si příručku nazvanou Česká dokumentace pro SELinux, kterou naleznete v naší elektronické knihovně na knihy.root.cz.
SELinux a Fedora Core
V této části si ukážeme, kde jsou uloženy jednotlivé soubory SELinuxu, co obsahují, k čemu slouží a jaké je nastavení SELinuxu ve Fedora Core 6. Všechny důležité soubory se nachází v adresářích /etc/selinux/
, /usr/share/selinux/
a /selinux/
.
/etc/selinux/
V /etc/selinux/
jsou adresáře pojmenované podle politik nainstalovaných v systému, kde jsou uloženy soubory pro jednotlivé politiky, a konfigurační soubor SELinuxu. V souboru /etc/selinux/config
je globální nastavení SELinuxu, můžeme zde nastavit, v jakém módu
a jaká politika
bude v systému po startu aktivní. Podle výpisu následujícího konfiguračního souboru je v nastavena targeted
politika ( SELINUXTYPE
) a enforcing
mód SELinuxu ( SELINUX
), soubor je možno ručně editovat.
# 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
Módy SELinuxu:
- enforcing – v tomto módu se vynucují nakonfigurovaná pravidla SELinuxu. Všechny operace jsou zakázány, pokud nebyly explicitně povoleny. Každý pokus o nějakou operaci se loguje do
/var/log/audit/audit.log
nebo/var/log/messages
jakoAVC zprávy
. Tento mód by měl být nastaven implicitně pro jakýkoliv běžící systém. - permissive – mód, ve kterém se logují AVC zprávy, ale všechny operace jsou povoleny. Oproti enforcing módu jsou v permissive módu dva základní rozdíly: logují se pouze první pokusy o přístupy dané domény k nějakému objektu a v permissive módu se mohou objevit AVC zprávy, které by se v enforcing módu nelogovaly. Například určité doméně není povoleno číst adresář a soubory v něm, v enforcing módu se generuje AVC, že není povolen přístup k adresáři, zatímco v permissive módu se generuje AVC i pro pokusy o přístupy k jednotlivým typům souborů v tomto adresáři. Permissive mód by měl být aktivní pouze v případě, že je potřeba doladit, upravit nebo přidat nějaká pravidla, protože ačkoliv SELinux běží, pravidla jsou ignorována.
- disabled – SELinux je vypnut a všechny nové objekty jsou vytvořeny bez bezpečnostního kontextu. Pro vypnutí SELinuxu je potřeba editovat
/etc/selinux/config
a restartovat systém, protože SELinux je stále v jádře. Pro znovuzapnutí SELinuxu je nutné přeznačkovat celý souborový systém, aby se správně vytvořily kontexty.
Politiky SELinuxu:
- strict – striktní politika byla prvotní politikou, která byla NSA poskytnuta a byla implicitně používána ve Fedora Core. Tato politika v podstatě uzamyká celý systém. Omezení jsou kladena na celý systémový i uživatelský prostor. Během vývoje se však ukázalo, že je tato politika vhodná spíše pro systém, kde mohou uživatelé například jen přistupovat k internetu a ukládat soubory do určené složky. S ohledem na množství aplikací by vznikalo velké množství pravidel, které by bylo třeba nakonfigurovat. Nástin takové konfigurace si ukážeme později při konfiguraci prohlížeče Firefox.
- targeted – po předchozích zkušenostech byla snaha najít vhodný kompromis a tím byla právě tato politika, zabezpečující pouze služby, které jsou připojeny k síti (například apache), jelikož tyto části systému jsou potenciálními místy útoku hackerů. V targeted politice nemá identita a role význam. Uživatelské akce jsou prováděny v doméně
unconfined_t
, na kterou nejsou kladena žádná omezení, takové procesy mají stejný přístup k systému, jako kdyby byl SELinux vypnut. - mls – politika kladoucí další omezení na základě citlivosti a kategorie dat (viz. MLS), politika bývá implementována jako kombinace se striktní nebo targeted politikou
Změna politiky
Podíváme se, jak takovou politiku a mód změnit. Vyjdeme z nastavení /etc/selinux/config, tedy je nastavena politika targeted a mód enforcing. Změnit politiku lze dvěma způsoby: buď v grafickém módu, příkazem system-config-selinux
(balíček policycoreutils-gui), kde se dají nastavit i další části (mapování uživatelů, změny rolí, přehled typů a další), nebo v terminálu. Tento postup si popíšeme – editujeme /etc/selinux/config
a změníme SELINUXTYPE
na požadovanou politiku SELINUXTYPE=strict
(strict, MLS, targeted) a SELINUX=permissive
SELINUX
na permissive
(permissive, enforcing). Politiku nelze změnit za běhu systému, musíme restartovat počítač.
Změna módu na permissive je zde důležitá z toho důvodu, že soubory máme značkovány pro předchozí politiku, ale naše nová politika má napsána pravidla pro třeba úplně jiné kontexty. Kdybychom na to zapomněli, bootování systému by s největší pravdepodobností skončilo chybou jádra.
Potřebujeme tedy ještě vynutit přeznačkování celého systému, aby se nám správně vytvořily kontexty pro danou politiku
[root@noutec ~]# touch /.autorelabel
Nyní můžeme restartovat. Po přeznačkování a znovunaběhnutí opět editujeme config
a nastavíme SELINUX
na enforcing
.
Změna módu
Změna módu podle konfiguračního souboru se provede až při následujícím startu systému, což by bylo poněkud nekomfortní. Proto, na rozdíl od změny politiky, mód lze měnit za běhu příkazem setenforce
s parametrem 0
(vypne enforcing) nebo 1
(zapne enforcing), čehož hojně využijeme při konfiguraci systému. V předchozím příkladě jsme sice editovali config
, ale ke skutečné změně ještě nedošlo.
[root@noutec ~]# getenforce Permissive
Změnu tedy provedeme:
[root@noutec ~]# setenforce 1 [root@noutec ~]# getenforce Enforcing
/etc/selinux/(targeted|strict|mls)
seusers
V seusers je nastaveno mapovaní uživatelů do SELinux identit, úroveň oprávnění a kategorie pro indentitu. Pokud pro přihlašujícího se uživatele není explicitně dáno, jaká SELinux identita mu má být přiřazena, je použita default
identita.
Zápis je tvaru uživatel:indentita:oprávnění:kategorie
. Soubor je editovatelný pomocí programu semanage
.
system_u:system_u:s0-s0:c0.c1023 root:root:s0-s0:c0.c1023 __default__:user_u:s0
setrans.conf
Nejedná se přímo o konfigurační soubor, který by nějak ovlivňoval chování SELinuxu, ale můžeme zde nadefinovat překlady MLS:MCS
do čitelnější podoby. Pokud editujeme soubor a zapíšeme:
s0:c0=TopSecretData
Při vypsání kontextu souboru se nevypíše jako poslední komponenta s0:c0
, ale přeloží se jako TopSecretData
.
/etc/selinux/(targeted|strict|mls)/contexts/
default_type
Zde jsou nastaveny implicitní typy pro jednotlivé role. Pokud ve strict nebo MLS politice použijeme příkaz newrole -r sysadm_r
, bude uživateli přiřazen typ sysadm_t
.
default_contexts
Specifikuje implicitní role pro přihlášení uživatelů, ssh sezení nebo cron práce (job). V prvním sloupci je část kontextu (role:doména) procesu. Když je třeba přihlášení, sezení nebo jobu přiřadit kontext, najde se v prvním sloupci vyhovující část a přiřadí uživateli první vyhovující část kontextu z druhého sloupce, pro který je uživatel autorizován. V prvním sloupci nenajdeme záznam user_r:user_t
, protože tito uživatelé nejsou oprávněni svůj kontext změnit.
failsafe_contexts
Pokud se systému nepodaří najít kontext, který by měl být přiřazen přihlašujícímu se uživateli, zkusí použít zde definovaný kontext.
removable_context
Kontext, který bude přiřazen vyměnitelným zařízením.
initrc_context
Kontext, se kterým budou prováděny initrc skripty.
netfilter_contexts
Nastavení kontextů pro příchozí pakety podle použitého protokolu a příchozího portu.
userhelper_context
Kontext pro programy spuštěné pod superuživatelem.
/etc/selinux/(targeted|strict|mls)/contexts/files/
file_contexts
Soubor obsahující stovky cest k souborům v podobě regulárních výrazů a kontext jim přiřazený. Tento soubor je použit při značkování systému. Soubor je sice editovatelný, ale při aktualizaci politiky se tento soubor přepíše.
file_contexts.homedirs
Soubor použitý při značkování domovských adresářů, vygenerovaný pomocí programu genhomedircon
z homedir_template
. Kontexty v něm obsažené jsou rozděleny na SELinux identity (podle mapování v seusers
).
homedir_template
Šablona pro genhomedircon
určující, jak mají být označkovány soubory v domovských adresářích.
media
Kontexty pro cdrom, floppy a pevné disky.
/etc/selinux/(targeted|strict|mls)/modules/
Tento adresář obsahuje dva podadresáře active
a previous
. V active jsou uloženy soubory ( seusers
, file_contexts
, homedir_template
a další), podle kterých je sestavena právě běžící politika a v adresáři modules jsou moduly zavedené do jádra. V previous jsou soubory pro předchozí politiku.
/etc/selinux/(targeted|strict|mls)/policy/
Adresář, kde je uložena politika, která se při startu systému zavádí do jádra.
Závěr
Dnes jsme se zaměřili na první část konfiguračních souborů SELinuxu. Ačkoliv jsme si ukázali téměř všechny, povětšinou budeme pracovat pouze se souborem /etc/selinux/config, nicméně je dobré vědět, co který soubor a adresář obsahuje, kdybychom například chtěli vědět, jaké kontexty budou mít například adresáře v /etc/. A podívali jsme se, jaké druhy politik a módů SELinux nabízí a k čemu se nám vícero politik a módů hodí.
Použité zdroje:
Česká dokumentace pro SELinux
MCCARTY Bill. SELinux. 1005 Gravenstein Highway North, Sebastopol, CA 95472: O'Reilly Media, Inc., 2004, 254s. ISBN 0–596–00716–7
Fedora SELinux Project Pages
Configuring the SELinux Policy
LOSCOCCO, Peter. Integrating Flexible Support for Security Policies into the Linux Operating System
Red Hat Enterprise Linux 4: Red Hat SELinux Guide
MORRIS, James. An Overview of Multilevel Security and LSPP under Linux
MORRIS, James. A Brief Introduction to Multi-Category Security (MCS)
CAPLAN, David, MACMILLAN, Karl, MAYER, Frank. SELinux Concepts
COKER, Faye. Writing SE Linux policy HOWTO
WALSH, Dan. danwalsh's Journal