Praktisk guide till AppArmor
I den fragmenterade värld som Linux idag är så finns det såklart flera sätt att göra något på, som exempelvis att härda sina system. SELinux är vad RedHat, OpenSUSE (sedan i år) och Fedora kör, medans Debian och Ubuntu (och dess derivat) kör AppArmor.
I det här inlägget tänker jag skriva litet om hur jag föredrar att arbeta med AppArmor.
AppArmor använder sig av profiler
AppArmor har ett mycket moget verktygsbälte, och fungerar utifrån en uppsättning profiler: som regel en profil per applikation.
Det första, och det viktigaste jag vill få sagt med detta inlägg: Stäng aldrig av AppArmor. Det skapar följdproblem som kan leda till mycket snåriga följdeffekter. Istället, sätt en önskad profil till complain eller unconfined.
Vad är skillnaden på dessa?
- Complain kommer att tillåta programmet profilen berör att göra allt, men kommer att logga till auditloggen.
- Unconfined kommer att tillåta programmet profilen berör att göra allt, utan att logga något.
Det tredje läget, som är normalläget, är enforced. Då nekar profilen access, samt loggar till auditloggen.
Hantera profiler
Det önskade arbetssättet för att härda systemet är därför följande:
- Skapa en profil med läget complain, och låt den inte få göra någonting från start.
- Kör programmet som vanligt.
- Inspektera Auditloggen och se vad programmet gör.
- Ta ställning och tillåt profilen att göra saker.
- Spara ändringarna till profilen och läs in ändringarna i AppArmor.
- När ingenting mer genereras i Auditloggen, sätt profilen till enforced.
Tack vare verktygsbältet i AppArmor är ovanstående riktigt enkelt att göra.
För att skapa en profil, använd aa-easyprof som root eller i upphöjt läge. I exemplet används ss.
Ta först reda på sökvägen till ss.
$ type ss
ss is /usr/bin/ss
Testa därefter att köra aa-easyprof.
aa-easyprof /usr/bin/ss
Detta skriver en blank profil till stdout, där profilen är helt nedlåst. För att skapa en faktisk profil, behöver detta sparas till en fil i katalogen /etc/apparmor.d.
$ aa-easyprof /usr/bin/ss > /etc/apparmor.d/usr.bin.ss
Notera här att /usr/bin/ss omvandlas till usr.bin.ss. Detta är en namnkonvention i AppArmor: inget inledande snedstreck, och punkt istället för snedstreck.
Aktivera sedan profilen genom att sätta den till enforced (ss kommer inte att få köra alls och populera Auditloggen) eller complain (ss kommer köra men populera Auditloggen). I exemplet används complain.
aa-complain /etc/apparmor.d/usr.bin.ss
Kör sedan ss, t ex ss -tuna. Detta kommer att generera rader i Auditloggen där ss saknar rättigheter baserat på sin profil.
För att utreda dessa rättigheter, finns en guidad hjälpreda: aa-logprof.
aa-logprof
Denna kommer att föra följande:
- För varje ej hanterad rad i Auditloggen, kommer de presenteras på skärmen med några val: Lägg till, globifiera (lägg till wildcards), ignorera etc.
- När allt hanterats, skrivs ändringarna till profilens fil.
- Profilen laddas om.
Det är rätt likt dialogen och flödet för git add -p eller git commit -p om dessa är bekanta.
Om ss -tuna körs igen, så kommer aa-logprof förhoppningsvis inte larma något mer då allt ss -tuna behöver finns tillåtet i profilen.
Har man haft profilen på complain fram tills nu, är det dags att byta till enforced.
aa-enforce /etc/apparmor.d/usr.bin.ss
Video och några avslutande ord
Så går det till!
För en mer noggrann och pedagogisk genomgång, se denna video.
VIKTIGT. I Ubuntu Server 24.04 var AppArmor trasigt vid nyinstallerat OS. Kör du detta OS, så kanske följande sida kan vara till hjälp.