AppArmor neumí být konkrétní, vygeneruješ profil, něco to změří/zjistí a podle toho nastaví staticky typu do kterých složek zapisuje/čte, které porty používá. To je vlastně vše, moc se to neliší od toho, jak vlastně můžeš konfigurovat služby přes systemd, takže to za mě nic moc nepřináší a ani to nic nestojí.
Selinux jde dá, pamatuje si kontext a vlastnictví, jednoduše řečeno, nestačí soubor někam přesunout nebo aplikaci donutit, aby něco nahrála někam jinám, tím selinux neobejdeš, appArmor ano.
AppArmor je asi vhodné používat kdykoliv můžeš, Selinux, kdy nad tím potřebuješ mít pevnou kontrolu.
Článků tady na rootu máš myslím o obouch několik, ty rozdíly se tam asi popisují.
Ale to přeci není pravda. AppArmor a SELinux by měly umět v podstatě to stejné (alespoň co se přístupu k souborům týče), jiná je konfigurace. SELinux jde tak nějak odspodu, využívá rozšířené atributy souborů a z těch zjišťuje kontext. AppArmor jde přes profily, které různě dědí přepíná a z toho určuje, kam daný proces může a to včetně vlastnictví.
Hlavní rozdíl je, IMHO, že SELinux se snaží fungovat out-of-the-box, AppArmor chce ruční konfiguraci, ale za mě se líp ohýbá.
Co jsem nenapsal správně?
AppArmor řeší aktuální cestu, je mu jedno, jak se dotyčný soubor tam dostal (jestli ho tam přesunul root či jiná aplikace). Selinux si k souboru při vytvoření poznamená metadata a je mu pak jedno, kam se soubor přesune, pro selinux je to pořád ten stejný bez ohledu na jeho umístění. To je třeba jeden z velkých rozdílů.
Na selinux musíš mít dopředu vytvořené také profily a to dost podrobné. AppArmor si umí profil vygenerovat po spuštění aplikace.
No, třeba jste psal, že AppArmor neřeší vlastnictví souboru. A že má menší vyjadřovací schopnost. To, pokud vím, není pravda (i když možná nějaké krajní případy se najdou).
Ano, AppArmor řeší aktuální cestu, stejně jako SELinux při relabel. Ano u SELinuxu cestují se souborem rozšířené atributy (a nebo taky cestovat nemusí, to už záleží na aplikaci). Ale základ obou systémů je v tom, že různé procesy mají různá práva i když běží pod stejným uživatelem. Rozdíl je v tom, jak je toho dosaženo, SELinux má poznačené soubory (plus pravidla), AppArmor má profil s cestou a pravidly. Proto je SELinux lákavější pro distribuce, protože se líp přednastavuje, ale AppArmor se zase líp přizpůsobuje.
U appArmor nemohu říct, že třeba uživatel X má přístup na všechny soubory, které vlastní (tedy u selinux vytvořil) uživatel Y. U Apparmoru mohu pouze nastavit rozdílné pravidla pro vlastníka (podle posix atributů) a pro ostatní.
Ano, selinux váže svoje labely pro inode objekty, apparmor vždy kontroluje jen aktuální cestu. Nedá se tam třeba jednoduše rozlišit více instancí jedné aplikace/binárky (teda pokud nevytvořím X symlinků na ní), selinux to umí.
To má třeba zajímavý dopad v případě lxc containerů (či dockerů), kdy appArmor s tím je trochu bezbranný a selinux neskutečně komplexní a složitý. Si nevybereš.