8 min read

SELinux: Noční můra adminů nebo šance na lepší spánek?

10.8.2025 22:10:44

Nedávno jsem byl na schůzce s klientem, kde popisovali svou linuxovou infrastrukturu a mimo jiné zmínili, že na RHEL operačních systémech mají vypnutý SELinux. Protože téma diskuze bylo jiné, tak jsem nepoložil základní otázku: „Proč?”

ChatGPT Image 12. 8. 2025 18_18_11

Pravděpodobně by pokračovala diskuze ve stylu podobném filmu Kulový blesk:
„My sice RHEL používáme, ale Máňa říkala, že používat SELinux není směroplatný.”
„A to se jako ještě v téhle době děje?”
„No bohužel tedy to se může. Jiná věc ovšem je, že v případě kompromitace systému může vzniknout škoda. A to riziko při nepoužívání SELinuxu není malé. Koneckonců, je to vaše věc.”
„No ale vždyť my to tak děláme (rozumějte – nepoužíváme SELinux) už pětadvacet let…”

Shodou okolností jsem před prázdninami realizoval několik školení na Red Hat Enterprise Linux. Konkrétně Red Hat System Administration II (RH134)RHCSA Rapid Track Course (RH199), které se obsahově překrývají a jejichž součástí jsou i sekce zaměřené právě na konfiguraci a použití SELinuxu. Měl jsem tedy příležitost se studenty diskutovat jejich zkušenosti v této oblasti. Obecně zaznívalo, že SELinux nepoužívají, protože s ním nemají zkušenosti a připadá jim složitý.

Tím ve mně evokovali vzpomínku, jak jsem kdysi pomáhal zavádět novou instalační base image RHEL 7 a shodli jsme se tenkrát, že chceme, aby byla o chlup bezpečnější než předchozí. Proto – vedle řady jiných opatření – jsme v image nechali zapnutý SELinux, přestože předtím se vypínal. A když už, tak rovnou i v enforcing módu.
Při první příležitosti, když další kolegové instalovali nový databázový server, na tuto změnu v image samozřejmě zapomněli a řešili, proč jim ta databáze nefunguje, respektive připojení na ni. Chvíli byli zoufalí, pak našli jeden konfigurační přepínač – SELinux boolean – a skoro jako mávnutím kouzelné hůlky databázový server začal fungovat…

Co je to ten SELinux a k čemu slouží?
Security-Enhanced Linux (SELinux) je bezpečnostní modul, součást linuxového jádra, zajišťující mandatorní řízení přístupu. Jako takový slouží ke zvýšení bezpečnosti operačního systému.
Umožňuje definovat oprávnění k provedení operace na úrovni procesů, uživatelů a socketů. Zjednodušeně si to lze představit tak, že každý proces, uživatel a socket je označen labelem.
Když probíhá na systému nějaká operace (například aplikace přistupuje k souboru), dojde na základě předdefinovaných pravidel k ověření, zda aplikace s příslušným labelem má oprávnění daný soubor použít. Pokud labely aplikace i souboru pravidlo splňují, operace je umožněna. V opačném případě je zamítnuta – a příslušná událost samozřejmě zalogována.

Jak to funguje reálně?
Zkusme si fungování SELinuxu popsat na příkladu.
Máte server s RHEL a na něm provozujete webový server, třeba Apache. Protože používáte oficiální RH repozitáře, máte všechno správně předkonfigurované rovnou od instalace. Proces httpd má správný label, adresář /var/www/html má správný label, síťový port má správný label.
Prostřednictvím oblíbeného webového prohlížeče se přihlásíte na URL serveru a je vám zprostředkován obsah uložený v adresáři. Vše funguje, protože díky labelům na objektech jsou naplněna příslušná pravidla.

Teď si zkusme představit hypotetickou situaci: ve webovém serveru nastala chyba, které využil hacker. Jeho snahou je zjistit například konfiguraci serveru uloženou v souborech v adresáři /etc, nebo vyčíst obsah uživatelských home adresářů.
Dostane se k nim? Nikoliv – protože na těchto adresářích a souborech jsou jiné SELinux labely. A protože ty nenaplňují pravidlo pro httpd, kernel přístup neumožní.

Co když chci něco jinak než je v defaultu?
Chcete nějaký vlastní adresář vystavit? Postup je jednoduchý. Stačí vytvořit nové pravidlo. V něm nadefinujete zvolený adresář, za pomoci výrazu pirát (/.*)? povolíte jeho obsah včetně vnořeného obsahu, a doplníte příslušný label, který se má na adresář propsat.
Toto pravidlo pak už jen naaplikujete na zvolený adresář.

