Skip to main content

Cyber AI România

Miercuri, 16 septembrie 2026

Profiluri AppArmor personalizate: cum restricționezi accesul la fișiere, rețea și capabilități Linux

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.

Facebook
X
WhatsApp

Te-ar putea interesa si: