Aller au contenu

AppArmor

À quoi il sert

AppArmor est un module de sécurité Linux (LSM) qui applique un contrôle d'accès obligatoire : un profil, rattaché à un programme par son chemin, décrit les fichiers qu'il peut lire ou écrire, les capacités, le réseau et les programmes qu'il peut lancer. Le noyau compare chaque opération à la politique compilée par apparmor_parser ; la décision s'ajoute aux permissions Unix et ne peut que restreindre. Un profil fonctionne en mode enforce (accès non prévus refusés et journalisés) ou complain (autorisés mais journalisés, pour la mise au point). aa-status liste les profils chargés et les processus confinés.

Quand le choisir

Sur Ubuntu, et sur Debian depuis Debian 10, il est actif par défaut, et de nombreux paquets livrent leur profil (rsyslog sur Ubuntu, par exemple) : il faut savoir le lire et diagnostiquer ses refus avant même d'écrire un profil. Ses règles par chemins sont plus simples à lire et à écrire que celles de SELinux, son équivalent sur Red Hat, qui étiquette chaque fichier et chaque processus. Pour confiner un service maison, les options de durcissement de systemd apportent souvent beaucoup pour moins d'effort qu'un profil complet.

Points d'attention

  • AppArmor ne protège que les programmes qui ont un profil : les autres sont unconfined. Vérifiez avec aa-status plutôt que de le supposer.
  • Un refus laisse dans le journal du noyau une ligne contenant apparmor="DENIED", l'opération, le profil et le chemin : journalctl -k -g 'apparmor="DENIED"'. Pensez-y quand un service ne peut pas lire un fichier dont les droits sont pourtant corrects.
  • Les profils sont dans /etc/apparmor.d/ ; apparmor-utils fournit aa-enforce, aa-complain, aa-genprof et aa-logprof, et apparmor_parser -r <fichier> recharge un profil.
  • Construisez un nouveau profil en mode complain, sur un trafic réel, avant de passer en enforce ; pour une application interprétée (Python), il doit suivre chaque nouvelle dépendance.
  • Ne désactivez pas AppArmor pour « faire marcher » un service : corrigez le profil ou l'emplacement du fichier.
  • Ubuntu 24.04 restreint par AppArmor les espaces de noms utilisateur non privilégiés (kernel.apparmor_restrict_unprivileged_userns = 1), ce qui ferme une source fréquente d'élévations de privilèges.

Par où commencer

La leçon Durcir un serveur du cours Linux : administration système, qui lit l'état d'AppArmor sur sig-app-1 et compare profil et confinement systemd. La leçon Les journaux d'un parc de serveurs montre un refus réel, celui du profil de rsyslog. Puis la documentation du projet et la page AppArmor/HowToUse du wiki Debian.