AppArmor

AppArmor je implementácia bezpečnostného modulu Linuxu (Linux Security Module) riadenia prístupu na základe mandátov založených na menách. AppArmor zabraňuje jednotlivým programom meniť súbory, ktoré sú definované v zozname dokumentu posix 1003.1e.

AppArmor sa nainštaluje spolu so systémom a hneď sa aj aktivuje. Používa profily aplikácií, aby určil, ktoré súbory a s akými právami daná aplikácia vyžaduje. Niektoré balíky nainštalujú svoje vlastné profily a niektoré ďalšie dodatočné profily sa nachádzajú v balíku apparmor-profiles.

Ak chceme nainštalovať balík apparmor-profiles, do príkazového riadka zadáme:

sudo apt-get install apparmor-profiles

Profily AppArmor majú dva módy spustenia:

  • Upozorňovací/Učiaci: umožňuje porušiť pravidlá v profile, porušenia sú však zaznamenané. Toto je užitočné pri testovaní a tvorbe nových profilov.

  • Prinucovací/Zákazový: striktne presadzuje politiku profilu a pokus o jej porušenie zaznamená.

Použitie AppArmor

Balík apparmor-utils obsahuje nástroje pre príkazový riadok, ktorými môžeme pre AppArmor zmeniť mód spustenia, nájsť stav profilu, vytvoriť nové profily, atď.

  • apparmor_status sa používa na zobrazenie aktuálneho stavu profilov AppArmor.

    sudo apparmor_status
  • aa-complain prepne profil do upozorňovacieho módu.

    sudo aa-complain /cesta/k/programu
  • aa-enforce prepne profil do prinucovacieho módu.

    sudo aa-enforce /cesta/k/programu
  • Profily AppArmor sa nachádzajú v priečinku /etc/apparmor.d. Tento priečinok môžeme použiť na zmenu módu všetkých profilov naraz.

    Ak chceme všetky profily naraz prepnúť do upozorňovacieho módu, zadáme:

    sudo aa-complain /etc/apparmor.d/*

    Keby sme ich chceli prepnúť do prinucovacieho módu, zadáme:

    sudo aa-enforce /etc/apparmor.d/*
  • apparmor_parser sa používa na načítanie profilu do jadra. Môžeme ho použiť aj na obnovenie už načítaných profilov použitím prepínača -r. Profil načítame takto:

    cat /etc/apparmor.d/neno.profilu | sudo apparmor_parser -a

    Obnovenie profilu urobíme takto:

    cat /etc/apparmor.d/meno.profilu | sudo apparmor_parser -r
  • /etc/init.d/apparmor môže byť použitý na obnovenie všetkých profilov:

    sudo /etc/init.d/apparmor reload
  • Priečinok /etc/apparmor.d/disable môže byť použitý pomocou príkazu apparmor_parser -R na vypnutie profilu.

    sudo ln -s /etc/apparmor.d/meno.profilu /etc/apparmor.d/disable/
    sudo apparmor_parser -R /etc/apparmor.d/meno.profilu

    Ak chceme znova zapnúť vypnutý profil, odstránime symbolické prepojenie na profil v /etc/apparmor.d/disable/. Potom načítame profil spolu s prepínačom -a.

    sudo rm /etc/apparmor.d/disable/meno.profilu
    cat /etc/apparmor.d/meno.profilu | sudo apparmor_parser -a
  • AppArmor môžeme vypnúť a zrušiť aj načítanie modulu jadra zadaním príkazu:

    sudo /etc/init.d/apparmor stop
    sudo update-rc.d -f apparmor remove
  • Ak chceme znova obnoviť AppArmor, zadáme:

    sudo /etc/init.d/apparmor start
    sudo update-rc.d apparmor defaults
[Note]

Spojenie meno.profilu nahraďte menom profilu, s ktorým chcete manipulovať. Nahraďte tiež cestu /cesta/k/programu/ aktuálnou cestou spustiteľného súboru. Napríklad príkaz ping má cestu /bin/ping

Profily

Profily AppArmor sú jednoduché textové súbory umiestnené v priečinku /etc/apparmor.d/. Súbory sú nazvané podľa celej cesty k spustiteľnému súboru pričom znak "/" je nahradený znakom ".". Napríklad /etc/apparmor.d/bin.ping je AppArmor profil pre príkaz /bin/ping.

Existujú dva hlavné typy pravidiel použitých v profiloch:

  • Záznamy ciest: hovoria, ku ktorým súborom aplikácie je možné pristupovať v súborovom systéme.

  • Capability entries: určujú, aké právomoci budú môcť použiť neoprávnené procesy.

Napríklad sa môžeme pozrieť na profil /etc/apparmor.d/bin.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,
}
  • #include <tunables/global>: príkaz include znamená začleniť z iných súborov. Tento umožňuje nastaviť chovanie viacerých aplikácií, ktoré nastavíme v spoločnom súbore.

  • /bin/ping flags=(complain): cesta k profilovanému programu a nastavenie upozorňovacieho módu.

  • capability net_raw,: umožňuje aplikáciám pristupovať k funkcionalite CAP_NET_RAW Posix.1e.

  • /bin/ping mixr,: umožňuje aplikáciám čítať a spúšťať súbor.

[Note]

Ak upravíte profil, musíte ho znova načítať. Viac informácii sa dozviete v časti “Použitie AppArmor”.

Vytvorenie profilu

  • Návrh testovacieho plánu: Skúsme porozmýšlať, ako by aplikácia mala byť spúšťaná. Testovací plán si rozdelíme na malé testovacie prípady. Každý testovací prípad by mal mať krátky opis a zoznam krokov podobných týmto.

    Niektoré štandardné testovacie prípady sú:

    • Štartovanie programu.

    • Vypínanie programu.

    • Obnovenie programu.

    • Testovanie všetkých príkazov, ktoré podporuje init skript.

  • Generovanie nového profilu: Na vygenerovanie nového profilu použijem nástroj aa-genprof. Do príkazového riadka zadáme:

    sudo aa-genprof program

    Napríklad:

    sudo aa-genprof slapd
  • Ak chceme náš nový profil začleniť do balíka apparmor-profiles, súbor odošleme ako chybové hlásenie k balíku AppArmor do systému Launchpad:

    • Napíšeme testovací plán a testovacie prípady.

    • Pripojíme nový profil k hláseniu o chybe.

Aktualizácia profilov

Keď sa program nespráva tak ako by sa mal, odošle sa správa do log súborov. Na hľadanie v súboroch so záznamami AppArmor môžeme použiť nástroj aa-logprof, prezrieť si ich a aktualizovať profily. Do príkazového riadka zadáme:

sudo aa-logprof

Zdroje

  • Popis ďalších konfiguračných možností je na stránke AppArmor Administration Guide.
  • Detaily o používaní AppArmor s ostatnými vydaniami Ubuntu sa nachádzajú na stránke AppArmor Community Wiki.
  • Stránka OpenSUSE AppArmor je iná verzia úvodu do AppArmor.
  • Skvelým miestom, kde môžete získať pomoc ku AppArmor a spojiť sa s ostatnými členmi komunity Ubuntu Servera, je na IRC kanále #ubuntu-server na freenode.