AppArmor poate limita o aplicație chiar dacă procesul rulează cu un utilizator care are acces mai larg. Profilul definește explicit ce fișiere poate citi sau modifica programul, ce tipuri de socket-uri poate crea și ce capabilități Linux poate folosi. Operațiunile pentru care nu există o regulă permisivă sunt refuzate când profilul rulează în modul enforce. GitLab
Exemplul următor folosește aplicația /usr/local/bin/report-api, care citește configurația din /etc/report-api/, scrie date în /var/lib/report-api/ și deschide conexiuni TCP.
Verifică AppArmor și pregătește mediul
Instalează instrumentele de administrare:
sudo apt update
sudo apt install apparmor-utils
Confirmă starea sistemului:
sudo aa-status
systemctl status apparmor
Pe Ubuntu, AppArmor este instalat și încărcat implicit, iar pachetul apparmor-utils oferă instrumente precum aa-genprof, aa-logprof, aa-complain și aa-enforce. Ubuntu Documentation
Verifică executabilul real:
readlink -f /usr/local/bin/report-api
systemctl cat report-api.service
Profilul trebuie asociat exact executabilului lansat de serviciu, nu unui wrapper diferit.
Generează profilul inițial
Oprește aplicația, apoi pornește generatorul:
sudo systemctl stop report-api
sudo aa-genprof /usr/local/bin/report-api
În alt terminal, pornește serviciul și testează toate funcțiile legitime:
sudo systemctl start report-api
curl -f http://127.0.0.1:8080/health
Testează citirea configurației, scrierea datelor, logurile și conexiunile externe necesare. aa-genprof urmărește evenimentele AppArmor și construiește interactiv profilul inițial, dar rezultatul trebuie revizuit manual înainte de producție. Ubuntu Documentation
Profilul va fi salvat, în mod obișnuit, sub un nume derivat din cale:
/etc/apparmor.d/usr.local.bin.report-api
Restricționează accesul la fișiere
Un profil minim poate include:
#include <tunables/global>
/usr/local/bin/report-api {
#include <abstractions/base>
/usr/local/bin/report-api mr,
/etc/report-api/ r,
/etc/report-api/** r,
/var/lib/report-api/ rw,
/var/lib/report-api/** rwk,
/var/log/report-api/ rw,
/var/log/report-api/** rw,
/tmp/report-api-* rw,
}
Permisiunile uzuale includ r pentru citire, w pentru scriere, m pentru mapare executabilă și k pentru blocarea fișierelor. Regulile sunt bazate pe căi și trebuie terminate cu virgulă. Globul * nu traversează separatorul /, în timp ce ** poate acoperi recursiv subdirectoarele. GitLab
Nu folosi reguli excesive precum:
/** rw,
Acestea anulează practic mare parte din beneficiul izolării.
Limitează accesul la rețea
Pentru conexiuni TCP IPv4 și IPv6:
network inet stream,
network inet6 stream,
Pentru o aplicație care folosește numai UDP IPv4:
network inet dgram,
AppArmor oferă reguli de rețea la un nivel relativ general, pe familie și tip de socket. Acestea nu înlocuiesc UFW, nftables sau regulile cloud și nu trebuie tratate ca filtrare completă după IP și port. GitLab
Nu adăuga network raw sau network packet unei aplicații web obișnuite. Astfel de permisiuni sunt relevante doar pentru programe care trebuie să lucreze direct cu pachete de rețea.
Acordă numai capabilitățile necesare
Dacă aplicația rulează cu utilizator neprivilegiat, dar trebuie să asculte pe un port sub 1024, poate avea nevoie de:
capability net_bind_service,
Un program care își schimbă identitatea poate necesita:
capability setuid,
capability setgid,
Regulile capability permit utilizarea capabilităților POSIX/Linux indicate. Nu adăuga automat sys_admin, dac_override sau net_admin; acestea oferă puteri considerabile și trebuie justificate separat. GitLab
Testează profilul fără să dezactivezi protecția globală
Treci numai profilul aplicației în modul de observare:
sudo aa-complain /usr/local/bin/report-api
sudo systemctl restart report-api
Reprodu toate operațiunile, apoi verifică blocările:
sudo journalctl -k --since "15 minutes ago" |
grep 'apparmor="DENIED"'
sudo aa-logprof
aa-logprof analizează mesajele AppArmor și propune actualizări ale profilului. Nu accepta mecanic fiecare recomandare; confirmă dacă accesul este legitim și restrânge regula la calea exactă. Ubuntu Documentation
Verifică sintaxa și reîncarcă profilul:
sudo apparmor_parser -r \
/etc/apparmor.d/usr.local.bin.report-api
Activează aplicarea:
sudo aa-enforce /usr/local/bin/report-api
sudo systemctl restart report-api
La final, testează endpoint-urile, scrierea datelor, restartul serviciului și logurile. Un profil bun permite strict comportamentul necesar aplicației și refuză accesul accidental la alte fișiere, socket-uri sau privilegii.
Surse folosite
Ubuntu Server Documentation — crearea și administrarea profilurilor AppArmor. Ubuntu Documentation
Ubuntu Manpages — sintaxa apparmor.d, reguli pentru fișiere, rețea și capabilități. Ubuntu Manpages
AppArmor Project — ghidul limbajului de profil și modelul implicit de refuz. GitLab
Ubuntu Manpages — aa-genprof și aa-logprof.

















































