Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
elearning:workbooks:debian:11:sec:l105 [2025/12/01 08:05] adminelearning:workbooks:debian:11:sec:l105 [2025/12/04 09:51] (Version actuelle) admin
Ligne 1: Ligne 1:
 ~~PDF:LANDSCAPE~~ ~~PDF:LANDSCAPE~~
- 
-APPARMOR 
  
 Version : **2026.01** Version : **2026.01**
Ligne 30: Ligne 28:
       * 1.2 - Installation       * 1.2 - Installation
       * 1.3 - Utilisation       * 1.3 - Utilisation
-    * LAB #2 - Mise en place de AppArmor pour sécuriser le serveur +    * LAB #2 - Mise en Place d'un Chroot pour isoler un utilisateur/une application 
-    * LAB #- Travailler avec AppArmor +    * LAB #3 - Mise en place d'AppArmor pour sécuriser le serveur 
-    * LAB #- Mise en place de SELinux pour sécuriser le serveur +      * 3.1 - Présentation 
-      * 4.1 - Introduction +      * 3.2 - Définitions 
-      * 4.2 - Définitions+        * Les Profils d'AppArmor 
 +        * Les Etats ou Modes d'AppArmor 
 +      * 3.3 - Installation 
 +        * Installation des Paquets 
 +        * Modification de GRUB 
 +        * Vérification de l'Activation d'AppArmor 
 +    * LAB #- Travailler avec AppArmor 
 +      * 4.1 - Consulter la Liste des Profils Chargés 
 +        * La Commande aa-status 
 +      * 4.2 - Passer le Mode d'un Profil de Complain à Enforce 
 +        * La Commande aa-complain 
 +      * 4.3 - Passer le Mode d'un Profil d'Enforce à Complain 
 +        * La Commande aa-enforce 
 +      * 4.4 - Désactiver et Réactiver tous les Profils 
 +      * 4.5 - Créer un Profil 
 +        * La Commande aa-genprof 
 +        * La Commande aa-logprof 
 +      * 4.6 - Supprimer un Profil 
 +        * La Commande apparmor_parser 
 +        * La Commande aa-remove-unknown 
 +    * LAB #- Mise en place de SELinux pour sécuriser le serveur 
 +      * 5.1 - Présentation 
 +      * 5.2 - Définitions
         * Security Context         * Security Context
         * Domains et Types         * Domains et Types
Ligne 46: Ligne 66:
           * Décisions d'Accès           * Décisions d'Accès
           * Décisions de Transition           * Décisions de Transition
-      * 4.3 - Commandes SELinux +      * 5.3 - Commandes SELinux 
-      * 4.4 - Les Etats de SELinux +      * 5.4 - Les Etats de SELinux 
-      * 4.5 - Booléens +      * 5.5 - Booléens 
-    * LAB #- Travailler avec SELinux +    * LAB #- Travailler avec SELinux 
-      * 5.1 - Copier et Déplacer des Fichiers +      * 6.1 - Copier et Déplacer des Fichiers 
-      * 5.2 - Vérifier les SC des Processus +      * 6.2 - Vérifier les SC des Processus 
-      * 5.3 - Visualiser la SC d'un Utilisateur +      * 6.3 - Visualiser la SC d'un Utilisateur 
-      * 5.4 - Vérifier la SC d'un fichier +      * 6.4 - Vérifier la SC d'un fichier 
-      * 5.5 - Troubleshooting SELinux+      * 6.5 - Troubleshooting SELinux
         * La commande chcon         * La commande chcon
         * La commande restorecon         * La commande restorecon
-      * 5.6 - Le fichier /.autorelabel +      * 6.6 - Le fichier /.autorelabel 
-      * 5.7 - La commande semanage +      * 6.7 - La commande semanage 
-      * 5.8 - La commande audit2allow +      * 6.8 - La commande audit2allow
  
 =====System Hardening Manuel===== =====System Hardening Manuel=====
Ligne 812: Ligne 831:
  
 A l'issue de l'implémentation des suggestions, il convient d'exécuter de nouveau la commande **lynis audit system**. A l'issue de l'implémentation des suggestions, il convient d'exécuter de nouveau la commande **lynis audit system**.
- 
  
 <WRAP center round todo 50%> <WRAP center round todo 50%>
Ligne 818: Ligne 836:
 </WRAP> </WRAP>
  
-=====LAB #- Mise en place de SELinux pour sécuriser le serveur=====+=====LAB #- Mise en Place d'un Chroot pour isoler un utilisateur/une application=====
  
