Création d'un ISO personnalisé Debian avec persistance chiffrée
Bien qu’il existe un nombre très important de distributions Linux, on peut parfois avoir envie de créer sa propre distribution qui réponde totalement à nos besoins et qui n’embarque pas d’outils qui nous seront inutiles et qui, de ce fait, allourdiront la machine.
Ce tutoriel détaillera étape par étape la marche à suivre pour créer sa distribution Linux (Debian) sur mesure.
Installation des packages nécessaires
Pour commencer, il faut installer les packages nécessaires via la commande :
|
|
Création de l’espace de travail
Il faut ensuite créer un dossier de travail dans lequel on va construire l’image et se déplacer dans ce dernier :
|
|
À partir de là, on va lancer la configuration afin de créer l’arborescence de travail :
|
|
Comme précisé, cette commande permet de créer les dossiers auto, .build, config et local.
Configuration du build
Cette partie permettra de personnaliser l’image Linux (Debian en l’occurence).
Afin de configurer l’image correctement, on va venir indiquer à live-build les bonnes propriétés à l’image. Il suffit pour ça de lancer la commande suivante depuis le dossier isolive/iso que l’on a créé précédemment :
|
|
Ici, les paramètres correspondent à :
- “bootappend-live” permet la spécification du type de clavier, du nom d’utilisateur et du nom de la machine.
- “distribution bullseye” précise la version du système à installer. Dans notre cas, on est sur une Debian 11, appelée “Bullseye”
- “debian-installer live” permet de spécifier qu’en cas d’installation, la session live sera reproduite à l’identique sur le disque dur.
Création du fichier packages
Il faut désormais définir les packages que notre Debian modifiée devra contenir lors de son boot version live ou son installation.
On va donc créer le fichier config/package-lists/audit.list.chroot et y placer les paquets suivants :
|
|
Si vous souhaitez rajouter un paquet, il suffit de le mettre à la suite des autres, en espacant bien chaque paquet d’un espace.
Néanmoins, il faut faire très attention à l’écriture du paquet. En effet, la moindre erreur sur le nom d’un paquet empêchera live-build de créer l’image et mettra un terme au processus de création.
Pour retirer un paquet, il suffit de retirer son nom.
Création du dossier personnel
Étant donné que nous allons créer un utilisateur sur notre debian personnalisée, il est essentiel de lui attribuer un home ainsi que l’architecture reliée.
L’architecture devra être placée dans /skel, qui est lui même à l’intérieur de config/includes.chroot/etc/. Il faudra, comme tout à l’heure, créer les dossiers nécessaires avant les manipulations via la commande :
|
|
Il suffit donc de copier une architecture déjà existante et de la placer dans /includes.chroot/etc/skel comme ci-dessous :
Le résultat doit donc être le suivant :
Création du hook
Un hook permet d’attribuer à l’image certaines spécifités. Le hook sera exécuté lors de la compilation de l’ISO.
Il suffira de créer un nouveau fichier dans /config/hooks/normal/.
Les hooks fonctionnent selon un niveau de priorité, un hook avec une priorité plus faible sera exécuté avant les autres.
Pour définir cette priorité, il suffit de définir des nombres au début de son nom.
Par exemple, un hook appelé 0031-auditor-user-setup.hook.chroot sera exécuté avant 0150-auditor-user-setup.hook.chroot car sa priorité est plus faible.
Dans notre cas, nous allons créer un hook nommé 0031-auditor-user-setupo.hook.chroot qui permettra de :
- Créer le répertoire de notre utilisateur
- Copier les fichiers et dossiers nécessaires au bon fonctionnement de ce répertoire (l’arborescence (Bureau, Documents, etc), les fichiers systèmes propres à l’utilisateur) depuis un utilisateur déjà existant vers notre nouvel utilisateur.
- Créer l’utilisateur et lui attribuer son home ainsi que les droits sur ce dernier
- Définir son mot de passe
- Lui attribuer le rôle de sudoers
- Lui attribuer son shell
- Changer son fond d’écran
Le contenu du hook devra être le suivant :
|
|
Une fois le hook créé, il suffira de l’enregistrer.
Modification du GRUB
La modification du GRUB permet de modifier le menu de démarrage de la machine.
Que ce soit l’image, le nom des sessions ou les paramètres de lancement, il est possible de customiser totalement l’image.
Ici, nous allons créer 3 fichiers différents dans le dossier /config/includes.binary/isolinux :
- Le premier, menu.cfg, permettra de configurer la taille du menu ainsi que les fichiers qui seront pris en compte. Par exemple, c’est dans ce fichier qu’il faudra indiquer que live.cfg et stdmenu.cfg existent pour que ces derniers soient pris en compte.
- Le second, live.cfg, permettra de paramétrer les labels des options de lancement ainsi que leurs paramètres.
- Le troisième, stdmenu.cfg, permettra de configurer l’aspect graphique du menu (couleurs, etc)
Commençons par menu.cfg :
|
|
Puis, live.cfg :
|
|
Ici, on vient rappeler certains paramètres de lancement déjà utilisés dans la commande “lb config”.
On remarque également la présence des paramètres persistence
et persistence-encryption
sur le second label.
Ces paramètres permettent de pouvoir utiliser une partition persistante sur le système.
Nous verrons par la suite comment créer une partition de ce type.
Enfin, stdmenu.cfg
|
|
Il faut également rajouter l’image de fond qui devra être utilisée dans le même dossier que les fichiers de configuration.
Pour que l’image soit reconnue, elle doit impérativement s’appeler “splash.png” et être au format 640x480 pixels.
Aperçu du GRUB modifié avec les paramètres actuels :
Compilation de l’image
Il suffit désormais de lancer la commande pour build l’image :
|
|
La commande prend pas mal de temps (selon les capacités de la machine et de la connexion internet)
Une fois l’image créée, elle se trouve à la racine de notre dossier projet isolive/iso.
Et voilà !
Création d’une persistance
Une persistance permet de garder les données et préférences même après le redémarrage de la machine. Dans le cas de nos audits de sécurité, cette fonctionnalité est bien pratique pour garder des notes importantes ou des rapports techniques.
Nous allons ici détailler la procédure pour créer une persistance.
Néanmoins, et selon votre support, le disque utilisé pourrait être différent.
Le nom de la partition est également libre. Néanmoins, le paramètre “persistence” qui sera utilisé et nommé devra toujours être nommé dans sa version anglaise et non française (à savoir persistence et non persistance)
Tout d’abord, il faut vérifier les partitions via la commande :
|
|
On va donc venir sélectionner le disque sdb, étant donné que c’est sur ce dernier que nous voulons créer la partition chiffré.
On effectue la commande :
|
|
Puis on va définir les paramètres de la nouvelle partition via les options suivantes :
- n : nouvelle partition
- p : partition primaire
- premier secteur, dernier secteur : étant donné que le disque est vide, on va utiliser son intégralité pour créer cette partition chiffré, il n’y a donc pas besoin de donner de valeurs
- w : écrire sur le disque
La partition a bien été créée !
On va désormais mettre en place le chiffrement de la partition via la commande :
|
|
Cette commande doit être confirmée par l’écriture du mot “YES” en majuscule et doit être agrémenté par la suite d’une passphrase (qui permettra le déchiffrement).
Une fois le chiffrement en place, on va venir créer un lien pour ouvrir le container vers la partition via la commande :
|
|
On va ensuite remplir le container de zéros afin de l’effacer complètement :
|
|
Puis, on va formater la partition :
|
|
Enfin, on va ajouter un label à la partition pour mieux la reconnaître :
|
|
Désormais, il ne nous reste plus qu’à monter la partition via les commandes :
|
|
Et à ajouter le fichier persistence.conf, qui permettra à cette partition d’être reconnue comme telle :
|
|
Pour conclure, il suffit de démonter la partition et fermer le lien
|
|
Utilisation de la persistance
Pour utiliser la partition il suffira de lancer la machine virtuelle en mode persistance :
Puis de rentrer la passphrase lorsque cette dernière est demandée :
Une fois la passphrase rentrée, le système se lancera normalement !