La sécurité est un enjeu majeur pour tout système Linux, qu’il s’agisse d’un serveur exposé sur Internet ou d’une machine de développement. Or, renforcer la sécurité ne devrait pas rimer avec complexité excessive. C’est précisément là qu’intervient AppArmor, une solution de contrôle d’accès qui permet de confiner vos applications dans des profils de permissions clairement définis.
Contrairement à d’autres systèmes plus stricts et parfois difficiles à maîtriser, Apparmor mise sur la simplicité. Grâce à ses profils personnalisables, vous pouvez aisément restreindre les ressources accessibles à chaque logiciel, qu’il s’agisse de fichiers, de répertoires, de sockets réseau ou de bibliothèques système. Le résultat ? Une couche de protection supplémentaire, sans devoir passer des heures à peaufiner des politiques de sécurité incompréhensibles.
Bref rappel historique
Section intitulée « Bref rappel historique »AppArmor est né au début des années 2000 au sein de l’entreprise Immunix, avec l’idée de créer une alternative plus simple que SELinux, trop complexe pour de nombreux utilisateurs. Racheté en 2005 par Novell, il a été intégré à SUSE Linux Enterprise avant de rejoindre d’autres distributions comme Ubuntu et Debian.
Pourquoi utiliser AppArmor ?
Section intitulée « Pourquoi utiliser AppArmor ? »AppArmor est bien plus qu’un simple outil de configuration. Il joue un rôle essentiel dans la protection de vos systèmes Linux en mettant en place un contrôle d’accès obligatoire (MAC) qui limite les actions des applications, même si elles sont compromises. Voici pourquoi AppArmor est indispensable pour renforcer la sécurité de vos serveurs et applications :
AppArmor agit comme une couche de défense supplémentaire en limitant les permissions des applications aux seules ressources nécessaires. En cas de faille de sécurité ou d’exploit dans une application (comme un serveur web), AppArmor empêche l’attaquant d’accéder à des fichiers critiques, d’exécuter des commandes ou de compromettre l’ensemble du système. Par exemple :
- Si une vulnérabilité est exploitée dans Nginx, AppArmor peut empêcher l’accès
aux répertoires sensibles comme
/etc/passwdou/root/.
Chaque application est confinée dans un profil de permissions strict qui détermine exactement ce qu’elle peut faire :
- Lecture ou écriture dans des fichiers spécifiques.
- Accès réseau ou exécution de commandes.
En minimisant les permissions, AppArmor limite les dégâts potentiels d’une attaque, même si une application est compromise.
Contrairement aux outils de sécurité réactifs comme les antivirus ou les pare-feu, AppArmor agit en amont. Il prévient les actions non autorisées avant qu’elles ne se produisent, en appliquant des politiques de sécurité préventives.
AppArmor permet une isolation complète des applications, empêchant leurs interactions non souhaitées avec le reste du système ou avec d’autres applications.
AppArmor offre aussi une traçabilité complète des accès système grâce à ses journaux détaillés :
- Mode enforce : Les actions non autorisées sont bloquées et consignées.
- Mode complain : Les violations sont enregistrées pour ajuster les profils sans perturber l’application.
Ces journaux permettent d’auditer les comportements des applications et d’identifier rapidement les problèmes ou tentatives d’accès suspectes.
AppArmor est donc un outil incontournable pour toute infrastructure Linux soucieuse de maintenir un haut niveau de sécurité. En limitant les permissions des applications et en renforçant leur confinement, il protège vos systèmes contre une large gamme de menaces, rendant vos serveurs plus robustes et résilients face aux attaques.
Est-compliqué à mettre en oeuvre ?
Section intitulée « Est-compliqué à mettre en oeuvre ? »Contrairement à SELinux, qui s’appuie sur une politique de sécurité globale et souvent ardue à configurer, AppArmor mise sur la simplicité et la modularité. Plutôt que d’examiner le système dans son ensemble, il concentre sa protection sur chaque application grâce à des profils individuels, décrivant précisément les ressources auxquelles celle-ci a droit. Cette approche granulaire, plus intuitive, a séduit un large public, du débutant à l’administrateur confirmé, permettant de renforcer rapidement la sécurité sans se noyer dans des règles complexes.
Fonctionnalités et concepts
Section intitulée « Fonctionnalités et concepts »Avant de mettre AppArmor en pratique, il est essentiel de comprendre ses mécanismes. Grâce à une approche basée sur des profils individuels et une grande granularité dans la définition des permissions, AppArmor offre une solution de sécurité à la fois simple et efficace. Voici les principaux concepts à retenir :
- Modes de fonctionnement :
- Enforce : Toutes les actions non autorisées par le profil sont bloquées.
- Complain : Les actions non autorisées ne sont pas bloquées, mais enregistrées, ce qui permet de comprendre et d’ajuster progressivement le profil sans interrompre le fonctionnement de l’application.
- Profils AppArmor : Chaque application est régie par un profil spécifiant les fichiers, répertoires, bibliothèques et ressources réseau auxquels elle peut accéder. Cela permet d’isoler chaque programme dans son propre périmètre de sécurité.
- Granularité des permissions : Les règles sont définies jusqu’au niveau du chemin des fichiers, permettant un contrôle très fin sur ce que l’application est autorisée à lire, écrire ou exécuter.
- Audit et reporting : Lorsqu’une application tente d’accéder à une ressource non prévue, AppArmor génère des journaux détaillés. Ceux-ci aident à comprendre les besoins réels de l’application, à peaufiner les profils et à suivre l’évolution de la politique de sécurité au fil du temps.
- Simplicité et flexibilité : Les outils en ligne de commande tels que aa-genprof, aa-complain, aa-enforce, ou apparmor_parser facilitent la création, la modification et le déploiement des profils, sans exiger une expertise profonde en sécurité. Cette flexibilité permet d’adapter facilement Apparmor aux évolutions du système et aux nouveaux services déployés.
Installation et configuration
Section intitulée « Installation et configuration »Avant de commencer à créer ou à modifier des profils, il est important de s’assurer qu’Apparmor est correctement installé et opérationnel sur votre système. Sur la plupart des distributions Linux populaires, comme Ubuntu ou Debian, Apparmor est souvent déjà présent et activé par défaut. Toutefois, si ce n’est pas le cas, l’installation reste simple et rapide.
Pour vérifier l’état actuel d’Apparmor, vous pouvez utiliser la commande suivante :
sudo apparmor_statusapparmor module is loaded.134 profiles are loaded.39 profiles are in enforce mode.
4 profiles are in complain mode. transmission-cli transmission-daemon transmission-gtk transmission-qt
91 profiles are in unconfined mode. wpcom0 processes have profiles defined.0 processes are in enforce mode.0 processes are in complain mode.0 processes are in prompt mode.0 processes are in kill mode.0 processes are unconfined but have a profile defined.0 processes are in mixed mode.Ce rapport vous indiquera si le démon Apparmor est actif, dans quel mode fonctionnent vos profils actuels et s’il existe des profils chargés sur votre système.
Si vous constatez qu’Apparmor n’est pas installé, vous pouvez le faire via votre gestionnaire de paquets. Par exemple, sur Ubuntu ou Debian, entrez :
sudo apt updatesudo apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extraCes outils, incluant apparmor-utils, vous apporteront les fonctionnalités
nécessaires pour gérer vos profils, les passer en mode complain ou enforce, et
en créer de nouveaux.
Une fois l’installation terminée, assurez-vous qu’Apparmor est activé au démarrage. Sur les distributions modernes, utilisant systemd, vous pouvez vérifier le service avec :
sudo systemctl status apparmor○ apparmor.service - Load AppArmor profiles Loaded: loaded (/usr/lib/systemd/system/apparmor.service; enabled; preset: enabled) Drop-In: /run/systemd/system/service.d └─zzz-lxc-service.conf Active: inactive (dead) Docs: man:apparmor(7) https://gitlab.com/apparmor/apparmor/wikis/home/Si le service n’est pas activé, vous pouvez le démarrer et l’activer pour les prochains redémarrages :
sudo systemctl start apparmorsudo systemctl enable apparmorSur certaines distributions ou configurations spécifiques, il peut être
nécessaire de s’assurer que le noyau est lancé avec l’option
security=apparmor. Pour cela, éditez la configuration de votre chargeur
d’amorçage (par exemple, GRUB) et ajoutez cette option à la ligne de commande du
noyau, puis régénérez la configuration de GRUB et redémarrez. Une fois le
système relancé, AppArmor devrait être opérationnel.
Création et gestion de profils
Section intitulée « Création et gestion de profils »L’une des principales forces d’AppArmor réside dans sa gestion par profils individuels. Chaque profil définit précisément les ressources auxquelles une application donnée est autorisée à accéder, ce qui permet de l’isoler et de limiter l’impact en cas de faille de sécurité.
Les profils AppArmor sont généralement stockés dans le répertoire
/etc/apparmor.d/, avec un fichier par application. Par exemple, un service
comme ping aura un profil nommé bin.ping. Il s’agit de fichiers texte simples,
modifiables avec votre éditeur préféré, ce qui facilite leur adaptation à vos
besoins.
Générer un profil initial
Section intitulée « Générer un profil initial »Pour créer un profil de base, utilisez l’outil aa-genprof :
sudo apt install nginx curlsudo aa-genprof /usr/sbin/nginxPar exemple en cherchant à démarrer le service Nginx :
sudo systemctl restart nginxroot@calm-tadpole:~# systemctl restart nginxJob for nginx.service failed because the control process exited with error code.See "systemctl status nginx.service" and "journalctl -xeu nginx.service" for details.Dans la fenetre de terminal, ou vous avez lancé aa-genprof, vous verrez
apparaître les tentatives d’accès bloquées par AppArmor. Vous pouvez les
autoriser ou les refuser, en fonction des besoins de votre application.
[(S)can system log for AppArmor events] / (F)inishReading log entries from /var/log/syslog.Complain-mode changes:Enforce-mode changes:
Profile: /usr/sbin/nginxPath: /var/log/nginx/error.logNew Mode: wSeverity: 8
[1 - /var/log/nginx/error.log w,](A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / Abo(r)t / (F)inish
Profile: /usr/sbin/nginxPath: /var/log/nginx/error.logNew Mode: wSeverity: 8
[1 - /var/log/nginx/error.log w,](A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / Abo(r)t / (F)inishAdding /var/log/nginx/error.log w, to profile.
= Changed Local Profiles =
The following local profiles were changed. Would you like to save them?
[1 - /usr/sbin/nginx](S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)tWriting updated profile for /usr/sbin/nginx.Cet outil vous guidera en observant le comportement de l’application. En mode “complain”, AppArmor n’empêche pas les accès, mais les journalise. En testant Nginx, par exemple en redémarrant le service, vous verrez apparaître toutes les tentatives d’accès, qu’il suffit ensuite d’autoriser ou de refuser.
Le fichier constitué par aa-genprof est un bon point de départ, mais il peut
nécessiter des ajustements pour correspondre exactement à vos besoins.
# Last Modified: Fri Dec 13 06:45:45 2024abi <abi/3.0>,
include <tunables/global>
/usr/sbin/nginx { include <abstractions/base> include <abstractions/dovecot-common> include <abstractions/postfix-common> include <abstractions/totem>
capability dac_override,
/usr/sbin/nginx mr, /var/log/nginx/access.log w, /var/log/nginx/error.log w, owner /etc/group r, owner /etc/nginx/mime.types r, owner /etc/nginx/nginx.conf r, owner /etc/nginx/sites-available/default r, owner /etc/nsswitch.conf r, owner /etc/passwd r, owner /run/nginx.pid r, owner /run/nginx.pid w,
}Ce fichier contient les règles de base pour Nginx, autorisant l’accès en lecture et écriture à certains fichiers de configuration et de logs. Vous pouvez l’affiner en ajoutant ou en retirant des règles, en fonction des besoins de votre application.
Ajuster et personnaliser les profils
Section intitulée « Ajuster et personnaliser les profils »Si on teste la consultation de la page d’accueil de Nginx, on obtient :
curl http://localhost<html><head><title>403 Forbidden</title></head><body><center><h1>403 Forbidden</h1></center><hr><center>nginx/1.24.0 (Ubuntu)</center></body></html>On peut voir dans les logs que l’accès a été bloqué :
sudo journalctl | grep -i apparmor | tail -n 10
Dec 13 06:44:54 calm-tadpole kernel: audit: type=1400 audit(1734072294.310:319): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/nginx" pid=2276 comm="apparmor_parser"Dec 13 06:45:00 calm-tadpole kernel: audit: type=1400 audit(1734072300.682:320): apparmor="DENIED" operation="capable" class="cap" profile="/usr/sbin/nginx" pid=2286 comm="nginx" capability=7 capname="setuid"Dec 13 06:45:45 calm-tadpole kernel: audit: type=1400 audit(1734072345.725:321): apparmor="STATUS" operation="profile_replace" profile="unconfined" name="/usr/sbin/nginx" pid=2444 comm="apparmor_parser"Dec 13 06:54:22 calm-tadpole kernel: audit: type=1400 audit(1734072862.240:322): apparmor="DENIED" operation="open" class="file" profile="/usr/sbin/nginx" name="/var/www/html/index.nginx-debian.html" pid=2534 comm="nginx" requested_mask="r" denied_mask="r" fsuid=33 ouid=0Une fois le profil initial créé, vous pouvez l’affiner en éditant directement le
fichier dans /etc/apparmor.d/. Les règles précisent les actions autorisées
(lecture, écriture, exécution) pour chaque fichier ou répertoire. Par exemple,
on pourrait ajouter les droits de lecture du répertoire /var/www/html/ :
abi <abi/3.0>,
include <tunables/global>
/usr/sbin/nginx { include <abstractions/base> include <abstractions/dovecot-common> include <abstractions/postfix-common> include <abstractions/totem>
capability dac_override,
/usr/sbin/nginx mr, /var/log/nginx/access.log w, /var/log/nginx/error.log w, /var/www/html/ rw, owner /etc/group r, owner /etc/nginx/mime.types r, owner /etc/nginx/nginx.conf r, owner /etc/nginx/sites-available/default r, owner /etc/nsswitch.conf r, owner /etc/passwd r, owner /run/nginx.pid r, owner /run/nginx.pid w,}Mais nous allons voir qu’il existe une méthode plus simple pour ajouter des règles à un profil existant, en utilisant les include.
Inclure des profils existants
Section intitulée « Inclure des profils existants »Pour éviter de répéter des règles communes à plusieurs profils, AppArmor propose
la directive include. Celle-ci permet d’ajouter des règles d’un profil à un
autre, simplifiant la gestion des permissions partagées.
Dans notre exemple, Nginx partage des règles communes avec d’autres services, comme lighttpd ou Apache. Pour éviter de les répéter, nous pouvons les inclure directement dans le profil Nginx :
abi <abi/3.0>,include <abstractions/base>include <abstractions/dovecot-common>include <abstractions/postfix-common>include <abstractions/totem>Ces directives incluent les règles communes à tous les profils, simplifiant la gestion des permissions partagées. Vous pouvez également créer vos propres fichiers d’inclusion, pour regrouper des règles spécifiques à votre environnement.
Les fichiers d’inclusion sont stockés dans le répertoire
/etc/apparmor.d/abstractions/.
apache2-commonapparmor_apiaspellaudio
...
waylandweb-datawinbindwutmpXxadxdg-desktopxdg-openDans les derniers fichiers de configuration, on peut voir que les règles
web-data existent. Vérifions ce qu’elles contiennent :
cat /etc/apparmor.d/abstractions/web-data# ------------------------------------------------------------------## Copyright (C) 2002-2006 Novell/SUSE# Copyright (C) 2014 Canonical Ltd## This program is free software; you can redistribute it and/or# modify it under the terms of version 2 of the GNU General Public# License published by the Free Software Foundation.## ------------------------------------------------------------------
abi <abi/4.0>,
/srv/www/htdocs/ r, /srv/www/htdocs/** r, # virtual hosting /srv/www/vhosts/ r, /srv/www/vhosts/** r, # mod_userdir @{HOME}/public_html/ r, @{HOME}/public_html/** r,
/srv/www/rails/*/public/ r, /srv/www/rails/*/public/** r,
/var/www/html/ r, /var/www/html/** r,
# Include additions to the abstraction include if exists <abstractions/web-data.d>On peut donc les inclure dans notre profil Nginx :
abi <abi/3.0>,include <abstractions/base>include <abstractions/dovecot-common>include <abstractions/postfix-common>include <abstractions/totem>include <abstractions/web-data>Après chaque modification, rechargez le profil :
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.nginxEt refaîtes vos tests. Ca fonctionne. Nous avons créé notre profil Nginx, en quelques minutes.
Changer le mode d’un profil
Section intitulée « Changer le mode d’un profil »Après avoir ajusté notre profil, nous pouvons le passer en mode “enforce” pour bloquer réellement les accès non autorisés :
sudo aa-enforce /usr/sbin/nginxUn nouveau test. Tout fonctionne !
À l’inverse, si vous souhaitez repasser un profil en mode “complain” pour observer de nouvelles actions, utilisez :
sudo aa-complain /usr/sbin/nginxMaintenir les profils sur le long terme
Section intitulée « Maintenir les profils sur le long terme »Les applications évoluent. De nouvelles fonctionnalités, mises à jour ou modules peuvent nécessiter des ajustements de profil. Remettez temporairement le profil en mode “complain” pour observer les nouveaux besoins, puis modifiez et appliquez à nouveau le mode “enforce”.
Cette approche itérative vous permet de conserver des profils précis et adaptés, renforçant la sécurité de vos services sans en perturber le fonctionnement.
Pour aller plus loin
Section intitulée « Pour aller plus loin »Après avoir maîtrisé AppArmor, complétez votre expertise avec ces guides :
- Audit de sécurité : Vérifiez vos configurations avec Lynis ou OpenSCAP.
- Référentiels : Appliquez les recommandations ANSSI-BP-028 ou les CIS Benchmarks.
- Services critiques : Consultez mes guides sur le durcissement SSH et la configuration PAM.
- Alternative MAC : Découvrez SELinux pour une approche plus granulaire du contrôle d’accès.
- Automatisation : Déployez vos configurations avec Ansible ou gérez-les avec Rudder.
Lancez l’examen interactif
Section intitulée « Lancez l’examen interactif »Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Contrôle de connaissances
📋 Récapitulatif de vos réponses
Vérifiez vos réponses avant de soumettre. Cliquez sur une question pour la modifier.
Détail des réponses
Conclusion
Section intitulée « Conclusion »AppArmor est un outil puissant et flexible pour renforcer la sécurité de vos
systèmes Linux, tout en restant simple à configurer grâce à son approche basée
sur des profils. À travers ce guide, nous avons exploré ses fonctionnalités
clés, de l’installation à la création et la gestion de profils, ainsi que des
cas pratiques concrets. Grâce à des abstractions comme web-data, AppArmor
permet de centraliser les permissions et de simplifier la configuration des
applications courantes.
Que vous soyez administrateur système ou utilisateur avancé, AppArmor vous
offre un moyen efficace de limiter les accès des applications aux seules
ressources nécessaires, réduisant ainsi la surface d’attaque de votre système.
Avec des outils interactifs comme aa-genprof et aa-logprof, il devient
facile d’adapter vos profils aux besoins spécifiques de vos applications tout en
maintenant un haut niveau de sécurité.
Pour aller plus loin, n’hésitez pas à :
- Tester AppArmor sur d’autres services et applications de votre infrastructure.
- Exploiter les abstractions existantes pour simplifier vos profils.
- Créer des règles personnalisées adaptées à vos environnements spécifiques.
En intégrant AppArmor dans votre stratégie de sécurité, vous faites un pas de plus vers un système Linux robuste, protégé et mieux maîtrisé. Sécurisez vos applications dès maintenant et prenez le contrôle de vos ressources système grâce à AppArmor.
FAQ - Questions Fréquemment Posées
Section intitulée « FAQ - Questions Fréquemment Posées »AppArmor (Application Armor) est un module de sécurité Linux (LSM) intégré au noyau qui implémente le contrôle d'accès obligatoire (MAC - Mandatory Access Control).
Fonctionnement
- Confine les programmes via des profils de sécurité
- Définit précisément les fichiers, capacités réseau et ressources accessibles
- Limite les dégâts même si un attaquant compromet un processus privilégié
Contrairement aux permissions Unix traditionnelles (DAC), AppArmor agit comme une couche de défense supplémentaire.
AppArmor intercepte les appels système au niveau du noyau via les hooks LSM.
Mécanisme
- Chaque programme confiné est associé à un profil textuel
- Le profil définit les permissions :
- Accès fichiers (lecture/écriture/exécution)
- Capabilities POSIX (
CAP_NET_BIND_SERVICE,CAP_SYS_ADMIN...) - Règles réseau et IPC
- À chaque syscall, AppArmor vérifie l'autorisation
Syntaxe des profils
profile nginx {
#include <abstractions/base>
/var/www/** r,
/var/log/nginx/* w,
}
Comparaison
| Critère | AppArmor | SELinux |
|---|---|---|
| Modèle | Path-based (chemins) | Label-based (étiquettes) |
| Complexité | Plus simple | Plus complexe |
| Granularité | Bonne | Très fine |
| Courbe d'apprentissage | Douce | Raide |
Avantages AppArmor
- Syntaxe lisible
- Déploiement progressif profil par profil
- Idéal pour débuter
Avantages SELinux
- Meilleure protection contre liens symboliques
- Isolation robuste pour conteneurs
- Certifications (PCI-DSS)
Méthodes de vérification
1. État complet :
sudo aa-status
2. Vérification rapide :
cat /sys/module/apparmor/parameters/enabled
# Retourne 'Y' si actif
3. Service systemd :
systemctl status apparmor
4. Messages de démarrage :
dmesg | grep -i apparmor
5. LSM actifs :
cat /sys/kernel/security/lsm
3 approches
1. Génération automatique (recommandé)
sudo aa-genprof /usr/bin/mon-programme
Lance le programme, observe ses accès et propose un profil interactif.
2. Mode apprentissage
sudo aa-complain /etc/apparmor.d/mon-profil
# Utiliser l'application normalement
sudo aa-logprof # Analyser et ajuster
3. Écriture manuelle
profile mon-app {
#include <abstractions/base>
/etc/mon-app/** r,
/var/log/mon-app/* w,
}
Bonnes pratiques
- Commencer restrictif
- Tester en complain avant enforce
Désactiver temporairement
sudo systemctl stop apparmor
# ou
sudo aa-teardown
Désactiver au boot
- Éditer GRUB :
sudo nano /etc/default/grub
# Ajouter apparmor=0 à GRUB_CMDLINE_LINUX_DEFAULT
- Appliquer :
sudo update-grub
Réactiver
# Retirer apparmor=0 ou utiliser :
apparmor=1 security=apparmor
⚠️ Attention : Préférer mettre les profils en mode complain plutôt que désactiver globalement.
Modes principaux
| Mode | Description | Usage |
|---|---|---|
| enforce | Bloque ET journalise | Production |
| complain | Journalise seulement | Debug/Test |
| unconfined | Aucune restriction | Désactivé |
| kill | Termine le processus | Haute sécurité |
Commandes
# Passer en enforce
sudo aa-enforce /etc/apparmor.d/profil
# Passer en complain
sudo aa-complain /etc/apparmor.d/profil
Types de profils
- Locaux : spécifiques à la machine
- Système : fournis par les paquets (nginx, mysql...)
Méthode interactive (recommandée)
sudo aa-logprof
Analyse les logs et propose des modifications.
Méthode manuelle
- Éditer le profil :
sudo nano /etc/apparmor.d/usr.bin.nginx
- Recharger :
sudo apparmor_parser -r /etc/apparmor.d/usr.bin.nginx
Mises à jour système
sudo apt update && sudo apt upgrade apparmor apparmor-profiles-extra
Surcharges locales
Utiliser /etc/apparmor.d/local/ pour personnaliser sans modifier les profils système.
Arborescence
/etc/apparmor.d/
├── abstractions/ # Règles réutilisables (#include)
├── tunables/ # Variables (@{HOME}, @{PROC})
├── local/ # Surcharges locales
├── disable/ # Liens pour désactiver
├── cache/ # Profils compilés
└── usr.bin.nginx # Profils actifs
Autres emplacements
- Profils extra :
/usr/share/apparmor/extra-profiles/ - Cache :
/var/cache/apparmor/
Convention de nommage
Le profil pour /usr/bin/nginx s'appelle usr.bin.nginx
Commandes essentielles
# Recharger un profil (replace)
sudo apparmor_parser -r /etc/apparmor.d/profil
# Ajouter un nouveau profil
sudo apparmor_parser -a /etc/apparmor.d/profil
# Recharger tous les profils
sudo systemctl reload apparmor
Options utiles
| Option | Description |
|---|---|
-W |
Écrire en cache |
-T |
Ignorer le cache |
-Q |
Mode silencieux |
Vérification
aa-status | grep mon-profil
Définition
Le mode enforce est le mode production où les règles sont strictement appliquées.
Comportement
- Tout accès non autorisé est bloqué
- Les violations sont journalisées avec
DENIED - Exemple : nginx accédant à
/etc/shadow→ erreurEACCES
Activation
sudo aa-enforce /etc/apparmor.d/usr.bin.nginx
Ou dans le profil :
profile nginx flags=(enforce) {
...
}
Vérification
aa-status # Liste les profils en enforce
C'est le mode par défaut pour les profils chargés.
Définition
Le mode complain (audit) est un mode permissif qui journalise sans bloquer.
Cas d'usage
- Créer de nouveaux profils
- Déboguer des problèmes d'accès
- Préparer une migration vers enforce
Activation
sudo aa-complain /etc/apparmor.d/profil
Workflow typique
complain → observer → aa-logprof → tester → enforce
Logs
Les messages ALLOWED indiquent ce qui serait bloqué en enforce.
⚠️ Attention : En complain, l'application n'est PAS protégée !
Sources de logs
1. Audit log :
sudo ausearch -m AVC -ts today
grep apparmor /var/log/audit/audit.log
2. Syslog :
grep -i apparmor /var/log/syslog
3. Journald :
sudo journalctl -k | grep apparmor
journalctl _AUDIT_TYPE_NAME=APPARMOR
Format des messages
apparmor="DENIED" operation="open"
profile="/usr/bin/app" name="/etc/secret"
Outils
aa-notify -s 1 -v # Notifications temps réel
aa-logprof # Analyse interactive
Sécurité
- Confinement des applications
- Limite l'impact des failles (même root)
- Défense en profondeur
Facilité
- Syntaxe lisible basée sur les chemins
- Déploiement progressif par application
- Outils interactifs (
aa-genprof,aa-logprof)
Performance
- Overhead minimal (< 2%)
- Profils compilés en cache
Intégration
- Profils pour services courants (Apache, MySQL, Docker)
- Support natif LXC/LXD et Kubernetes
Maintenance
- Mises à jour préservent les personnalisations
- Mode complain pour tests sans risque
Par défaut activé
- Ubuntu (depuis 7.10)
- Debian (depuis 10 Buster)
- openSUSE / SLES
- Linux Mint
- Pop!_OS
Disponible (non défaut)
- Arch Linux (
pacman -S apparmor) - Fedora (préfère SELinux)
- Gentoo
Conteneurs
- Docker : profils auto-générés
- LXC/LXD : support natif
- Kubernetes : via
securityContext
Vérification
cat /sys/kernel/security/lsm
# Doit inclure 'apparmor'
AppArmor est upstream dans le noyau Linux depuis 2.6.36.