GNU/Linux >> Znalost Linux >  >> Linux

Nakonfigurujte SELinux tak, aby démonům umožnil používat soubory v jiných než výchozích umístěních

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ů:

  1. 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>
    
  2. Otestujte svého démona v normálním provozu, abyste vygenerovali položky protokolu.

  3. Vytvořte nový modul zásad a vložte jej.

    audit2allow -a -M <name>
    semodule -i <name>.pp'
    
  4. 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

Linux
  1. Jak nakonfigurovat server SAMBA a přenášet soubory mezi Linuxem a Windows

  2. Jak používat Inotifywait ke sledování adresáře pro vytváření souborů s konkrétní příponou?

  3. Nelze spustit příkaz Configure:„žádný takový soubor nebo adresář“?

  1. Jak používat Awk a regulární výrazy k filtrování textu nebo řetězců v souborech

  2. Použijte příkaz fallocate k vytvoření souborů specifické velikosti v Linuxu

  3. Jak používat Logrotate ke správě souborů protokolu

  1. Jak přejmenovat soubory konkrétně v seznamu, který bude Wget používat?

  2. Ke kompresi/dekompresi souborů použijte cPanel File Manager

  3. Je možné použít / v názvu souboru?