Jak na SELinux: konfigurační soubory

18. 1. 2008
Doba čtení: 7 minut

Sdílet

Pokračování seriálu o bezpečnějším počítači se subsystémem SELinux. Hlavní principy SELinuxu již máme za sebou, ale téměř jsme si nepověděli o místech, kde najdeme konfigurační soubory a co je v nich. Na první část těchto souborů se podíváme dnes. Ukážeme si také, jaké možnosti nastavení SELinux nabízí.

Řekneme si o:

  • /etc/selinux/ a podřazených souborech a adresářích
  • Politikách a módech SELinuxu
knihy

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 jako AVC 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/con­fig, 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/(tar­geted|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/(tar­geted|strict|mls)/con­texts/

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/(tar­geted|strict|mls)/con­texts/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 genhomedirconhomedir_tem­plate. 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/(tar­geted|strict|mls)/mo­dules/

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/(tar­geted|strict|mls)/po­licy/

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/con­fig, 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í.

bitcoin školení listopad 24

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

Autor článku