System opravneni zalozeny na identite subjektu (uzivatele), ktery muze opravneni predavat dale. V Linuxu jsou to klasicka souborova opravneni, Access Control Listy a Capabilities. Uzivatel muze explicitne predavat opravneni (chmod, setfacl) nebo jsou predavana implicitne pri spousteni programu. Neni kvuli tomu mozne mit jednotnou systemovou bezpecnostni politiku, protoze na ni maji uzivatele vliv. Navic se programum predavaji plna opravneni uzivatele, coz vytvari vetsi moznost zranitelnosti.
Operacni system ridi opravneni subjektu (vetsinou procesu) provadet operace s objektem. Je urcen pro omezeni opravneni programu jen na minimum, ktere opravdu potrebuji, aby se predeslo moznemu zneuziti bezpecnostnich chyb v nich. V korporacich se take vyuzva k omezovani pristupu uzivatelum k citlivym datum.
Implementace Mandatory Access Control v Linuxu podporovana Red Hatem. Sklada se z casti v kernelu, ktera se stara o vynucovani politiky a userspace utilit, ktere se staraji o konfiguraci politik a pridelovani kontextu souborum a hlaseni problemu.
Kontext je atribut objektu, ktery je pouzivan pro rozhodovani o opravnenich. Kontext se sklada z:
Priklad textove reprezentace kontextu: unconfined_u:object_r:user_home_t:s0
Kontext procesu urcuje opravneni procesu. Po forku dedi potomek kontext rodice, pri execve se muze uplatnit prechod mezi domenami. Pokud politika prechod definuje a typ spousteneho souboru je povolen jako entry point, ziskava proces novou domenu definovanou v politice. Jinak mu zustava puvodni. Kontext procesu lze vypsat pomoci `ps -Z`.
Kontext souboru je ulozen v extended atributu "security.selinux" (programove lze ziskat pres getxattr(2)). Pro vytvareni dedi soubor kontex nadrazene slozky, pri presouvani mu zustava puvodni kontext. Pro oznacovani souboru kontexty jsou v politice nadefinovana pravidla sestavajici se z regularnich vyrazu aplikovanych na cestu souboru. Jadro ale tyto pravidla primo nepouziva, o nastaveni kontextu souboru podle pravidel se musi postarat programy v userspace. Pro nastaveni kontextu podle aktualni politiky se pouziva nastroj `restorecon`. Manualne lze nastavit konkretni kontext prikazem `chcon`. V novejsich verzich jsou podporovany file transitions, ktere umoznuji uz pri vytvareni oznacit soubor jinym typem, nez je typ nadrazene slozky.
Kontext souboru lze vypsat pres `ls -Z`
Mody:
Sady bezpecnostnich nastaveni odpovidajici castym use-cases, ktere lze podle potreby zapinat/vypinat. Prikladem je httpd_enable_homedirs, povolujici apache cist z domovskych adresaru uzivatelu. Prepinaji se prikazem `setsebool`.
Priklad:
setsebool -P httpd_enable_homedirs 1(-P uklada nastaveni, aby bylo efektivni i po rebootu) Tip: vetsina z nich ma pekne manualove stranky s nazvem neco_selinux v sekci 8, napr. httpd_selinux
Logy: /var/log/audit.log nebo /var/log/avc.log (ne vse je logovano)
setroubleshootd - daemon prevadejici zpravy do lidske podoby, lze prohlizet pres sealert
Castou pricinou je nespravny kontext souboru po presunu nebo zmene policy. Resenim je obnoveni spravneho kontextu pres restorecon.
Pokud je program soucasti distribuce, je pravdepodobne, ze pro danou akci existuje boolean.
Pokud je kontext spravny a program opravdu potrebuje dane opravneni a neexistuje pouzitelny boolean, je nutne pro nej vytvorit/vygenerovat novou politiku.
(Pripadne resenim, ktere je na puli cesty k setenforce 0 je
semanage permissive -a domenacoz vypne vynucovani politiky pouze pro danou domenu)
Pravidla se seskupuji do modulu, ktere lze nezavisle nahravat a odebirat. K vytvoreni minimalni politiky, ktera ma za cil omezit prava urciteho programu je potreba vytvorit alespon .te soubor, popisujici typy a pravidla a .fc soubor, specifikujici kontexty souboru na zaklade cest.
Skript, ktery chceme omezit:
#!/bin/bash # vypise svuj aktualni kontext cat /proc/self/attr/current echo
mypolicy.te:
policy_module(mypolicy, 0.1) # deklaruje zavislosti modulu gen_require(` role unconfined_r; type unconfined_t; type proc_t; class file { read }; ') # deklarace domeny, pod kterou pobezi nas skript type myscript_t; # deklarace typu souboru skriptu type myscript_exec_t; # povolit domenu myscript_t pro unconfined_r roli role unconfined_r types myscript_t; # povolit typ myscript_exec_t jako entry point aplikace application_domain(myscript_t, myscript_exec_t); # nastavit prechod pod nasi domenu pri spusteni domain_auto_transition_pattern(unconfined_t, myscript_exec_t, myscript_t); # povolit vypis na terminal userdom_use_user_terminals(myscript_t); # povolit precist si /proc allow myscript_t proc_t:file read;
mypolicy.fc
/usr/local/bin/script\.sh -- gen_context(unconfined_u:object_r:myscript_exec_t, s0)
Sestaveni politiky:
make -f /usr/share/selinux/devel/Makefile # umisteni Makefile je zavisle na distribuci
Nacteni politiky:
semodule -i mypolicy.pp restorecon -v /usr/local/bin/script.sh
Dalsi implementace MAC pro Linux podporovana Canonicalem a Suse. Narozdil od SELinuxu primo v kernelu pracuje s cestami k souborum, cimz predchazi chybam pramenicim ze spatneho oznaceni souboru. Druhou stranou mince je jiny kontext hardlinku vedoucich na stejna data. Je povazovan za jednodussi na nastaveni.
Politiky (zde nazyvane profily) se umistuji do /etc/apparmor.d/. Jejich mod lze prepinat pomoci aa-enforce (enforcing) a aa-complain (ekvivalent permissive). Nacitaji se pres apparmor_parser.
Priklad profilu pro ping:
#include <tunables/global> /bin/ping flags=(complain) { #include <abstractions/base> #include <abstractions/consoles> #include <abstractions/nameservice> capability net_raw, capability setuid, network inet raw, /bin/ping mixr, /etc/modules.conf r, }