Chcete cíleně sdílet obsah z uživatelských home adresářů? Ani nemusíte definovat nové pravidlo – s touto možností se už počítalo. Jen není aktivní, protože ve výchozím stavu přece home adresáře sdílet nechcete.
Teď ale ano. Stačí přepnout příslušný přepínač (v terminologii SELinuxu jde o seboolean) a tím funkcionalitu aktivovat.

Chcete použít jiný než výchozí port? Opět vytvoříte nové pravidlo s příslušným labelem.

Nevíte, jaký label nastavit a jak chybu vyřešit? Řešení je poměrně jednoduché. Existuje několik cest:

  • Vylistuji si veškerá předkonfigurovaná pravidla a v nich příslušné najdu (například pomocí grep).
  • Podívám se pomocí ls -Z, jaký label je na adresáři, třeba /var/www/html, a stejný použiji v novém pravidle. Přepínač -Z slouží k zobrazení SELinux kontextu. Funguje i na jiné příkazy – například ps a další.
  • Pokus & omyl. Prostě webový server spustím a následně hledám příslušnou chybovou zprávu. Ať už v journalu, nebo audit logu, případně za pomoci webové konzole Cockpit. Součástí chybové zprávy je často i návrh na řešení, který lze aplikovat přímo tak, jak je, nebo jen s minimální úpravou.
  • RTFM. Alias otevřu si dokumentaci. Ani nemusím hledat na internetu – je rovnou na systému. Mimo jiné i ve formě man stránek.

Je SELinux složitý?
Domnívám se, že z pohledu běžné administrace není.
Znalost SELinuxu by měla patřit do výbavy každého správce linuxových operačních systémů. Pro správce Red Hat Enterprise Linuxu je taková znalost nutná – tedy pokud nepatříte do kategorie „vypínačů“.

Proto je SELinux součástí níže uvedených školení. V nich se mimo jiné naučíte:

  • jak SELinux subsystém ovládat – vedle enforcing módu existuje i permissive, který se hodí pro vývoj a ladění
  • že od RHEL 9 už nelze SELinux běžným způsobem vypnout (tedy pokud si jakože fakt nechcete hrát s kernel boot parametry)
  • jak nastavovat politiky (labely) na úrovni file systému
  • jak nastavovat SELinux politiky pro síťové porty
  • jak snadno najít chybu a opravit ji – nejen přes příkazovou řádku, ale i graficky pomocí web console

Možná si pak uvědomíte, že cca 99 % všeho potřebného je pro běžné použití už připraveno. A ve většině zbývajícího procenta stačí jen malá úprava. Ten zbytek? Ten už je pro vývojáře platforem – a ti už dávno vědí, jak SELinux politiky a pravidla konfigurovat.

Která školení o SELinux existují?

Základní znalosti pro správu operačního systému Red Hat Enterprise linux získáte v kurzech:

Zkušenosti získané z těchto dvou kurzů můžete potvrdit certifikační zkouškou Red Hat Certified System Administrator (RHCSA) exam Získáte tak oprávnění být označen jako Red Hat Certified System Administror.

Další možné kurzy jsou:

Co říct závěrem?
Studenti z předprázdninových školení na konci kapitol často říkali něco ve smyslu:
„SELinux se nám zdál složitý, protože jsme o něm moc nevěděli. Ale teď nám dává smysl a nebojíme se ho. Jen si ho trochu ošaháme, ale už víme, jak na to.”

P.S. Při psaní článku jsem narazil na skvělý seriál na Rootu z let 2007–2008: Jak správně na SELinux (https://www.root.cz/serialy/jak-spravne-na-selinux/).
Pokud chcete SELinuxu proniknout hlouběji pod pokličku, určitě doporučuji. Dnes už ale jako linuxový admin pravděpodobně nebudete potřebovat pravidla, jak jsou v seriálu popsána, sami psát.

Václav Miller

Written by Václav Miller

Vašek se na IT moře vydal už na začátku 21. století a od té doby kormidloval různými proudy – od IBM mainframe systémů až po konzultace v oblasti infrastruktury a jejího provozu. Posledních 10 let se pohybuje v červených vodách Red Hatu, kde se stal ostříleným kapitánem hybridního cloudu a CloudForms implementací. Když zrovna nemá na palubě rozbalené Ansible playbooky, svižně manévruje s OpenShiftem a naviguje klienty skrze rozbouřené vody kontejnerových platforem. Díky svému přirozenému čichu na komplikace a smyslu pro strukturu umí i ty nejspletitější technické výzvy převést do srozumitelné mapy. A tak, zatímco někteří v IT čekají na klidný vítr, Vašek už dávno plachtí dál.

 

Chcete se dozvědět více?

Prostě jen klikněte na tlačítko níže a zarezervujte si s námi bezplatnou konzultaci.

 

ZAREZERVOVAT KONZULTACI ZDARMA