Jak v selinuxu pridat prava pro proces k adresari/souboru ?
Petr Simek
psimek na jcu.cz
Čtvrtek Březen 30 13:20:34 CEST 2017
On Thu, 30 Mar 2017, Adam Pribyl wrote:
Dobry den
dekuji za obsirny popis p. Kankovskeho i za tenhle zkraceny priklad.
Udelal jsem to nakonec podle nej a kupodivu to zafungovalo. V logu
byla hlaska co je za problem , audit2allow z ni udelal pravidlo ktere
je treba zadat a vytvoril i modul ktery po natazeni pomoci semodule
zpusobil ze to ted funguje. Dokonce i po rebootu :-)
Vypada to ze se to pravidlo nejak zabudovalo do konfigurace selinuxu,
ten prikaz "semodule -i local.pp" trval asi 30 vterin nez skoncil,
docela dlouho na to ze to vlatne aplikovalo jednu radku :
allow postfix_local_t arpwatch_data_t:file { getattr open read };
Kazdopadne diky - mam co jsem potreboval.
*------------------------------------------------------------------------*
| Petr Simek APS JU |
| psimek na jcu.cz |
*------------------------------------------------------------------------*
> Velice hezky napsano, skoro skoda, ze neco takoveho clovek na netu nenajde.
> Ja pouzivam variantu 3 a jeji zapis ve zkracene forme vypada takto:
>
> grep "cochci" /var/log/audit/audit.log | adit2allow -M local
> semodule -i local.pp
>
> to uz nevypada tak slozite - z audit logu musite vzit opravdu jen to
> relevantni, bohuzel uz jsem zazil ruzna prekvapeni, ktera ani v audit logu
> videt nebyla.
>
> Pred casem jsem napr. resil jak dostat soubor, ktery prijde mailem na web -
> to mate travers z postfixu pres procmail do httpd. Moc zabavne. Pritom bez
> selinuxu na tom nic neni.
>
>
>
> On Thu, 30 Mar 2017, Pavel Kankovsky wrote:
>
>> On Wed, 29 Mar 2017, Petr Simek wrote:
>>
>>> Jak pridat prava cteni uzivateli postfix na ten adresar /var/lib/arpwatch
>>> a soubory v nem ? Aniz by to ovlivnilo stavajici nastaveni pro uzivatele
>>> arpwatch ktery ma ted nejaka selinux prava k /var/lib/arpwatch .
>>
>> Pořádné vysvětlení SELinuxu by asi bylo na delší lokte, ale zkusím to aspoň
>> stručně:
>>
>> SELinux se řídí tzv. kontexty, což jsou atributy víceméně nezávislé na
>> tradičních unixových uživatelích. Kontexty procesů lze zobrazit pomocí ps s
>> parametrem Z, kontexty souborů a adresářů pomocí ls s parametrem -Z.
>>
>> Kontext se skládá z několika složek, typicky má formu
>> uživatel_u:role_r:typ_t případně uživatel_u:role_r:typ_t:sX.cY. Odpověď na
>> otázku, zda má určitý kontext subjektu dovoleno provést nějakou operaci s
>> kontextem subjektu, se určuje podle aktivní politiky a používá se při tom
>> několik mechanismů, které se řídí různými složkami kontextů, ale obvykle
>> hlavní roli hrají typy a mechanismus známý jako type enforcement (TE).
>> Typům subjektů (což jsou v tomto případě procesy) se také říká domény.
>>
>> Adresář /var/lib/arpwatch a jeho obsah má pravděpodobně kontext
>> system_u:object_r:arpwatch_data_t:s0. U postfixu pak záleží na tom, který z
>> těch jeho procesů tam přistupuje. Nejpřímočařejší cesta, jak to bezpečně
>> zjistit, je obvykle pohled do audit logu, kam se zapisují pokusy o přístup,
>> které SELinux zaříznul (nebo většina z nich; jsou to zprávy typu AVC,
>> můžete je zkusit vyhledat pomocí ausearch -se arpwatch_data_t). Pro účely
>> této diskuse předpokládajme, že to bude program local, který nejspíš běží s
>> kontextem system_u:system_r:postfix_local_t:s0.
>>
>> Problém je, že standardní politika doméně postfix_local_t nedovoluje skoro
>> žádné operace s objekty typu arpwatch_data_t, jak se lze přesvědčit např.
>> programem sesearch:
>>
>> $ sesearch -A -s postfix_local_t -t arpwatch_data_t
>> Found 1 semantic av rules:
>> allow mailserver_delivery arpwatch_data_t : dir { getattr search open } ;
>>
>> Je vidět, že dovoleno má jen koukat na obsah adresářů a nic víc.
>> (Na tomto příkladu je navíc vidět použití tzv. atributu, což je de facto
>> množina typů, pomocí které lze elegantně povolit určitý přístup pro více
>> typů podobného charakteru.)
>>
>> V podstatě máte tři možnosti, jak postupovat:
>>
>> 1. Opustit ideu, že Postfix bude strkat nos přímo do dat arpwatche, a místo
>> toho nějakým programem (který bude mít oprávnění na obě strany) ta data
>> transportovat.
>>
>> 2. Dát souboru, který chcete mít přístupný z Postfixu, nějaký jiný kontext,
>> který bude vyhovovat všem zúčastněným. (Ad hoc to lze nastavit pomocí
>> chcon, ale čištší a trvanlivější je použít semanage fcontext a pak
>> restorecon.)
>>
>> 3. Upravit politiku tak, aby doména postfix_local_t (nebo atribut
>> mailserver_delivery) mohla číst ze souborů s typem arpwatch_data_t.
>>
>> Varianty 1 a 2 mohou být proveditelné i bez úpravy politiky, pokud se
>> najdou vhodné typy, které mohou fungovat jako prostředník (mám pocit, že
>> funkci na hledání takových prostředníků má program apol). Pokud se takový
>> typ nenajde, tak to může vyžadovat složitější úpravu než varianta 3 (ale
>> zase může být výsledek poněkud čistší.)
>>
>> Varianta 3 vyžaduje úpravu politiky ve všech případech. Asi nejrychlejší a
>> pro začátečníka nejschůdnější cesta je použít program audit2allow, nejlépe
>> s parametrem -m, který umí konvertovat hlášení z audit logu na malé kousky
>> selinuxové politiky povolující přístupy, jejichž zamítnutí bylo do logu
>> zaznamenáno. Výsledek může po očištění od různého smetí vypadat třeba nějak
>> takto (je to reálný příklad řešící problém, že démon cgrulesengd neměl
>> dovoleno dynamicky vyrábět nové cgrupy):
>>
>> module cgred_tmpl 1.0;
>> require {
>> type cgred_t, cgroup_t; class dir { write create };
>> };
>> allow cgred_t cgroup_t:dir { write create };
>>
>> Direktiva module říká, jak se modul jmenuje a jakou bude mít verzi,
>> direktiva require deklaruje použité entity (v tomto případě dva typy, třídu
>> dir tj. adresář a k ní dvě přístupová práva) a direktiva allow povoluje
>> určitý přístup (doméně cgred_t je v adresářích s typem cgroup_t povoleno
>> vytvářet nové objekty).
>>
>> Takový modul pak můžete příkazy checkmodule a semodule_package zkompilovat
>> (lze také použít makefile podle vzoru v /usr/share/selinux/devel/Makefile,
>> nebo snad lze finální modul přímo vygenerovat z audit2allow použitím -M) a
>> pomocí semodule -i přidat do aktuální politiky.
>>
>>
>> --
>> Pavel Kankovsky aka Peak "Que sçay-je?"
>
Další informace o konferenci Linux