-====4.1 - Installation====+Le chrootage permet de séparer un utilisateur ou un utilisateur système ( et donc un serveur ) du système.  
 + 
 +Sous Debian 12 le binaire chroot est installé par défaut : 
 + 
 +<code> 
 +root@debian12:~# which chroot 
 +/usr/sbin/chroot 
 +</code> 
 + 
 +Commencez par créer un répertoire pour l'utilisateur qui sera emprisonné : 
 + 
 +<code> 
 +root@debian12:~# mkdir /home/prison 
 +</code> 
 + 
 +Le binaire **/usr/sbin/chroot** doit prendre le SUID bit : 
 + 
 +<code> 
 +root@debian12:~# mkdir /home/prison 
 + 
 +root@debian12:~# ls -l /usr/sbin/chroot 
 +-rwxr-xr-x. 1 root root 48112 Sep 20  2022 /usr/sbin/chroot 
 + 
 +root@debian12:~# chmod +s /usr/sbin/chroot 
 + 
 +root@debian12:~# ls -l /usr/sbin/chroot 
 +-rwsr-sr-x. 1 root root 48112 Sep 20  2022 /usr/sbin/chroot 
 +</code> 
 + 
 +Créez maintenant un script de connexion générique pour que l'utilisateur **prison** puisse se connecter : 
 + 
 +<code> 
 +root@debian12:~# vi /bin/chroot 
 + 
 +root@debian12:~# cat /bin/chroot 
 +#!/bin/bash 
 +exec -c /usr/sbin/chroot /home/$USER /bin/bash 
 +</code> 
 + 
 +Rendez ce script exécutable : 
 + 
 +<code> 
 +root@debian12:~# chmod +x /bin/chroot  
 +</code> 
 + 
 +Il est maintenant nécessaire de copier toutes les commandes dont l'utilisateur **prison** aura besoin. Dans cet exemple, nous allons nous contenter de copier **/bin/bash** et **/bin/ls** ainsi que les bibliothèques associées : 
 + 
 +<code> 
 +root@debian12:~# mkdir /home/prison/bin 
 + 
 +root@debian12:~# cp /bin/bash /home/prison/bin/ 
 + 
 +root@debian12:~# ldd /bin/bash 
 +        linux-vdso.so.1 (0x00007ffd39fcf000) 
 +        libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007fef082e8000) 
 +        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fef08106000) 
 +        /lib64/ld-linux-x86-64.so.2 (0x00007fef08471000) 
 +    
 +root@debian12:~# mkdir /home/prison/lib64 
 + 
 +root@debian12:~# mkdir -p /home/prison/lib/x86_64-linux-gnu/ 
 + 
 +root@debian12:~# cp /lib/x86_64-linux-gnu/libtinfo.so.6 /home/prison/lib/x86_64-linux-gnu/ 
 + 
 +root@debian12:~# cp /lib/x86_64-linux-gnu/libc.so.6 /home/prison/lib/x86_64-linux-gnu/ 
 + 
 +root@debian12:~# cp /lib64/ld-linux-x86-64.so.2 /home/prison/lib64 
 + 
 +root@debian12:~# cp /bin/ls /home/prison/bin/ 
 + 
 +root@debian12:~# ldd /bin/ls 
 +        linux-vdso.so.1 (0x00007fff3db26000) 
 +        libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f8afb9a0000) 
 +        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f8afb7be000) 
 +        libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f8afb724000) 
 +        /lib64/ld-linux-x86-64.so.2 (0x00007f8afba0a000) 
 + 
 +root@debian12:~# cp /lib/x86_64-linux-gnu/libselinux.so.1 /home/prison/lib/x86_64-linux-gnu/ 
 + 
 +root@debian12:~# cp /lib/x86_64-linux-gnu/libpcre2-8.so.0 /home/prison/lib/x86_64-linux-gnu/ 
 +</code> 
 + 
 +Créez maintenant le groupe chroot : 
 + 
 +<code> 
 +root@debian12:~# groupadd chroot 
 + 
 +root@debian12:~# cat /etc/group | grep chroot 
 +chroot:x:1001: 
 +</code> 
 + 
 +Créez maintenant l'utilisateur **prison** : 
 + 
 +<code> 
 +root@debian12:~# useradd prison -c chroot_user -d /home/prison -g chroot -s /bin/chroot 
 +</code> 
 + 
 +Dernièrement, modifiez le propriétaire et le groupe du répertoire **/home/prison** : 
 + 
 +<code> 
 +root@debian12:~# chown -R prison:chroot /home/prison 
 +</code> 
 + 
 +Essayez maintenant de vous connecter en tant que l'utilisateur prison : 
 + 
 +<code> 
 +root@debian12:~# su - prison 
 + 
 +bash-5.2$ pwd 
 +
 + 
 +bash-5.2$ ls 
 +bin  lib  lib64 
 + 
 +bash-5.2$ ls -la 
 +total 20 
 +drwxr-xr-x. 5 1001 1001 4096 Dec  1 13:59 . 
 +drwxr-xr-x. 5 1001 1001 4096 Dec  1 13:59 .. 
 +drwxr-xr-x. 2 1001 1001 4096 Dec  1 13:56 bin 
 +drwxr-xr-x. 3 1001 1001 4096 Dec  1 13:59 lib 
 +drwxr-xr-x. 2 1001 1001 4096 Dec  1 13:56 lib64 
 + 
 +bash-5.2$ exit 
 +exit 
 + 
 +root@debian12:~#  
 +</code> 
 + 
 +Notez que l'utilisateur **prison** est //chrooté//
 + 
 +=====LAB #3 - Mise en place d'AppArmor pour sécuriser le serveur===== 
 + 
 +====3.1 - Présentation==== 
 + 
 +**AppArmor**, abréviation d'Application Armor (Armure d'Application), est un module de sécurité du noyau pour les distributions Linux basées sur Debian qui vous permet de définir des profils de sécurité par application. Ces profils restreignent les ressources système auxquelles une application peut accéder, créant ainsi efficacement un bac à sable (sandbox) autour de chaque application. Ce mécanisme de sécurité permet de prévenir l'accès non autorisé aux données sensibles et réduit le risque de failles de sécurité. AppArmor s’appuie sur l’interface **LSM** (Linux Security Modules) fournie par le noyau Linux. 
 + 
 +L'approche AppArmor à la sécurité est une approche de type **MAC** : 
 + 
 +^ Type de Sécurité ^ Nom ^ Description ^ 
 +| DAC |  //Discretional Access Control//  | L'accès aux objets est en fonction de l'identité (utilisateur,groupe). Un utilisateur peut rendre accessibles aux autres ses propres objets. | 
 +| TE |  //Type enforcement//  | Chaque objet a une étiquette appelé //type// pour un fichier et //domaine// pour un processus. La politique de sécurité définit l'interaction entre les types et les domaines. | 
 +| RBAC |  //Role Based Access Control//  | Un utilisateur a un ou plusieurs rôles. Les droits sont attribués aux rôles. | 
 +| MAC |  //Mandatory Access Control//  | L'accès aux objets est en fonction de la classification de l'objet (Très secret, Secret, Confidentiel, Public). L'administrateur définit la politique de sécurité et les utilisateurs s'y conforment. | 
 +| MLS |  //Multi-Level Security//  | Les politiques de sécurité imposent que qu'un sujet doit dominer un objet pour pouvoir le lire tandis que l'objet doit dominer le sujet pour que ce dernier puisse y écrire. | 
 + 
 +Les avantages clés de l'utilisation d'AppArmor sont : 
 + 
 +  * **Isolation** : AppArmor aide à contenir les menaces de sécurité en isolant les applications les unes des autres et du reste du système. 
 +  * **Contrôle précis** (Fine-grained control) : Vous pouvez spécifier exactement quels fichiers, répertoires et capacités une application peut accéder. 
 +  * **Conformité en matière de sécurité** : De nombreuses distributions Linux, notamment Debian et Ubuntu, utilisent AppArmor par défaut pour appliquer des politiques de sécurité. 
 + 
 +====3.2 - Définitions==== 
 + 
 +===Les Profils d'AppArmor=== 
 + 
 +AppArmor utilise des **profils** pour définir les règles de sécurité pour les applications. Ces profils sont stockés dans le répertoire **/etc/apparmor.d/** : 
 + 
 +<code> 
 +root@debian12:~# ls -l /etc/apparmor.d/ 
 +total 220 
 +drwxr-xr-x 2 root root  4096 Nov 24 17:22 abi 
 +drwxr-xr-x root root 12288 Dec  3 12:40 abstractions 
 +drwxr-xr-x 2 root root  4096 Dec  3 12:40 apache2.
 +-rw-r--r-- root root   879 Feb 14  2023 bin.ping 
 +drwxr-xr-x 2 root root  4096 Apr  3  2021 disable 
 +drwxr-xr-x 2 root root  4096 Apr  3  2021 force-complain 
 +-rw-r--r-- 1 root root   819 Feb  3  2020 lightdm-guest-session 
 +drwxr-xr-x 2 root root  4096 Dec  3 12:40 local 
 +-rw-r--r-- 1 root root  1379 Feb 14  2023 lsb_release 
 +-rw-r--r-- 1 root root  1189 Feb 14  2023 nvidia_modprobe 
 +-rw-r--r-- 1 root root  1713 Feb 14  2023 php-fpm 
 +-rw-r--r-- 1 root root   623 Feb 14  2023 samba-bgqd 
 +-rw-r--r-- 1 root root  1061 Feb 14  2023 samba-dcerpcd 
 +-rw-r--r-- 1 root root   817 Feb 14  2023 samba-rpcd 
 +-rw-r--r-- 1 root root   755 Feb 14  2023 samba-rpcd-classic 
 +-rw-r--r-- 1 root root   964 Feb 14  2023 samba-rpcd-spoolss 
 +-rw-r--r-- 1 root root  3461 Mar 30  2023 sbin.dhclient 
 +-rw-r--r-- 1 root root  1017 Feb 14  2023 sbin.klogd 
 +-rw-r--r-- 1 root root  1458 Feb 14  2023 sbin.syslogd 
 +-rw-r--r-- 1 root root  2076 Feb 14  2023 sbin.syslog-ng 
 +drwxr-xr-x 5 root root  4096 Nov 24 17:22 tunables 
 +-rw-r--r-- 1 root root  1446 Dec 10  2022 usr.bin.irssi 
 +-rw-r--r-- 1 root root  3448 Feb 19  2021 usr.bin.man 
 +-rw-r--r-- 1 root root  2561 Dec 10  2022 usr.bin.pidgin 
 +-rw-r--r-- 1 root root  2038 Dec 10  2022 usr.bin.totem 
 +-rw-r--r-- 1 root root  1400 Dec 10  2022 usr.bin.totem-previewers 
 +-rw-r--r-- 1 root root  1519 Aug 13 17:35 usr.lib.libreoffice.program.oosplash 
 +-rw-r--r-- 1 root root  1227 Oct 10  2021 usr.lib.libreoffice.program.senddoc 
 +-rw-r--r-- 1 root root 10694 Aug 13 17:35 usr.lib.libreoffice.program.soffice.bin 
 +-rw-r--r-- 1 root root  1046 Oct 10  2021 usr.lib.libreoffice.program.xpdfimport 
 +-rw-r--r-- 1 root root 28486 Jun  6 16:53 usr.lib.snapd.snap-confine.real 
 +-rw-r--r-- 1 root root  1060 Dec 10  2022 usr.sbin.apt-cacher-ng 
 +-rw-r--r-- 1 root root  1027 Feb 14  2023 usr.sbin.avahi-daemon 
 +-rw-r--r-- 1 root root   761 May 19  2023 usr.sbin.cups-browsed 
 +-rw-r--r-- 1 root root  6027 Sep  7 19:45 usr.sbin.cupsd 
 +-rw-r--r-- 1 root root  4291 Feb 14  2023 usr.sbin.dnsmasq 
 +-rw-r--r-- 1 root root  1071 Feb 14  2023 usr.sbin.identd 
 +-rw-r--r-- 1 root root  1001 Feb 14  2023 usr.sbin.mdnsd 
 +-rw-r--r-- 1 root root   987 Feb 14  2023 usr.sbin.nmbd 
 +-rw-r--r-- 1 root root  1381 Feb 14  2023 usr.sbin.nscd 
 +-rw-r--r-- 1 root root  2164 Feb 14  2023 usr.sbin.smbd 
 +-rw-r--r-- 1 root root   981 Feb 14  2023 usr.sbin.smbldap-useradd 
 +-rw-r--r-- 1 root root  1091 Feb 14  2023 usr.sbin.traceroute 
 +</code> 
 + 
 +Le profil est un fichier texte qui fournit la liste complète des autorisations (et des interdictions) pour un programme particulier : 
 + 
 +<code> 
 +root@debian12:~# cat /etc/apparmor.d/usr.sbin.smbd 
 +abi <abi/3.0>, 
 + 
 +include <tunables/global> 
 + 
 +profile smbd /usr/{bin,sbin}/smbd flags=(complain) { 
 +  include <abstractions/authentication> 
 +  include <abstractions/base> 
 +  include <abstractions/consoles> 
 +  include <abstractions/cups-client> 
 +  include <abstractions/nameservice> 
 +  include <abstractions/openssl> 
 +  include <abstractions/samba> 
 +  include <abstractions/user-tmp> 
 +  include <abstractions/wutmp> 
 + 
 +  capability audit_write, 
 +  capability dac_override, 
 +  capability dac_read_search, 
 +  capability fowner, 
 +  capability lease, 
 +  capability net_bind_service, 
 +  capability setgid, 
 +  capability setuid, 
 +  capability sys_admin, 
 +  capability sys_resource, 
 +  capability sys_tty_config, 
 + 
 +  signal send set=term peer=samba-bgqd, 
 + 
 +  /etc/mtab r, 
 +  /etc/netgroup r, 
 +  /etc/printcap r, 
 +  /etc/samba/* rwk, 
 +  @{PROC}/@{pid}/mounts r, 
 +  @{PROC}/sys/kernel/core_pattern r, 
 +  /usr/lib*/samba/vfs/*.so mr, 
 +  /usr/lib*/samba/auth/*.so mr, 
 +  /usr/lib*/samba/charset/*.so mr, 
 +  /usr/lib*/samba/gensec/*.so mr, 
 +  /usr/lib*/samba/pdb/*.so mr, 
 +  /usr/lib*/samba/{,samba/}samba-bgqd Px -> samba-bgqd, 
 +  /usr/lib*/samba/{,samba/}samba-dcerpcd Px -> samba-dcerpcd, 
 +  /usr/lib*/samba/{lowcase,upcase,valid}.dat r, 
 +  /usr/lib/@{multiarch}/samba/*.so{,.[0-9]*} mr, 
 +  /usr/lib/@{multiarch}/samba/**/ r, 
 +  /usr/lib/@{multiarch}/samba/**/*.so{,.[0-9]*} mr, 
 +  /usr/share/samba/** r, 
 +  /usr/{bin,sbin}/smbd mr, 
 +  /usr/{bin,sbin}/smbldap-useradd Px, 
 +  /var/cache/samba/** rwk, 
 +  /var/{cache,lib}/samba/printing/printers.tdb mrw, 
 +  /var/lib/samba/** rwk, 
 +  /var/lib/sss/pubconf/kdcinfo.* r, 
 +  @{run}/dbus/system_bus_socket rw, 
 +  @{run}/smbd.pid rwk, 
 +  @{run}/samba/** rk, 
 +  @{run}/samba/ncalrpc/ rw, 
 +  @{run}/samba/ncalrpc/** rw, 
 +  @{run}/samba/smbd.pid rw, 
 +  /var/spool/samba/** rw, 
 + 
 +  @{HOMEDIRS}/** lrwk, 
 +  /var/lib/samba/usershares/{,**} lrwk, 
 + 
 +  # Permissions for all configured shares (file autogenerated by 
 +  # update-apparmor-samba-profile on service startup on Debian and openSUSE) 
 +  include if exists <samba/smbd-shares> 
 +  include if exists <local/usr.sbin.smbd-shares> 
 + 
 +  # Site-specific additions and overrides. See local/README for details. 
 +  include if exists <local/usr.sbin.smbd> 
 +
 +</code> 
 + 
 +Ce que le profil définit : 
 + 
 +  * **Accès aux fichiers** : Le profil spécifie quels fichiers et répertoires l'application peut lire, écrire, modifier ou exécuter. 
 +  * **Accès au réseau** : Il détermine si l'application peut établir des connexions réseau (sortantes ou entrantes). 
 +  * **Capacités du noyau** : Il restreint certaines fonctions puissantes du noyau Linux que l'application pourrait essayer d'utiliser. 
 + 
 +Le rôle principal du profil est de créer un bac à sable (sandbox) autour de l'application. Si l'application est compromise (par exemple, par un virus ou une faille de sécurité), elle ne peut pas sortir de son bac à sable pour nuire au reste du système, car AppArmor l'empêche d'accéder aux ressources non autorisées par son profil. 
 + 
 +===Les Modes d'AppArmor=== 
 + 
 +AppArmor connait trois états ou modes pour chaque profil : 
 + 
 +^ Mode ^ Description ^ 
 +| **unconfined** | AppArmor est inactif. | 
 +| **complain** | AppArmor autorise l'action, mais enregistre un message d'avertissement (log) indiquant que l'application a essayé de faire quelque chose d'interdit. Ce mode est utile pour créer ou affiner un nouveau profil, car il montre toutes les actions réelles que l'application tente d'effectuer.. C’est un mode d’apprentissage pour régler le profile. Ceci est l'état par défaut lors qu'un paquet installe un profile AppArmor.| 
 +| **enforce** | C'est le mode par défaut. AppArmor bloque toute tentative de l'application de faire quelque chose qui n'est pas explicitement autorisé par son profil. | 
 + 
 +====3.3 - Installation==== 
 + 
 +===Installation des Paquets=== 
 + 
 +**AppArmor** peut être installé en utilisant **APT** : 
 + 
 +<code> 
 +root@debian12:~# apt install apparmor apparmor-utils apparmor-profiles apparmor-profiles-extra apparmor-notify apparmor-easyprof auditd -y 
 +</code>
 + 
 +===Modification de GRUB=== 
 + 
 +Editez la ligne **GRUB_CMDLINE_LINUX_DEFAULT** dans le fichier **/etc/default/grub** : 
 + 
 +<code> 
 +root@debian12:~# vi /etc/default/grub 
 + 
 +root@debian12:~# cat /etc/default/grub 
 +# If you change this file, run 'update-grub' afterwards to update 
 +# /boot/grub/grub.cfg. 
 +# For full documentation of the options in this file, see: 
 +#   info -f grub -n 'Simple configuration' 
 + 
 +GRUB_DEFAULT=0 
 +GRUB_TIMEOUT=5 
 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` 
 +GRUB_CMDLINE_LINUX_DEFAULT="quiet splash apparmor=1 security=apparmor" 
 +GRUB_CMDLINE_LINUX="" 
 + 
 +# If your computer has multiple operating systems installed, then you 
 +# probably want to run os-prober. However, if your computer is a host 
 +# for guest OSes installed via LVM or raw disk devices, running 
 +# os-prober can cause damage to those guest OSes as it mounts 
 +# filesystems to look for things. 
 +#GRUB_DISABLE_OS_PROBER=false 
 + 
 +# Uncomment to enable BadRAM filtering, modify to suit your needs 
 +# This works with Linux (no patch required) and with any kernel that obtains 
 +# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...) 
 +#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" 
 + 
 +# Uncomment to disable graphical terminal 
 +#GRUB_TERMINAL=console 
 + 
 +# The resolution used on graphical terminal 
 +# note that you can use only modes which your graphic card supports via VBE 
 +# you can see them in real GRUB with the command `vbeinfo' 
 +#GRUB_GFXMODE=640x480 
 + 
 +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux 
 +#GRUB_DISABLE_LINUX_UUID=true 
 + 
 +# Uncomment to disable generation of recovery mode menu entries 
 +#GRUB_DISABLE_RECOVERY="true" 
 + 
 +# Uncomment to get a beep at grub start 
 +#GRUB_INIT_TUNE="480 440 1" 
 +</code> 
 + 
 +Mettez à jour GRUB : 
 + 
 +<code> 
 +root@debian12:~# update-grub 
 +Generating grub configuration file ... 
 +Found background image: /usr/share/images/desktop-base/desktop-grub.png 
 +Found linux image: /boot/vmlinuz-6.1.0-41-amd64 
 +Found initrd image: /boot/initrd.img-6.1.0-41-amd64 
 +Found linux image: /boot/vmlinuz-5.10.0-36-amd64 
 +Found initrd image: /boot/initrd.img-5.10.0-36-amd64 
 +Warning: os-prober will not be executed to detect other bootable partitions. 
 +Systems on them will not be added to the GRUB boot configuration. 
 +Check GRUB_DISABLE_OS_PROBER documentation entry. 
 +done 
 +</code> 
 + 
 +Redémarrez la VM : 
 + 
 +<code> 
 +root@debian12:~# reboot 
 +</code> 
 + 
 +===Vérification de l'Activation d'AppArmor=== 
 + 
 +Connectez-vous à la VM et vérifiez qu'AppArmor est activé : 
 + 
 +<code> 
 +trainee@debian12:~$ su - 
 +Password: fenestros 
 + 
 +root@debian12:~# cat /sys/module/apparmor/parameters/enabled 
 +
 + 
 +root@debian12:~# aa-enabled 
 +Yes 
 + 
 +root@debian12:~# systemctl status apparmor 
 +● apparmor.service - Load AppArmor profiles 
 +     Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; preset: enabled) 
 +     Active: active (exited) since Wed 2025-12-03 12:46:51 CET; 4min 56s ago 
 +       Docs: man:apparmor(7) 
 +             https://gitlab.com/apparmor/apparmor/wikis/home/ 
 +    Process: 342 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, status> 
 +   Main PID: 342 (code=exited, status=0/SUCCESS) 
 +        CPU: 403ms 
 + 
 +Dec 03 12:46:50 debian12 apparmor.systemd[342]: Restarting AppArmor 
 +Dec 03 12:46:50 debian12 apparmor.systemd[342]: Reloading AppArmor profiles 
 +Dec 03 12:46:48 debian12 systemd[1]: Starting apparmor.service - Load AppArmor profil> 
 +Dec 03 12:46:51 debian12 systemd[1]: Finished apparmor.service - Load AppArmor profil> 
 +</code> 
 + 
 +Les paquets **apparmor-profiles** et **apparmor-profiles-extra** fournissent des profiles supplémentaires qui se trouvent dans **/usr/share/apparmor/extra-profiles/** : 
 + 
 +<code> 
 +root@debian12:~# ls /usr/share/apparmor/extra-profiles/ 
 +bin.netstat                  postfix-qmgr             usr.bin.apropos           usr.bin.svnserve                         usr.lib.dovecot.script-login                              usr.sbin.lighttpd 
 +etc.cron.daily.logrotate     postfix-qmqpd            usr.bin.dumpcap           usr.bin.wireshark                        usr.lib.dovecot.ssl-params                                usr.sbin.oidentd 
 +etc.cron.daily.slocate.cron  postfix-scache           usr.bin.evolution-2.10    usr.bin.xfs                              usr.lib.dovecot.stats                                     usr.sbin.popper 
 +etc.cron.daily.tmpwatch      postfix-showq            usr.bin.fam               usr.lib64.GConf.2.gconfd-2               usr.lib.evolution-data-server.evolution-data-server-1.10  usr.sbin.postalias 
 +postfix-anvil                postfix-smtp             usr.bin.gaim              usr.lib.bonobo.bonobo-activation-server  usr.lib.firefox.firefox                                   usr.sbin.postdrop 
 +postfix-bounce               postfix-smtpd            usr.bin.man               usr.lib.dovecot.anvil                    usr.lib.firefox.firefox.sh                                usr.sbin.postmap 
 +postfix-cleanup              postfix-spawn            usr.bin.mlmmj-bounce      usr.lib.dovecot.auth                     usr.lib.firefox.mozilla-xremote-client                    usr.sbin.postqueue 
 +postfix-discard              postfix-tlsmgr           usr.bin.mlmmj-maintd      usr.lib.dovecot.config                   usr.lib.GConf.2.gconfd-2                                  usr.sbin.sendmail 
 +postfix-dnsblog              postfix-trivial-rewrite  usr.bin.mlmmj-make-ml.sh  usr.lib.dovecot.deliver                  usr.lib.man-db.man                                        usr.sbin.sendmail.postfix 
 +postfix-error                postfix-verify           usr.bin.mlmmj-process     usr.lib.dovecot.dict                     usr.lib.RealPlayer10.realplay                             usr.sbin.sendmail.sendmail 
 +postfix-flush                postfix-virtual          usr.bin.mlmmj-receive     usr.lib.dovecot.dovecot-auth             usr.NX.bin.nxclient                                       usr.sbin.spamd 
 +postfix-lmtp                 README                   usr.bin.mlmmj-recieve     usr.lib.dovecot.dovecot-lda              usr.sbin.dhcpd                                            usr.sbin.squid 
 +postfix-local                sbin.dhclient            usr.bin.mlmmj-send        usr.lib.dovecot.imap                     usr.sbin.dovecot                                          usr.sbin.sshd 
 +postfix-master               sbin.dhclient-script     usr.bin.mlmmj-sub         usr.lib.dovecot.imap-login               usr.sbin.httpd2-prefork                                   usr.sbin.useradd 
 +postfix-nqmgr                sbin.dhcpcd              usr.bin.mlmmj-unsub       usr.lib.dovecot.lmtp                     usr.sbin.imapd                                            usr.sbin.userdel 
 +postfix-oqmgr                sbin.portmap             usr.bin.opera             usr.lib.dovecot.log                      usr.sbin.in.fingerd                                       usr.sbin.vsftpd 
 +postfix-pickup               sbin.resmgrd             usr.bin.passwd            usr.lib.dovecot.managesieve              usr.sbin.in.ftpd                                          usr.sbin.xinetd 
 +postfix-pipe                 sbin.rpc.lockd           usr.bin.procmail          usr.lib.dovecot.managesieve-login        usr.sbin.in.ntalkd 
 +postfix-postscreen           sbin.rpc.statd           usr.bin.skype             usr.lib.dovecot.pop3                     usr.sbin.ipop2d 
 +postfix-proxymap             usr.bin.acroread         usr.bin.spamc             usr.lib.dovecot.pop3-login               usr.sbin.ipop3d 
 +</code> 
 + 
 +Copiez donc les profils dans **/usr/share/apparmor/extra-profiles/** vers **/etc/apparmor.d** : 
 + 
 +<code> 
 +root@debian12:~# cp /usr/share/apparmor/extra-profiles/* /etc/apparmor.d/ 
 + 
 +root@debian12:~# ls /etc/apparmor.d 
 +abi                          postfix-pickup           sbin.rpc.lockd            usr.bin.spamc                                             usr.lib.firefox.firefox                  usr.sbin.lighttpd 
 +abstractions                 postfix-pipe             sbin.rpc.statd            usr.bin.svnserve                                          usr.lib.firefox.firefox.sh               usr.sbin.mdnsd 
 +apache2.d                    postfix-postscreen       sbin.syslogd              usr.bin.totem                                             usr.lib.firefox.mozilla-xremote-client   usr.sbin.nmbd 
 +bin.netstat                  postfix-proxymap         sbin.syslog-ng            usr.bin.totem-previewers                                  usr.lib.GConf.2.gconfd-2                 usr.sbin.nscd 
 +bin.ping                     postfix-qmgr             tunables                  usr.bin.wireshark                                         usr.lib.libreoffice.program.oosplash     usr.sbin.oidentd 
 +disable                      postfix-qmqpd            usr.bin.acroread          usr.bin.xfs                                               usr.lib.libreoffice.program.senddoc      usr.sbin.popper 
 +etc.cron.daily.logrotate     postfix-scache           usr.bin.apropos           usr.lib64.GConf.2.gconfd-2                                usr.lib.libreoffice.program.soffice.bin  usr.sbin.postalias 
 +etc.cron.daily.slocate.cron  postfix-showq            usr.bin.dumpcap           usr.lib.bonobo.bonobo-activation-server                   usr.lib.libreoffice.program.xpdfimport   usr.sbin.postdrop 
 +etc.cron.daily.tmpwatch      postfix-smtp             usr.bin.evolution-2.10    usr.lib.dovecot.anvil                                     usr.lib.man-db.man                       usr.sbin.postmap 
 +force-complain               postfix-smtpd            usr.bin.fam               usr.lib.dovecot.auth                                      usr.lib.RealPlayer10.realplay            usr.sbin.postqueue 
 +lightdm-guest-session        postfix-spawn            usr.bin.gaim              usr.lib.dovecot.config                                    usr.lib.snapd.snap-confine.real          usr.sbin.sendmail 
 +local                        postfix-tlsmgr           usr.bin.irssi             usr.lib.dovecot.deliver                                   usr.NX.bin.nxclient                      usr.sbin.sendmail.postfix 
 +lsb_release                  postfix-trivial-rewrite  usr.bin.man               usr.lib.dovecot.dict                                      usr.sbin.apt-cacher-ng                   usr.sbin.sendmail.sendmail 
 +nvidia_modprobe              postfix-verify           usr.bin.mlmmj-bounce      usr.lib.dovecot.dovecot-auth                              usr.sbin.avahi-daemon                    usr.sbin.smbd 
 +php-fpm                      postfix-virtual          usr.bin.mlmmj-maintd      usr.lib.dovecot.dovecot-lda                               usr.sbin.cups-browsed                    usr.sbin.smbldap-useradd 
 +postfix-anvil                README                   usr.bin.mlmmj-make-ml.sh  usr.lib.dovecot.imap                                      usr.sbin.cupsd                           usr.sbin.spamd 
 +postfix-bounce               samba-bgqd               usr.bin.mlmmj-process     usr.lib.dovecot.imap-login                                usr.sbin.dhcpd                           usr.sbin.squid 
 +postfix-cleanup              samba-dcerpcd            usr.bin.mlmmj-receive     usr.lib.dovecot.lmtp                                      usr.sbin.dnsmasq                         usr.sbin.sshd 
 +postfix-discard              samba-rpcd               usr.bin.mlmmj-recieve     usr.lib.dovecot.log                                       usr.sbin.dovecot                         usr.sbin.traceroute 
 +postfix-dnsblog              samba-rpcd-classic       usr.bin.mlmmj-send        usr.lib.dovecot.managesieve                               usr.sbin.httpd2-prefork                  usr.sbin.useradd 
 +postfix-error                samba-rpcd-spoolss       usr.bin.mlmmj-sub         usr.lib.dovecot.managesieve-login                         usr.sbin.identd                          usr.sbin.userdel 
 +postfix-flush                sbin.dhclient            usr.bin.mlmmj-unsub       usr.lib.dovecot.pop3                                      usr.sbin.imapd                           usr.sbin.vsftpd 
 +postfix-lmtp                 sbin.dhclient-script     usr.bin.opera             usr.lib.dovecot.pop3-login                                usr.sbin.in.fingerd                      usr.sbin.xinetd 
 +postfix-local                sbin.dhcpcd              usr.bin.passwd            usr.lib.dovecot.script-login                              usr.sbin.in.ftpd 
 +postfix-master               sbin.klogd               usr.bin.pidgin            usr.lib.dovecot.ssl-params                                usr.sbin.in.ntalkd 
 +postfix-nqmgr                sbin.portmap             usr.bin.procmail          usr.lib.dovecot.stats                                     usr.sbin.ipop2d 
 +postfix-oqmgr                sbin.resmgrd             usr.bin.skype             usr.lib.evolution-data-server.evolution-data-server-1.10  usr.sbin.ipop3d 
 +</code> 
 + 
 +Redémarrez le service AppArmor : 
 + 
 +<code> 
 +root@debian12:~# systemctl restart apparmor 
 + 
 +root@debian12:~# systemctl status apparmor 
 +● apparmor.service - Load AppArmor profiles 
 +     Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; preset: enabled) 
 +     Active: active (exited) since Wed 2025-12-03 13:48:24 CET; 7s ago 
 +       Docs: man:apparmor(7) 
 +             https://gitlab.com/apparmor/apparmor/wikis/home/ 
 +    Process: 1618 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, statu> 
 +   Main PID: 1618 (code=exited, status=0/SUCCESS) 
 +        CPU: 16.409s 
 + 
 +Dec 03 13:48:22 debian12 systemd[1]: Starting apparmor.service - Load AppArmor profil> 
 +Dec 03 13:48:22 debian12 apparmor.systemd[1618]: Restarting AppArmor 
 +Dec 03 13:48:22 debian12 apparmor.systemd[1618]: Reloading AppArmor profiles 
 +Dec 03 13:48:24 debian12 systemd[1]: Finished apparmor.service - Load AppArmor profil> 
 +</code> 
 + 
 +=====LAB #4 - Travailler avec AppArmor===== 
 + 
 +====4.1 - Consulter la Liste des Profils Chargés==== 
 + 
 +Pour consulter la liste de tous les profils Apparmor chargés pour les applications et les processus et détaille leur statut (loaded., complain mode, enforce mode), utilisez la commande **aa-status** : 
 + 
 +<code> 
 +root@debian12:~# aa-status 
 +apparmor module is loaded. 
 +193 profiles are loaded. 
 +148 profiles are in enforce mode. 
 +   /etc/cron.daily/logrotate 
 +   ... 
 +   snap.john-the-ripper.zip2john 
 +45 profiles are in complain mode. 
 +   /usr/bin/irssi 
 +   ... 
 + traceroute 
 +0 profiles are in kill mode. 
 +0 profiles are in unconfined mode. 
 +7 processes have profiles defined. 
 +2 processes are in enforce mode. 
 +   /usr/sbin/cups-browsed (1190)  
 +   /usr/sbin/cupsd (1018)  
 +2 processes are in complain mode. 
 +   /usr/sbin/avahi-daemon (646) avahi-daemon 
 +   /usr/sbin/avahi-daemon (664) avahi-daemon 
 +3 processes are unconfined but have a profile defined. 
 +   /usr/sbin/sshd (1067)  
 +   /usr/sbin/sshd (1472)  
 +   /usr/sbin/sshd (1521)  
 +0 processes are in mixed mode. 
 +0 processes are in kill mode. 
 +</code> 
 + 
 +===Options de la Commande=== 
 + 
 +<code> 
 +root@debian12:~# aa-status --help 
 +Usage: aa-status [OPTIONS] 
 +Displays various information about the currently loaded AppArmor policy. 
 +OPTIONS (one only): 
 +  --enabled       returns error code if AppArmor not enabled 
 +  --profiled      prints the number of loaded policies 
 +  --enforced      prints the number of loaded enforcing policies 
 +  --complaining   prints the number of loaded non-enforcing policies 
 +  --kill          prints the number of loaded enforcing policies that kill tasks on policy violations 
 +  --special-unconfined   prints the number of loaded non-enforcing policies in the special unconfined mode 
 +  --process-mixed prints the number processes with mixed profile modes 
 +  --json          displays multiple data points in machine-readable JSON format 
 +  --pretty-json   same data as --json, formatted for human consumption as well 
 +  --verbose       (default) displays multiple data points about loaded policy set 
 +  --help          this message 
 +</code> 
 + 
 +====4.2 - Passer le Mode d'un Profil de Complain à Enforce==== 
 + 
 +Le profil **traceroute** est actuellement en mode **complain**. Pour passer ce profil en mode **enforce**, saisissez la commande suivante : 
 + 
 +<code> 
 +root@debian12:~# aa-enforce /etc/apparmor.d/usr.sbin.traceroute 
 +Setting /etc/apparmor.d/usr.sbin.traceroute to enforce mode. 
 + 
 +root@debian12:~# aa-status 
 +apparmor module is loaded. 
 +193 profiles are loaded. 
 +149 profiles are in enforce mode. 
 +   /etc/cron.daily/logrotate 
 +... 
 +   snap.john-the-ripper.zip2john 
 +   traceroute 
 +44 profiles are in complain mode. 
 +   /usr/bin/irssi 
 +... 
 +   syslogd 
 +0 profiles are in kill mode. 
 +0 profiles are in unconfined mode. 
 +7 processes have profiles defined. 
 +2 processes are in enforce mode. 
 +   /usr/sbin/cups-browsed (1190)  
 +   /usr/sbin/cupsd (1018)  
 +2 processes are in complain mode. 
 +   /usr/sbin/avahi-daemon (646) avahi-daemon 
 +   /usr/sbin/avahi-daemon (664) avahi-daemon 
 +3 processes are unconfined but have a profile defined. 
 +   /usr/sbin/sshd (1067)  
 +   /usr/sbin/sshd (1472)  
 +   /usr/sbin/sshd (1521)  
 +0 processes are in mixed mode. 
 +0 processes are in kill mode. 
 +</code> 
 + 
 +===Options de la Commande=== 
 + 
 +<code> 
 +root@debian12:~# aa-enforce --help 
 +usage: aa-enforce [-h] [-d DIR] [--no-reload] program [program ...] 
 + 
 +Switch the given program to enforce mode 
 + 
 +positional arguments: 
 +  program            name of program 
 + 
 +options: 
 +  -h, --help         show this help message and exit 
 +  -d DIR, --dir DIR  path to profiles 
 +  --no-reload        Do not reload the profile after modifying it 
 +</code> 
 + 
 +====4.3 - Passer le Mode d'un Profil d'Enforce à Complain==== 
 + 
 +Pour repasser le profil en mode **enforce**, saisissez la commande suivante : 
 + 
 +<code> 
 +root@debian12:~# aa-complain /etc/apparmor.d/usr.sbin.traceroute 
 +Setting /etc/apparmor.d/usr.sbin.traceroute to complain mode. 
 + 
 +root@debian12:~# aa-status 
 +apparmor module is loaded. 
 +193 profiles are loaded. 
 +148 profiles are in enforce mode. 
 +   /etc/cron.daily/logrotate 
 +... 
 +   snap.john-the-ripper.zip2john 
 +45 profiles are in complain mode. 
 +   /usr/bin/irssi 
 +... 
 +   syslogd 
 +   traceroute 
 +0 profiles are in kill mode. 
 +0 profiles are in unconfined mode. 
 +7 processes have profiles defined. 
 +2 processes are in enforce mode. 
 +   /usr/sbin/cups-browsed (1190)  
 +   /usr/sbin/cupsd (1018)  
 +2 processes are in complain mode. 
 +   /usr/sbin/avahi-daemon (646) avahi-daemon 
 +   /usr/sbin/avahi-daemon (664) avahi-daemon 
 +3 processes are unconfined but have a profile defined. 
 +   /usr/sbin/sshd (1067)  
 +   /usr/sbin/sshd (1472)  
 +   /usr/sbin/sshd (1521)  
 +0 processes are in mixed mode. 
 +0 processes are in kill mode. 
 +</code> 
 + 
 +===Options de la Commande=== 
 + 
 +<code> 
 +root@debian12:~# aa-complain --help 
 +usage: aa-complain [-h] [-d DIR] [--no-reload] program [program ...] 
 + 
 +Switch the given program to complain mode 
 + 
 +positional arguments: 
 +  program            name of program 
 + 
 +options: 
 +  -h, --help         show this help message and exit 
 +  -d DIR, --dir DIR  path to profiles 
 +  --no-reload        Do not reload the profile after modifying it 
 +</code> 
 + 
 +====4.4 - Désactiver et Réactiver tous les Profils==== 
 + 
 +Pour déactiver tous les profils, utilisez la commande **aa-teardown** : 
 + 
 +<code> 
 +root@debian12:~# aa-teardown 
 +Unloading AppArmor profiles  
 + 
 +root@debian12:~# aa-status 
 +apparmor module is loaded. 
 +</code> 
 + 
 +Pour réactiver les profils, réinstallez AppArmor : 
 + 
 +<code> 
 +root@debian12:~# apt reinstall apparmor -y 
 +Reading package lists... Done 
 +Building dependency tree... Done 
 +Reading state information... Done 
 +0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded. 
 +Need to get 616 kB of archives. 
 +After this operation, 0 B of additional disk space will be used. 
 +Get:1 http://deb.debian.org/debian bookworm/main amd64 apparmor amd64 3.0.8-3 [616 kB] 
 +Fetched 616 kB in 0s (10.6 MB/s) 
 +Preconfiguring packages ... 
 +(Reading database ... 186665 files and directories currently installed.) 
 +Preparing to unpack .../apparmor_3.0.8-3_amd64.deb ... 
 +Unpacking apparmor (3.0.8-3) over (3.0.8-3) ... 
 +Setting up apparmor (3.0.8-3) ... 
 +Reloading AppArmor profiles  
 +Processing triggers for man-db (2.11.2-2) ... 
 +</code> 
 + 
 +root@debian12:~# aa-notify -p -w 1 --user trainee 
 +Notification emitter started in the background 
 + 
 +====4.5 - Créer un Profil==== 
 + 
 +Créez le script **newusercheck.sh** qui a pour but d'envoyer un email à un récipent chaque fois qu'un nouvel utilisateur est créé dans Debian 12 : 
 + 
 +<code> 
 +root@debian12:~# mkdir scripts 
 + 
 +root@debian12:~# vi scripts/newusercheck.sh 
 + 
 +root@debian12:~# cat scripts/newusercheck.sh 
 +#!/bin/bash 
 +# Send an email alert if a new account is added to the /etc/passwd file 
 +# CRONJOB BELOW RUNS EVERY 5 MINUTES 
 +# */5 * * * * /bin/bash /root/scripts/newusercheck.sh 1>/dev/null 2>/dev/null 
 + 
 + 
 +HOSTNAME=$(hostname) 
 +TO="<to@domain.com>" 
 +FROM="<from@domain.com>" 
 +USERLIST="/root/scripts/.user.lst" 
 +NEWUSERLIST="/root/scripts/.userlist.txt" 
 +PASSWDFILE="/etc/passwd" 
 +COMPARE=0 
 + 
 +trap "/bin/rm -rf --preserve-root -- $NEWUSERLIST"
 + 
 + 
 +if [ -s "$USERLIST" ] ; then 
 + /usr/bin/printf "[*] Checking previously known list of users\n" 
 + LASTREV="$(/bin/cat $USERLIST)" 
 + COMPARE=1 
 +fi 
 + 
 + 
 +/usr/bin/printf "[*] Obtaining current user list\n" 
 +/bin/cat $PASSWDFILE | /usr/bin/cut -d: -f1 > $NEWUSERLIST 
 + 
 + 
 +CURRENT="$(/bin/cat $NEWUSERLIST)" 
 + 
 + 
 +if [ $COMPARE -eq 1 ] ; then 
 + if [ "$CURRENT" != "$LASTREV" ] ; then 
 + /usr/bin/printf "[!] WARNING: password file has changed\n" 
 + /usr/bin/diff $USERLIST $NEWUSERLIST | /bin/grep '^[<>]' | /bin/sed 's/</Removed: /;s/>/Added:/' 
 +     
 +    /usr/bin/printf "[*] Sending email alert\n" 
 + /usr/bin/mail -r $FROM -A $NEWUSERLIST -s "WARNING: New Account Created on $HOSTNAME" $TO <<< "You are receiving this email because a new user account has been created on $HOSTNAME. Attached to this email is a file containing the CURRENT user accounts on the system. The user list has been updated so you will not receive this alert until an account is created again." 
 +     
 +    /usr/bin/printf "[!] WARNING: Previously known user list has been updated so you do not keep receiving this warning\n"  
 +    /bin/mv $NEWUSERLIST $USERLIST 
 + else 
 + /usr/bin/printf "[*] No new users have been created since the last check\n" 
 + fi 
 +else 
 + /usr/bin/printf "[*] Creating initial database of previously known users\n" 
 + /bin/mv $NEWUSERLIST $USERLIST 
 +fi 
 + 
 +/bin/chmod 600 $USERLIST 
 + 
 +exit 0 
 +</code> 
 + 
 +Rendez ce script exécutable et testez-le : 
 + 
 +<code> 
 +root@debian12:~# cd scripts 
 + 
 +root@debian12:~/scripts# chmod u+x newusercheck.sh 
 + 
 +root@debian12:~/scripts# ./newusercheck.sh  
 +[*] Obtaining current user list 
 +[*] Creating initial database of previously known users 
 +</code> 
 + 
 +===La Commande aa-genprof=== 
 + 
 +Utilisez maintenant la commande **aa-genprof** pour créer un profil : 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-genprof /root/scripts/newusercheck.sh  
 +Updating AppArmor profiles in /etc/apparmor.d. 
 +Writing updated profile for /root/scripts/newusercheck.sh. 
 +Setting /root/scripts/newusercheck.sh 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: /root/scripts/newusercheck.sh 
 + 
 +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 
 +</code> 
 + 
 +Dans une deuxième connexion à votre VM Debian 12, exécutez le script **newusercheck.sh** : 
 + 
 +<code> 
 +trainee@debian12:~$ su - 
 +Password: fenestros 
 + 
 +root@debian12:~# cd scripts 
 + 
 +root@debian12:~/scripts# ./newusercheck.sh  
 +[*] Checking previously known list of users 
 +[*] Obtaining current user list 
 +[*] No new users have been created since the last check 
 +</code> 
 + 
 +Dans la première connexion, appuyez sur la touche **S** : 
 + 
 +<code> 
 +Reading log entries from /var/log/audit/audit.log. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/hostname 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - Notez que le script exécute la commande **/usr/bin/hostname** et qu'AppArmor indique que la sévérité est **unknown**. 
 +</WRAP> 
 + 
 +Appuyez maintenant sur la touche **I** pour **hériter** des permissions du processus parent du script, c'est-à-dire, **bash** : 
 + 
 +<code> 
 +Reading log entries from /var/log/audit/audit.log. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/hostname 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/printf 
 +Severity: 1 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - Notez que le script exécute la commande **/usr/bin/printf** et qu'AppArmor indique que la sévérité est **1**. 
 +</WRAP> 
 + 
 +De nouveau appuyez sur la touche **I** et continuez ce processus jusqu'à la question concernant **/dev/pts/1** : 
 + 
 +<code> 
 +Reading log entries from /var/log/audit/audit.log. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/hostname 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/printf 
 +Severity: 1 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/cat 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (N)amed / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/cut 
 +Severity: 2 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/chmod 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (N)amed / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/rm 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (N)amed / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 +Complain-mode changes: 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /dev/pts/
 +New Mode: rw 
 +Severity: 9 
 + 
 + [1 - include <abstractions/consoles>
 +  2 - include <abstractions/lightdm>  
 +  3 - include <abstractions/xdg-open>  
 +  4 - /dev/pts/1 rw,  
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / Abo(r)t / (F)inish 
 +</code> 
 + 
 +Appuyez sur la touche **A** pour toutes les questions suivantes : 
 + 
 +<code> 
 +Reading log entries from /var/log/audit/audit.log. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/hostname 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/printf 
 +Severity: 1 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/cat 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (N)amed / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/cut 
 +Severity: 2 
 + 
 +(I)nherit / (C)hild / (P)rofile / (N)amed / (U)nconfined / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/chmod 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (N)amed / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Execute:  /usr/bin/rm 
 +Severity: unknown 
 + 
 +(I)nherit / (C)hild / (N)amed / (X) ix On / (D)eny / Abo(r)t / (F)inish 
 +Complain-mode changes: 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /dev/pts/
 +New Mode: rw 
 +Severity: 9 
 + 
 + [1 - include <abstractions/consoles>
 +  2 - include <abstractions/lightdm>  
 +  3 - include <abstractions/xdg-open>  
 +  4 - /dev/pts/1 rw,  
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / Abo(r)t / (F)inish 
 +Adding include <abstractions/consoles> to profile. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /root/scripts/.userlist.txt 
 +New Mode: owner w 
 +Severity: unknown 
 + 
 + [1 - owner /root/scripts/.userlist.txt w,] 
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish 
 +Adding owner /root/scripts/.userlist.txt w, to profile. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /etc/ld.so.cache 
 +New Mode: owner r 
 +Severity: 1 
 + 
 + [1 - include <abstractions/lightdm>
 +  2 - owner /etc/ld.so.cache r,  
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish 
 +Adding include <abstractions/lightdm> to profile. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /root/scripts/.user.lst 
 +New Mode: owner r 
 +Severity: unknown 
 + 
 + [1 - owner /root/scripts/.user.lst r,] 
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish 
 +Adding owner /root/scripts/.user.lst r, to profile. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /root/scripts/.userlist.txt 
 +Old Mode: owner w 
 +New Mode: owner r 
 +Severity: unknown 
 + 
 + [1 - owner /root/scripts/.userlist.txt r,] 
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish 
 +Adding owner /root/scripts/.userlist.txt r, to profile. 
 + 
 +Profile:  /root/scripts/newusercheck.sh 
 +Path:     /root/scripts/.user.lst 
 +Old Mode: owner r 
 +New Mode: owner w 
 +Severity: unknown 
 + 
 + [1 - owner /root/scripts/.user.lst w,] 
 +(A)llow / [(D)eny] / (I)gnore / (G)lob / Glob with (E)xtension / (N)ew / Audi(t) / (O)wner permissions off / Abo(r)t / (F)inish 
 +Adding owner /root/scripts/.user.lst w, to profile. 
 + 
 += Changed Local Profiles = 
 + 
 +The following local profiles were changed. Would you like to save them? 
 + 
 + [1 - /root/scripts/newusercheck.sh] 
 +(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t 
 +</code> 
 + 
 +Appuyez sur la touche **S** : 
 + 
 +<code> 
 +... 
 +Writing updated profile for /root/scripts/newusercheck.sh. 
 + 
 +Profiling: /root/scripts/newusercheck.sh 
 + 
 +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 
 +</code> 
 + 
 +Retournez dans la deuxième connexion à votre VM et exécutez de nouveau le script **newusercheck.sh** : 
 + 
 +<code> 
 +root@debian12:~/scripts# ./newusercheck.sh  
 +[*] Checking previously known list of users 
 +[*] Obtaining current user list 
 +[*] No new users have been created since the last check 
 +</code> 
 + 
 +Dans la première connexion, appuyez de nouveau sur la touche **S** : 
 + 
 +<code> 
 +... 
 +Writing updated profile for /root/scripts/newusercheck.sh. 
 + 
 +Profiling: /root/scripts/newusercheck.sh 
 + 
 +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 
 +Reading log entries from /var/log/audit/audit.log. 
 + 
 +Profiling: /root/scripts/newusercheck.sh 
 + 
 +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 
 +</code> 
 + 
 +<WRAP center round important 50%> 
 +**Important** - Notez l'abscence d'erreurs. 
 +</WRAP> 
 + 
 +Appuyez maintenant sur la touch **F** : 
 + 
 +<code> 
 +... 
 +Reloaded AppArmor profiles in enforce mode. 
 + 
 +Please consider contributing your new profile! 
 +See the following wiki page for more information: 
 +https://gitlab.com/apparmor/apparmor/wikis/Profiles 
 + 
 +Finished generating profile for /root/scripts/newusercheck.sh. 
 +</code> 
 + 
 +Le profil à été créé dans le répertoire **/etc/apparmor.d/** : 
 + 
 +<code> 
 +root@debian12:~/scripts# ls /etc/apparmor.d | grep root 
 +root.scripts.newusercheck.sh 
 + 
 +root@debian12:~/scripts# cat /etc/apparmor.d/root.scripts.newusercheck.sh 
 +# Last Modified: Wed Dec  3 16:36:43 2025 
 +abi <abi/3.0>, 
 + 
 +include <tunables/global> 
 + 
 +/root/scripts/newusercheck.sh { 
 +  include <abstractions/base> 
 +  include <abstractions/bash> 
 +  include <abstractions/consoles> 
 +  include <abstractions/lightdm> 
 + 
 +  /root/scripts/newusercheck.sh r, 
 +  /usr/bin/bash ix, 
 +  /usr/bin/cat mrix, 
 +  /usr/bin/chmod mrix, 
 +  /usr/bin/cut mrix, 
 +  /usr/bin/hostname mrix, 
 +  /usr/bin/printf mrix, 
 +  /usr/bin/rm mrix, 
 +  owner /root/scripts/.user.lst r, 
 +  owner /root/scripts/.user.lst w, 
 +  owner /root/scripts/.userlist.txt r, 
 +  owner /root/scripts/.userlist.txt w, 
 + 
 +
 +</code> 
 + 
 +Ce fichier inclut le contenu du profil **/etc/apparmor.d/tunables/global** : 
 + 
 +<code> 
 +root@debian12:~/scripts# cat /etc/apparmor.d/tunables/global  
 +# ------------------------------------------------------------------ 
 +
 +#    Copyright (C) 2006-2009 Novell/SUSE 
 +#    Copyright (C) 2010-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. 
 +
 +# ------------------------------------------------------------------ 
 + 
 +# All the tunables definitions that should be available to every profile 
 +# should be included here 
 + 
 +include <tunables/home> 
 +include <tunables/multiarch> 
 +include <tunables/proc> 
 +include <tunables/alias> 
 +include <tunables/kernelvars> 
 +include <tunables/xdg-user-dirs> 
 +include <tunables/share> 
 +include <tunables/etc> 
 +include <tunables/run> 
 +</code> 
 + 
 +==Options de la Commande== 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-genprof --help 
 +usage: aa-genprof [-h] [-d DIR] [-f FILE] [-j] program 
 + 
 +Generate profile for the given program 
 + 
 +positional arguments: 
 +  program               name of program to profile 
 + 
 +options: 
 +  -h, --help            show this help message and exit 
 +  -d DIR, --dir DIR     path to profiles 
 +  -f FILE, --file FILE  path to logfile 
 +  -j, --json            Input and Output in JSON 
 +</code> 
 + 
 +===La Commande aa-logprof=== 
 + 
 +Exécutez maintenant la commande **aa-logprof** pour vérifier que toutes les permissions sont adéquatement placées : 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-logprof 
 +Updating AppArmor profiles in /etc/apparmor.d. 
 +Reading log entries from /var/log/audit/audit.log. 
 +Complain-mode changes: 
 +Enforce-mode changes: 
 + 
 +Profile:    /usr/sbin/cupsd 
 +Capability: net_admin 
 +Severity:   8 
 + 
 + [1 - capability net_admin,
 +(A)llow / [(D)eny] / (I)gnore / Audi(t) / Abo(r)t / (F)inish 
 +</code> 
 + 
 +Appuyez sur la touche **A** : 
 + 
 +</code> 
 +Adding capability net_admin, to profile. 
 + 
 += Changed Local Profiles = 
 + 
 +The following local profiles were changed. Would you like to save them? 
 + 
 + [1 - /usr/sbin/cupsd] 
 +(S)ave Changes / Save Selec(t)ed Profile / [(V)iew Changes] / View Changes b/w (C)lean profiles / Abo(r)t 
 + 
 +Appuyez sur la touche **S** : 
 + 
 +</code> 
 +Writing updated profile for /usr/sbin/cupsd. 
 +</code> 
 + 
 +Exécutez de nouveau la commande **aa-logprof** : 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-logprof 
 +Updating AppArmor profiles in /etc/apparmor.d. 
 +Reading log entries from /var/log/audit/audit.log. 
 +Complain-mode changes: 
 +Enforce-mode changes: 
 +</code> 
 + 
 +==Options de la Commande== 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-logprof --help 
 +usage: aa-logprof [-h] [-d DIR] [-f FILE] [-m MARK] [-j] 
 + 
 +Process log entries to generate profiles 
 + 
 +options: 
 +  -h, --help            show this help message and exit 
 +  -d DIR, --dir DIR     path to profiles 
 +  -f FILE, --file FILE  path to logfile 
 +  -m MARK, --mark MARK  mark in the log to start processing after 
 +  -j, --json            Input and Output in JSON 
 +</code> 
 + 
 +Dernièrement passez le nouveau profil en mode **enforce** : 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-enforce /etc/apparmor.d/root.scripts.newusercheck.sh  
 +Setting /etc/apparmor.d/root.scripts.newusercheck.sh to enforce mode. 
 + 
 +root@debian12:~/scripts# aa-logprof 
 +Updating AppArmor profiles in /etc/apparmor.d. 
 +Reading log entries from /var/log/audit/audit.log. 
 +Complain-mode changes: 
 +Enforce-mode changes: 
 +</code> 
 + 
 +====4.6 - Supprimer un Profil==== 
 + 
 +Afin de supprimer le profil **root.scripts.newusercheck.sh**, il faut de d'abord le décharger du noyau avant de supprimer le fichier profil : 
 + 
 +<code> 
 +root@debian12:~/scripts# apparmor_parser -R /etc/apparmor.d/root.scripts.newusercheck.sh  
 + 
 +root@debian12:~/scripts# rm -f /etc/apparmor.d/root.scripts.newusercheck.sh  
 +</code> 
 + 
 +===Options de la Commande=== 
 + 
 +<code> 
 +root@debian12:~/scripts# apparmor_parser --help 
 +AppArmor parser version 3.0.8 
 +Copyright (C) 1999-2008 Novell Inc. 
 +Copyright 2009-2018 Canonical Ltd. 
 + 
 +Usage: apparmor_parser [options] [profile] 
 + 
 +Options: 
 +-------- 
 +-a, --add               Add apparmor definitions [default] 
 +-r, --replace           Replace apparmor definitions 
 +-R, --remove            Remove apparmor definitions 
 +-C, --Complain          Force the profile into complain mode 
 +-B, --binary            Input is precompiled profile 
 +-N, --names             Dump names of profiles in input. 
 +-S, --stdout            Dump compiled profile to stdout 
 +-o n, --ofile n         Write output to file n 
 +-b n, --base n          Set base dir and cwd 
 +-I n, --Include n       Add n to the search path 
 +-f n, --subdomainfs n   Set location of apparmor filesystem 
 +-m n, --match-string n  Use only features n 
 +-M n, --features-file n Set compile & kernel features to file n 
 +--policy-features n     Policy features set in file n 
 +--override-policy-abi n     As policy-features but override ABI rules 
 +--kernel-features n     Kernel features set in file n 
 +-n n, --namespace n     Set Namespace for the profile 
 +-X, --readimpliesX      Map profile read permissions to mr 
 +-k, --show-cache        Report cache hit/miss details 
 +-K, --skip-cache        Do not attempt to load or save cached profiles 
 +-T, --skip-read-cache   Do not attempt to load cached profiles 
 +-W, --write-cache       Save cached profile (force with -T) 
 +    --skip-bad-cache    Don't clear cache if out of sync 
 +    --purge-cache       Clear cache regardless of its state 
 +    --debug-cache       Debug cache file checks 
 +    --print-cache-dir   Print the cache directory path 
 +-L, --cache-loc n       Set the location of the profile caches 
 +-q, --quiet             Don't emit warnings 
 +-v, --verbose           Show profile names as they load 
 +-Q, --skip-kernel-load  Do everything except loading into kernel 
 +-V, --version           Display version info and exit 
 +-d [n], --debug         Debug apparmor definitions OR [n] 
 +-p, --preprocess        Dump preprocessed profile 
 +-D [n], --dump          Dump internal info for debugging 
 +-O [n], --Optimize      Control dfa optimizations 
 +-h [cmd], --help[=cmd]  Display this text or info about cmd 
 +-j n, --jobs n          Set the number of compile threads 
 +--max-jobs n            Hard cap on --jobs. Default 8*cpus 
 +--abort-on-error        Abort processing of profiles on first error 
 +--skip-bad-cache-rebuild Do not try rebuilding the cache if it is rejected by the kernel 
 +--config-file n         Specify the parser config file location, processed early before other options. 
 +--print-config          Print config file location 
 +--warn n                Enable warnings (see --help=warn) 
 +--Werror [n]            Convert warnings to errors. If n is specified turn warn n into an error 
 +</code> 
 + 
 +Terminez par procéder à un nettoyage d'AppArmor et le redémarrage du service : 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-remove-unknown 
 +root@debian12:~/scripts# systemctl restart apparmor 
 +root@debian12:~/scripts# systemctl status apparmor 
 +● apparmor.service - Load AppArmor profiles 
 +     Loaded: loaded (/lib/systemd/system/apparmor.service; enabled; preset: enabled) 
 +     Active: active (exited) since Wed 2025-12-03 17:32:36 CET; 8s ago 
 +       Docs: man:apparmor(7) 
 +             https://gitlab.com/apparmor/apparmor/wikis/home/ 
 +    Process: 2992 ExecStart=/lib/apparmor/apparmor.systemd reload (code=exited, status=0/SUCCESS) 
 +   Main PID: 2992 (code=exited, status=0/SUCCESS) 
 +        CPU: 1.261s 
 + 
 +Dec 03 17:32:35 debian12 systemd[1]: Starting apparmor.service - Load AppArmor profiles... 
 +Dec 03 17:32:35 debian12 apparmor.systemd[2992]: Restarting AppArmor 
 +Dec 03 17:32:35 debian12 apparmor.systemd[2992]: Reloading AppArmor profiles 
 +Dec 03 17:32:36 debian12 systemd[1]: Finished apparmor.service - Load AppArmor profiles. 
 +</code> 
 + 
 +===Options de la Commande=== 
 + 
 +<code> 
 +root@debian12:~/scripts# aa-remove-unknown --help 
 +usage: /usr/sbin/aa-remove-unknown [options] 
 + 
 +Remove profiles unknown to the system 
 + 
 +Options: 
 + -h, --help     Show this help message and exit 
 + -n             Dry run; don't remove profiles 
 +</code> 
 + 
 +=====LAB #5 - Mise en place de SELinux pour sécuriser le serveur===== 
 + 
 +====5.1 - Présentationn====
  
 Désactivez AppArmor : Désactivez AppArmor :
Ligne 848: Ligne 2225:
 Nov 30 09:59:03 debian12 systemd[1]: apparmor.service: Deactivated successfully. Nov 30 09:59:03 debian12 systemd[1]: apparmor.service: Deactivated successfully.
 Nov 30 09:59:03 debian12 systemd[1]: Stopped apparmor.service - Load AppArmor profiles. Nov 30 09:59:03 debian12 systemd[1]: Stopped apparmor.service - Load AppArmor profiles.
 +</code>
 +
 +Editez la ligne **GRUB_CMDLINE_LINUX_DEFAULT** dans le fichier **/etc/default/grub** :
 +
 +<code>
 +root@debian12:~/scripts# cd ~
 +
 +root@debian12:~# vi /etc/default/grub
 +
 +root@debian12:~# cat /etc/default/grub
 +# If you change this file, run 'update-grub' afterwards to update
 +# /boot/grub/grub.cfg.
 +# For full documentation of the options in this file, see:
 +#   info -f grub -n 'Simple configuration'
 +
 +GRUB_DEFAULT=0
 +GRUB_TIMEOUT=5
 +GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
 +GRUB_CMDLINE_LINUX_DEFAULT="quiet"
 +GRUB_CMDLINE_LINUX=""
 +
 +# If your computer has multiple operating systems installed, then you
 +# probably want to run os-prober. However, if your computer is a host
 +# for guest OSes installed via LVM or raw disk devices, running
 +# os-prober can cause damage to those guest OSes as it mounts
 +# filesystems to look for things.
 +#GRUB_DISABLE_OS_PROBER=false
 +
 +# Uncomment to enable BadRAM filtering, modify to suit your needs
 +# This works with Linux (no patch required) and with any kernel that obtains
 +# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
 +#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
 +
 +# Uncomment to disable graphical terminal
 +#GRUB_TERMINAL=console
 +
 +# The resolution used on graphical terminal
 +# note that you can use only modes which your graphic card supports via VBE
 +# you can see them in real GRUB with the command `vbeinfo'
 +#GRUB_GFXMODE=640x480
 +
 +# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
 +#GRUB_DISABLE_LINUX_UUID=true
 +
 +# Uncomment to disable generation of recovery mode menu entries
 +#GRUB_DISABLE_RECOVERY="true"
 +
 +# Uncomment to get a beep at g
 +</code>
 +
 +Mettez à jour GRUB :
 +
 +<code>
 +root@debian12:~# update-grub
 +Generating grub configuration file ...
 +Found background image: /usr/share/images/desktop-base/desktop-grub.png
 +Found linux image: /boot/vmlinuz-6.1.0-41-amd64
 +Found initrd image: /boot/initrd.img-6.1.0-41-amd64
 +Found linux image: /boot/vmlinuz-5.10.0-36-amd64
 +Found initrd image: /boot/initrd.img-5.10.0-36-amd64
 +Warning: os-prober will not be executed to detect other bootable partitions.
 +Systems on them will not be added to the GRUB boot configuration.
 +Check GRUB_DISABLE_OS_PROBER documentation entry.
 +done
 +</code>
 +
 +Redémarrez la VM :
 +
 +<code>
 +root@debian12:~# reboot
 +</code>
 +
 +Reconnectez-vous à la VM et passez en tant que l'utilisateur **root** :
 +
 +<code>
 +trainee@debian12:~$ su -
 +Password: fenestros
 +
 +root@debian12:~#
 </code> </code>
  
Ligne 853: Ligne 2309:
  
 <code> <code>
-root@debian12:~# apt install selinux-basics selinux-policy-default selinux-utils policycoreutils auditd -y+root@debian12:~# apt install selinux-basics selinux-policy-default selinux-utils policycoreutils -y
 </code> </code>
  
Ligne 891: Ligne 2347:
 </WRAP> </WRAP>
  
-====4.2 - Introducton====+====5.2 - Introducton====
  
 L'approche %%SELinux%% (//Security Enhanced Linux//) à la sécurité est une approche de type **TE**. Elle essaie aussi d'intégrer les notions des approches de type **RBAC**, **MAC** et **MLS** sous la forme de **MCS** : L'approche %%SELinux%% (//Security Enhanced Linux//) à la sécurité est une approche de type **TE**. Elle essaie aussi d'intégrer les notions des approches de type **RBAC**, **MAC** et **MLS** sous la forme de **MCS** :
  
 ^ Type de Sécurité ^ Nom ^ Description ^ ^ Type de Sécurité ^ Nom ^ Description ^
 +| DAC |  //Discretional Access Control//  | L'accès aux objets est en fonction de l'identité (utilisateur,groupe). Un utilisateur peut rendre accessibles aux autres ses propres objets. |
 | TE |  //Type enforcement//  | Chaque objet a une étiquette appelé //type// pour un fichier et //domaine// pour un processus. La politique de sécurité définit l'interaction entre les types et les domaines. | | TE |  //Type enforcement//  | Chaque objet a une étiquette appelé //type// pour un fichier et //domaine// pour un processus. La politique de sécurité définit l'interaction entre les types et les domaines. |
 | RBAC |  //Role Based Access Control//  | Un utilisateur a un ou plusieurs rôles. Les droits sont attribués aux rôles. | | RBAC |  //Role Based Access Control//  | Un utilisateur a un ou plusieurs rôles. Les droits sont attribués aux rôles. |
Ligne 913: Ligne 2370:
 Chaque **//classe d'objet//** possède un jeu de permissions possibles ou **//actions//** qui peuvent être uniques à la classe ou bien **héritées** d'autres classes. Chaque **//classe d'objet//** possède un jeu de permissions possibles ou **//actions//** qui peuvent être uniques à la classe ou bien **héritées** d'autres classes.
  
-====4.3 - Définitions====+====5.3 - Définitions====
  
 ===Security Context=== ===Security Context===
Ligne 1102: Ligne 2559:
   * de créer des **//objets//** dans différents **Types** que le répertoire parent de l'**//objet//**.   * de créer des **//objets//** dans différents **Types** que le répertoire parent de l'**//objet//**.
  
-====4.4 - Commandes SELinux====+====5.4 - Commandes SELinux====
  
 ^ Commande ^ Description ^ ^ Commande ^ Description ^
Ligne 1123: Ligne 2580:
 | togglesebool | Bascule la valeur d'un booléen | | togglesebool | Bascule la valeur d'un booléen |
  
-====4.5 - Les Etats de SELinux====+====5.5 - Les Etats de SELinux====
  
 %%SELinux%% connait trois états : %%SELinux%% connait trois états :
Ligne 1225: Ligne 2682:
 </code> </code>
  
-====4.6 - Booléens====+====5.6 - Booléens====
  
 Les booléens permettent à des ensembles de règles d'être utilisées d'une manière alternative. Les booléens permettent à des ensembles de règles d'être utilisées d'une manière alternative.
Ligne 1367: Ligne 2824:
 </code> </code>
  
-=====LAB #- Travailler avec SELinux=====+=====LAB #- Travailler avec SELinux=====
  
 Afin reconstruire la politique actuelle **sans** les règles **dontaudit**, utilisez la commande **semodule** : Afin reconstruire la politique actuelle **sans** les règles **dontaudit**, utilisez la commande **semodule** :
Ligne 1406: Ligne 2863:
 </code> </code>
  
-====5.1 - Copier et Déplacer des Fichiers====+====6.1 - Copier et Déplacer des Fichiers====
  
 Créez deux fichiers **file1** et **file2** en tant que l'utilisateur **trainee** puis visualisez les SC des fichiers : Créez deux fichiers **file1** et **file2** en tant que l'utilisateur **trainee** puis visualisez les SC des fichiers :
Ligne 1445: Ligne 2902:
 Notez que la commande **mv** maintient le **type** d'origine. Notez que la commande **mv** maintient le **type** d'origine.
  
-====5.2 - Vérifier les SC des Processus====+====6.2 - Vérifier les SC des Processus====
  
 Il convient d'utiliser l'option **Z** avec la commande **ps** : Il convient d'utiliser l'option **Z** avec la commande **ps** :
Ligne 1509: Ligne 2966:
 </code> </code>
  
-====5.3 - Visualiser la SC d'un Utilisateur====+====6.3 - Visualiser la SC d'un Utilisateur====
  
 Utilisez l'option **-Z** avec la commande **id** : Utilisez l'option **-Z** avec la commande **id** :
Ligne 1528: Ligne 2985:
 </code> </code>
  
-====5.4 - Vérifier la SC d'un fichier====+====6.4 - Vérifier la SC d'un fichier====
  
 Il convient d'utiliser la commande ls avec l'option **-Z** : Il convient d'utiliser la commande ls avec l'option **-Z** :
Ligne 1559: Ligne 3016:
 </code> </code>
  
-====5.5 - Troubleshooting SELinux====+====6.5 - Troubleshooting SELinux====
  
 L'interprétation des messages journalisés de %%SELinux%% est souvent la clef d'un dépannage efficace et rapide. L'interprétation des messages journalisés de %%SELinux%% est souvent la clef d'un dépannage efficace et rapide.
  
-Si le démon **auditd** est démarré, les messages de %%SELinux%% sont consignés dans le fichier **/var/log/audit/audit.log**. Dans le cas contraire, les mêmes messages sont consignés dans le fichier **/var/log/messages**. Dans les deux cas, chaque message de %%SELinux%% contient le mot clef **AVC**+Si le démon **auditd** est démarré, les messages de %%SELinux%% sont consignés dans le fichier **/var/log/audit/audit.log**. Dans le cas contraire, les mêmes messages sont consignés dans le fichier **/var/log/messages**. Dans les deux cas, chaque message de %%SELinux%% contient le mot clef **AVC** : 
- +
-Avant de poursuivre, mettez SELinux en mode Permissive : +
- +
-<code> +
-root@debian12:~# setenforce permissive +
- +
-root@debian12:~# getenforce +
-Permissive +
-</code> +
  
 ===La commande chcon=== ===La commande chcon===
Ligne 1869: Ligne 3317:
 </code> </code>
  
-====5.7 - La commande semanage====+====6.7 - La commande semanage====
  
 Pour illustrer l'utilisation de cette commande, considérez le besoin de mettre le service apache à l'écoute du port **8090** au lieu du port standard. Pour illustrer l'utilisation de cette commande, considérez le besoin de mettre le service apache à l'écoute du port **8090** au lieu du port standard.
Ligne 1939: Ligne 3387:
 </code> </code>
  
-====5.8 - La commande audit2allow====+====6.8 - La commande audit2allow====
  
 La création d'un module de politique personnalisé se fait en utilisant la commande **audit2allow**. L'administrateur de sécurité à recours à la création de modules quand, et uniquement quand : La création d'un module de politique personnalisé se fait en utilisant la commande **audit2allow**. L'administrateur de sécurité à recours à la création de modules quand, et uniquement quand :
Menu