Spustíte skript up jako root, dokončí se, a tentýž skript selže, když jej vyvolá služba. Na oprávněních souboru se nic nezměnilo, takže přirozeným dalším krokem je znovu je uvolnit, což nic neřeší. Na hostiteli se SELinuxem často nebývá rozhodující, kdo proces je, ale v jaké doméně běží, a root uvnitř omezené domény zůstává omezený.

Stejný příkaz, dvě různé bezpečnostní domény

Vynucování typů posuzuje zdrojovou doménu, cílový štítek a požadovanou operaci společně. Vaše terminálová relace běží v neomezené nebo administrativní doméně a démon běží v doméně, která je přiřazena jeho jednotce. Identické příkazy proto dávají různá rozhodnutí a tento rozdíl je záměrný, nikoli chyba v politice.

Proto je porovnání obou spuštění užitečné jen tehdy, porovnáte-li jejich kontexty. Spusťte stejný příkaz z shellu i z hooku; verze ze shellu dokazuje, že binárka existuje a argumenty jsou správné, ale nedokazuje nic o tom, zda smí služba příkaz provést. Spusťte jej oběma způsoby a porovnejte domény, ne jen návratové kódy. Právě toto porovnání promění vágní stížnost na oprávnění v konkrétní otázku o jedné doméně a jednom štítku.

Klasickým tvarem této závady je pomocník, který volá externí nástroj. Samotný hook může být povolen, zatímco nástroj, který volá, nese štítek, jenž doména služby nesmí spustit, nebo zapisuje do adresáře, jehož štítek to zakazuje.

Přečtěte si záznam AVC vedle chyby hooku

Odmítnutí AVC pojmenovává pole, která rozhodují případ: zdrojový kontext procesu, cílový kontext objektu, třídu objektu a konkrétní oprávnění, které bylo odmítnuto. Přečtěte si všechna čtyři, než vytvoříte teorii, protože odmítnutí spuštění a odmítnutí zápisu mají zcela odlišné opravy.

ausearch -m AVC,USER_AVC -ts recent
ls -Z /usr/local/sbin/vpn-up.sh
ps -eZ | grep openvpn

Zdrojový kontext by měl odpovídat doméně, ve které služba skutečně běží, a cílový kontext štítku souboru nebo adresáře, kterého se operace dotkla. Pokud se jedno z toho neshoduje s chybou, kterou sledujete, čtete jinou událost.

Všimněte si verze politiky a přesné cesty ke spustitelnému souboru vedle záznamu. Název domény, který se objevuje v politice jedné distribuce, je důkazem o této instalaci, nikoli zárukou, že jiná sestava dodává stejná pravidla. Právě tento kontext umožňuje někomu jinému zopakovat váš závěr na jeho vlastním hostiteli. Bez něj se záznam čte jako anekdota, nikoli jako důkaz.

Štítek, konfigurace, nebo politika: tři opravy

První opravou je štítek, který neodpovídá umístění nainstalovaného souboru. Skript zkopírovaný na místo pomocí cp nebo napsaný editorem může nést výchozí štítek, který doména služby nemůže použít, a obnovení očekávaného kontextu to vyřeší, aniž by se politika vůbec změnila.

Druhou je konfigurace. Distribuce může nabízet podporovaný způsob spuštění operace, dokumentovaný adresář pro pomocníka nebo aktualizovaný balíček politiky, který ji už povoluje. Změna vašeho uspořádání na podporované je levnější než psaní politiky a přežije aktualizace.

Třetí je skutečně chybějící pravidlo a mělo by být poslední možností. Vygenerujte kandidáta pomocí auditních nástrojů, přečtěte si, co skutečně povoluje, zúžte jej na operaci a doménu, kterou jste pozorovali, a nechte jej někoho jiného zkontrolovat, než se přiblíží produkci.

Proč starý allow modul není odpověď

Výsledky hledání této závady jsou plné hotových modulů, často pro nástroj, který hook už nevolá. Instalace jednoho uděluje oprávnění, která s vaším odmítnutím nemusí mít nic společného, a ponechává skutečný nesoulad na místě, zatímco přidává trvalou díru.

Skrývá také další selhání. Modul, který povoluje širokou třídu operací, způsobí, že tato chyba zmizí, a promění následující v něco mnohem hůř přiřaditelného. Odebrání modulu později je také změna, kterou nikdo nechce plánovat, takže zkratka má tendenci se stát trvalou.

Disciplinované porovnání je mezi odmítnutím, které můžete číst, a změnou, kterou navrhujete. Red Hat ve svém průvodci řešením problémů se SELinuxem staví kontroly štítků a konfigurace před generovanou politiku právě z tohoto důvodu. Pokud v záznamu není odpovídající odmítnutí, SELinux pravděpodobně není váš problém a problémy s cestou, sandboxem nebo oprávněními jsou stále otevřené.

Související články