Pozadí
SELinux přidává další vrstvu kontroly oprávnění v systémech Linux. Na systémech s povoleným SELinuxem se nejprve kontrolují běžná oprávnění DAC, a pokud umožňují přístup, zásady SELinux je konzultováno. Pokud politika SELinux odepře přístup, vygeneruje se záznam protokolu v protokolu auditu v /var/log/audit/audit.log
nebo v dmesg, pokud auditd
v systému neběží.
SELinux přiřadí štítek nazvaný security context , ke každému objektu (souboru, procesu atd.) v systému:
-
Soubory mít kontext zabezpečení uložený v rozšířených atributech. Ty lze zobrazit pomocí
ls -Z
.SELinux udržuje vzor databáze mapování cest na výchozí kontexty souborů. Tato databáze se používá, když potřebujete ručně obnovit výchozí kontexty souborů nebo když je systém přeznačen. Tuto databázi lze dotazovat pomocí
semanage
nástroj. -
Procesy jsou přiřazeny bezpečnostní kontext při spuštění spustitelného souboru (
execve
systémové volání). Kontexty zabezpečení procesů lze zobrazit pomocí většiny nástrojů pro monitorování systému, například pomocíps Z $PID
. -
Existují i jiné označené objekty, ale nejsou pro tuto odpověď relevantní.
zásady SELinux obsahuje pravidla které určují, které operace mezi kontexty jsou povoleny. SELinux funguje na whitelistu pravidla, je zakázáno cokoli, co politika výslovně nepovoluje. Referenční politika obsahuje moduly politik pro mnoho aplikací a je to obvykle politika používaná distribucemi podporující SELinux. Tato odpověď primárně popisuje, jak pracovat s politikou založenou na referenční politice, kterou s největší pravděpodobností používáte, pokud používáte politiku poskytovanou distribucí.
Když spustíte aplikaci jako váš běžný uživatel, pravděpodobně si SELinux nevšimnete, protože výchozí konfigurace umisťuje uživatele do unconfined kontext. Procesy běžící v bez omezení kontextu mají jen velmi málo omezení. Možná budete moci spustit svůj program bez problémů v uživatelském prostředí v neomezeném kontextu, ale při spuštění pomocí systému init už nemusí fungovat v omezeném kontextu.
Typické problémy
Pokud jsou soubory v jiném než výchozím umístění (není popsáno ve výchozích zásadách), problémy často souvisí s následujícími důvody:
-
Soubory mají nesprávný/nekompatibilní kontext souboru :Soubory přesunuty s
mv
uchovávat jejich metadata včetně kontextů zabezpečení souborů ze starého umístění. Soubory vytvořené v novém umístění zdědily kontext z nadřazeného adresáře nebo procesu vytváření. -
Více démonů používajících stejné soubory :Výchozí zásada nezahrnuje pravidla umožňující interakci mezi příslušnými bezpečnostními kontexty.
Soubory s nesprávným kontextem zabezpečení
Pokud soubory nepoužívá jiný démon (nebo jiný omezený proces) a jedinou změnou je umístění, kde jsou soubory uloženy, požadované změny konfigurace SELinuxu jsou:
- Přidat nové pravidlo do kontextové databáze souboru
- Na existující soubory použijte správný kontext souboru
Kontext souboru ve výchozím umístění lze použít jako šablonu pro nové umístění. Většina modulů zásad obsahuje dokumentaci manuálové stránky (vygenerovanou pomocí sepolicy manpages
) vysvětlující možné alternativní kontexty souborů s jejich sémantikou přístupu.
Kontextová databáze souborů používá syntaxi výrazu regulualr, která umožňuje zápis překrývajících se specifikací. Je vhodné poznamenat, že použitý kontext je poslední nalezená specifikace.
Chcete-li přidat nový záznam do kontextové databáze souboru:
semanage fcontext -a -t <type> "/path/here/(/.*)?"
Po přidání nové kontextové položky do databáze lze kontext z databáze použít na vaše soubory pomocí restorecon <files>
. Spuštěn restorecon
s -vn
flags zobrazí, jaké kontexty souborů by se změnily, aniž by byly aplikovány jakékoli změny.
Testování nového kontextu souboru bez přidání nové položky do databáze
Kontext lze ručně změnit pomocí chcon
nástroj. To je užitečné, když chcete otestovat nový kontext souboru bez přidání položky do databáze kontextu souboru.
Nový kontext souboru je uveden v argumentech chcon
. Při použití s --reference=
Pokud zvolíte možnost, kontext zabezpečení z referenčního souboru se zkopíruje do cílových souborů.
pomocí specifického kontextu (default_t
):
chcon -t default_t <target files>
nebo pomocí odkazu:
chcon --reference=<path to default location> <target files>
Poznámka o různých systémech souborů a přípojných bodech
Pokud je nové umístění jeho vlastním přípojným bodem, lze kontext nastavit pomocí volby připojení. Kontextová sada s možností připojení není uložena na disku, takže ji lze použít také se systémy souborů, které nepodporují rozšířené atributy.
mount <device> <mount point> -o context="<context>"
Povolení procesům běžícím v různých kontextech zabezpečení používat stejné soubory
Možnost 1:Logické hodnoty
Referenční zásady zahrnují laditelné možnosti, nazývané booleans , která povolují/zakazují některá další pravidla. Mnoho z nich umožňuje vzájemnou spolupráci různých systémových démonů, kteří obvykle nepoužívají stejné soubory.
Seznam všech možných laditelných voleb a jejich popis lze vypsat pomocí semanage boolean -l
. audit2allow
může být také schopen přímo zjistit, který booleovský kód je třeba povolit.
Chcete-li povolit/zakázat boolean pomocí semanage
:
semanage boolean --on <boolean name>
semanage boolean --off <boolean name>
Booleany jsou nejjednodušší způsob, jak upravit politiku. Všechny možné situace však nelze řešit přepnutím booleanu. Některé booleany také umožňují velmi široký přístup, protože jsou příliš tolerantní.
Možnost 2:Rozšířit zásady o nový modul
Pokud neexistuje boolean, který by umožňoval přístup, je třeba zásady upravit přidáním vlastního modulu.
Jednoduchý modul, který přidá požadovaná pravidla pro umožnění přístupu, lze vygenerovat ze souborů protokolu pomocí audit2allow
pomocí následujících kroků:
-
Nastavte doménu démona (bezpečnostní kontext) do povoleného režimu . V permisivním režimu nejsou zásady vynucovány , ale protokoly jsou generovány pro přístup, který by zásada normálně odepřela.
semanage permissive -a <domain>
-
Otestujte svého démona v normálním provozu, abyste vygenerovali položky protokolu.
-
Vytvořte nový modul zásad a vložte jej.
audit2allow -a -M <name> semodule -i <name>.pp'
-
Znovu povolte režim vynucení
semanage permissive -d <domain>
Tato metoda funguje nejlépe, pokud se jedná pouze o několik kontextů zabezpečení. Ve složité konfiguraci budete pravděpodobně muset napsat svůj vlastní modul zásad. Některé zdroje pro začátek jsou gentoo wiki a dokumentace k referenčnímu rozhraní API.
Pomocí tohoto příkazu:
# semanage fcontext -l /oldpath/
Výchozí kontexty SElinuxu můžete zkontrolovat ve složkách ve vašem systému, takže pomocí tohoto příkazu můžete vidět výchozí kontext dané složky démona.
Takže pak můžete zkontrolovat jakýkoli kontext SELinuxu, který byste měli nakonfigurovat v adresáři, do kterého chcete přesunout svůj obsah.
Řekněme, že vidíte, že vaše složka démona má tento kontext (je to kontext Apache):
# semanage fcontext -l
...
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
Potom použijete tyto kontexty na novou cestu, jako je tato (příklad s výchozím bezpečnostním kontextem démona apache)
# semanage fcontext -a -t httpd_sys_content_t '/newpath(/.*)?'
Poté, co to uděláte, vzhledem k tomu, že váš obsah je již na nové cestě, byste měli vynutit vše pod touto cestou, abyste získali tento kontext:
# restorecon -RFvv /newpath
Můžete zkontrolovat, zda to fungovalo, pomocí tohoto příkazu:
# ls -Zd /newpath/
Pamatujte, že když převedete adresář nebo soubory, zachová se kontext zabezpečení. Když zkopírujete složku nebo adresář, nastaví kontext na nadřazený kontext.
Pokud potřebujete zkontrolovat manuálové stránky pro konkrétní software, můžete manuálové stránky nainstalovat pomocí:
# yum install -y selinux-policy-devel
Nezapomeňte provést tento příkaz, abyste přeindexovali man db:
# mandb
Pak můžete spustit tento a zkontrolovat všechny manuálové stránky selinuxu.
# man -k selinux
Návrh, spusťte tento příkaz před a po instalaci tohoto balíčku, abyste viděli rozdíl:
# man -k selinux | wc -l