Aide-mémoire AppArmor pour les administrateurs système Linux
Beaucoup d'entre vous ont probablement entendu parler d'AppArmor lorsqu'ils travaillent avec des systèmes basés sur Debian, plus encore avec Ubuntu. Cependant, comme il ne s'agit pas d'une application qui s'affiche dans l'interface graphique, certains utilisateurs peuvent ne pas la connaître.
Application Armor abrégé en AppArmor est un module de sécurité sur les systèmes Linux. Il s'agit d'un système de contrôle d'accès obligatoire (MAC) utilisé par le noyau Linux pour restreindre les capacités d'un programme telles que configurées sur les profils de programme. Ces profils peuvent autoriser ou refuser des fonctionnalités telles que l'accès au réseau, l'accès aux sockets bruts, les autorisations de lecture, d'écriture et d'exécution sur les fichiers, etc. Ces profils sont généralement chargés dans le noyau au démarrage du système. Les profils AppArmor existent en deux modes, à savoir application et plainte. Le mode d'application applique la stratégie définie dans le profil et signale également toute tentative de violation de la stratégie à l'aide de Syslog ou d'audits. Le mode de réclamation, en revanche, n'applique pas la politique mais signale uniquement les tentatives de violation de la politique.
La technologie AppArmor existe depuis un certain temps. Il a été vu pour la première fois dans Immunix puis intégré dans les systèmes Novell/SUSE, Mandriva et Ubuntu. AppArmor est considéré comme un remplacement de SELinux, qui est parfois considéré comme difficile à installer et à maintenir. Contrairement à SELinux, qui fonctionne en appliquant des étiquettes aux fichiers, AppArmor fonctionne avec les chemins de fichiers. Les représentants d'AppArmor affirment qu'il est moins complexe et plus facile à configurer que SELinux.
Dans l'article d'aujourd'hui, nous apprendrons l'aide-mémoire AppArmor pour les administrateurs système Linux.
1. Vérifiez l'état d'AppArmor
AppArmor est installé par défaut sur les systèmes Ubuntu et se charge automatiquement au démarrage du système. Pour vérifier l'état, exécutez la commande ci-dessous :
sudo apparmor_status
##OR
sudo aa-status
Exemple de sortie :
La sortie ci-dessus montre les profils chargés et le mode AppArmor.
2. Afficher les profils AppArmor
AppArmor dispose de plusieurs profils préchargés qui se trouvent dans le répertoire « /etc/apparmor.d/ ». Certains profils sont désactivés et d'autres sont actifs.
Pour vérifier tous les profils, vous pouvez émettre :
$ ls /etc/apparmor.d/*
/etc/apparmor.d/lsb_release
/etc/apparmor.d/nvidia_modprobe
/etc/apparmor.d/sbin.dhclient
/etc/apparmor.d/usr.bin.evince
/etc/apparmor.d/usr.bin.man
....
/etc/apparmor.d/disable:
usr.sbin.rsyslogd
/etc/apparmor.d/force-complain:
/etc/apparmor.d/local:
lsb_release usr.bin.tcpdump usr.sbin.cups-browsed
nvidia_modprobe usr.lib.libreoffice.program.oosplash usr.sbin.cupsd
README usr.lib.libreoffice.program.senddoc usr.sbin.mysqld
sbin.dhclient usr.lib.libreoffice.program.soffice.bin usr.sbin.rsyslogd
usr.bin.evince usr.lib.libreoffice.program.xpdfimport
usr.bin.man usr.lib.snapd.snap-confine.real
/etc/apparmor.d/tunables:
alias etc home.d multiarch.d securityfs xdg-user-dirs
apparmorfs global kernelvars proc share xdg-user-dirs.d
dovecot home multiarch run sys
Les profils ici ont une syntaxe de dénomination. Par exemple, un profil pour r /usr/bin/man sera situé dans /etc/apparmor.d/usr.bin.man.
Les profils désactivés se trouvent sous « /etc/apparmor.d/disable »
$ ls /etc/apparmor.d/disable/*
/etc/apparmor.d/disable/usr.sbin.rsyslogd
3. Activer/Désactiver les profils AppArmor
Bien qu'AppArmor vous permette d'avoir plusieurs profils, ils sont activés ou désactivés individuellement. Pour activer ou désactiver un profil, vous devez installer apparmor-utils
Commencez par mettre à jour et mettre à niveau votre système pour éviter les erreurs « Défaut de segmentation ».
sudo apt update && sudo apt upgrade -y
Installez maintenant l'utilitaire requis
sudo apt install apparmor-utils
- Activer les profils AppArmor
Maintenant, continuez et activez un profil désactivé à l'aide de la commande avec la syntaxe ci-dessous :
##Enable a Profile
sudo aa-enforce /path/to/profile
Par exemple, pour activer le profil Rsyslogd, nous pouvons exécuter :
$ sudo aa-enforce /etc/apparmor.d/usr.sbin.rsyslogd
Setting /etc/apparmor.d/usr.sbin.rsyslogd to enforce mode.
Un autre exemple d'activation du profil HTTPD.
sudo aa-enforce /usr/sbin/httpd
- Désactiver les profils AppArmor
Pour désactiver un profil, il vous suffit de le passer en mode réclamation en utilisant :
sudo aa-complain /path/to/profile
Par exemple:
sudo aa-complain /etc/apparmor.d/usr.sbin.rsyslogd
##OR
sudo aa-complain /usr/sbin/httpd
4. Création de profils AppArmor
AppArmor permet aux utilisateurs de créer leurs profils personnalisés pour protéger les applications. Le profil comporte généralement plusieurs configurations et variables pour votre application. AppArmor élimine les tracas en vous permettant de démarrer à partir d'un modèle ou de manière interactive.
Pour la méthode interactive, il inspecte les actions effectuées par le binaire et vous permet de décider des actions que vous souhaitez, si elles doivent être refusées ou autorisées.
Pour y parvenir, vous émettez une commande avec la syntaxe ci-dessous :
sudo aa-genprof /path/to/binary
Par exemple:
sudo aa-genprof /usr/bin/scp
Exemple de sortie :
Updating AppArmor profiles in /etc/apparmor.d.
Writing updated profile for /usr/bin/scp.
Setting /usr/bin/scp to complain mode.
Before you begin, you may wish to check if a
profile already exists for the application you
wish to confine. See the following wiki page for
more information:
https://gitlab.com/apparmor/apparmor/wikis/Profiles
Profiling: /usr/bin/scp
Please start the application to be profiled in
another window and exercise its functionality now.
Once completed, select the "Scan" option below in
order to scan the system logs for AppArmor events.
For each AppArmor event, you will be given the
opportunity to choose whether the access should be
allowed or denied.
[(S)can system log for AppArmor events] / (F)inish
Ouvrez maintenant un terminal séparé et effectuez toutes les actions que le binaire peut effectuer. Par exemple:
scp ~/test remote_user@remote_IP:~/
Après avoir effectué la tâche, appuyez sur S dans la fenêtre de profilage AppArmor. Dans les actions enregistrées, définissez s'il faut ignorer, autoriser, etc.
[(S)can system log for AppArmor events] / (F)inish
Reading log entries from /var/log/syslog.
Profile: /usr/bin/scp
Execute: /usr/bin/ssh
Severity: unknown
(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish
Une fois terminé, appuyez sur « S » pour enregistrer les modifications.
The following local profiles were changed. Would you like to save them?
[1 - /usr/bin/scp]
(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t
Maintenant, appuyez sur « f » et le profil sera enregistré sous /etc/apparmor.d/path.to.binary. (/etc/apparmor.d/usr.bin.scp pour ce cas)
$ cat /etc/apparmor.d/usr.bin.scp
# Last Modified: Fri Sep 29 14:14:11 2023
#include <tunables/global>
/usr/bin/scp flags=(complain) {
#include <abstractions/base>
deny /usr/bin/ssh x,
deny owner /home/*/mysql-community-client_8.1.0-1ubuntu22.04_amd64.deb r,
/usr/bin/scp mr,
}
Ci-dessus se trouve l'exemple de profil AppArmor que j'ai créé pour SCP.
Créer un profil à partir d'un modèle
Vous pouvez créer un squelette du profil de l'application. Commencez par installer le package requis :
sudo apt install apparmor-easyprof
Créez maintenant le modèle avec la commande :
sudo aa-easyprof /path/to/binary
Exemple de sortie :
# vim:syntax=apparmor
# AppArmor policy for binary
# ###AUTHOR###
# ###COPYRIGHT###
# ###COMMENT###
#include <tunables/global>
# No template variables specified
"/path/to/binary" {
#include <abstractions/base>
# No abstractions specified
# No policy groups specified
# No read paths specified
# No write paths specified
}
Vous pouvez ensuite continuer et modifier le profil comme vous le souhaitez.
Pour appliquer le profil, utilisez :
sudo apparmor_parser -a /etc/apparmor.d/profile.name
Il existe de nombreuses autres commandes pour gérer les profils AppArmor :
#Load a new profile in complain mode
sudo apparmor_parser -C /etc/apparmor.d/profile.name
#Replace existing profile
sudo apparmor_parser -r /etc/apparmor.d/profile.name
#Remove profile
sudo apparmor_parser -R /etc/apparmor.d/profile.name
5. Modification d'un profil à partir des journaux
Il est également possible de modifier un profil à partir des logs. L'outil lit les journaux et vous demande si vous souhaitez autoriser certaines des actions interdites. Pour y parvenir, utilisez :
sudo aa-logprof
Vous pouvez ensuite naviguer à l'aide des touches fléchées et sélectionner le profil souhaité.
6. Afficher les journaux
Vous pouvez afficher les journaux AUDIT et DENIED à partir de /var/log/audit/audit.log. Installez le package requis :
sudo apt install apparmor-notify
Continuez et affichez les journaux :
sudo aa-notify -s 1 -v
Exemple de sortie :
Il existe d'autres options que vous pouvez utiliser, vérifiez avec la commande :
$ aa-notify -h
USAGE: aa-notify [OPTIONS]
Display AppArmor notifications or messages for DENIED entries.
OPTIONS:
-p, --poll poll AppArmor logs and display notifications
--display $DISPLAY set the DISPLAY environment variable to $DISPLAY
(might be needed if sudo resets $DISPLAY)
-f FILE, --file=FILE search FILE for AppArmor messages
-l, --since-last display stats since last login
-s NUM, --since-days=NUM show stats for last NUM days (can be used alone
or with -p)
-v, --verbose show messages with stats
-h, --help display this help
-u USER, --user=USER user to drop privileges to when not using sudo
-w NUM, --wait=NUM wait NUM seconds before displaying
notifications (with -p)
7. Gérer le service AppArmor
Le service AppArmor peut être géré comme n’importe quel autre service système. Pour arrêter l'exécution du service :
sudo systemctl stop apparmor
Pour redémarrer le service :
sudo systemctl restart apparmor
Vérifiez l'état du service :
$ systemctl status apparmor
apparmor.service - Load AppArmor profiles
Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; vendor preset: enabled)
Active: active (exited) since Fri 2023-09-29 15:44:32 EAT; 3s ago
Docs: man:apparmor(7)
https://gitlab.com/apparmor/apparmor/wikis/home/
Process: 66332 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, status=0/SUC>
Main PID: 66332 (code=exited, status=0/SUCCESS)
Ful 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 systemd[1]: Starting Load AppArmor profiles>
Ful 29 15:44:32 thor-Standard-PC-i440FX-PIIX-1996 apparmor.systemd[66332]: Restarting AppArmor
.....
Dernières pensées
Cela marque la fin de ce guide sur l'aide-mémoire AppArmor pour les administrateurs système Linux. Il existe plusieurs autres commandes et aide-mémoire qui ne sont pas couvertes ici, n'hésitez pas à les partager dans les commentaires ci-dessous.
En savoir plus :
- Aide-mémoire Kubectl pour les administrateurs Kubernetes et la préparation aux examens CKA
- Aide-mémoire de stockage Stratis – guide de référence
- Aide-mémoire Ansible Vault/Guide de référence