user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 23-04-2022 12:16:47

Archer
Membre

[Script] Chiffrement pratique et autres digressions

Plop,

Bon, j'ai du réinstaller une Arch linux. Pas fait depuis au moins 5ans.
Première surprise, il y a maintenant un script d'installation embarqué dans l'ISO ! yikes  Je croyais que les devs étaient farouchement opposés à ça ?
En plus le script est assez merdique, pas lisible, une sélection de mirroirs plus que bancale, bref autant lire quelques pages d'un wiki ça sera bien mieux.
Bref on s'en fou.

Tout ça pour dire que la personne pour qui j'ai installé cet Arch linux a besoin d'une façon simple d'accéder a un container sécurisé. Alors j'ai fait ça :
D'abord le classique fallocate pour créer le fichier container

 fallocate fallocate -l 50G ~/.personnel_file 

Ensuite les manips habituelles avec cryptsetup, je vais pas vous emmerder à détailler ici, cyrptsetup luksFormat, pour les options de chiffrements (type de format, mot de passe, fichier clé, déni possible, intrication...) choisisez vos armes. Au cas ou
De la lecture
Encore de la lecture
Toujours de la lecture

Enfin, une fois que c'est fait, on a le choix pour l'utiliser. Tout la la main, tout automatique avec une clé et fstab par exemple, mais la on est parti vers un truc plus ludique. Voici un script bash qui sert à (chiffrer | déchiffrer) & (monter | démonter) & (créer | supprimer) un raccourci.

Installation : comme on veut. Le sourcer dans le .qqchrc est une solution
Dépendences : je ne sais pas. Bash>=4 mais c'est pas trop demander, dmsetup si c'est pas déjà installé, au pire test et tu verra
Sécurité : lol no. C'est fait pour être pratique et utilisé dans un contexte maitrisé. Le script est loin d'être foolproof. Juste pratique.
Bonnes pratiques : ??? ça fait loooongtemps que j'ai pas écrit de script, ça a été pondu en 15mins, il y a peut-être (surement) mieux ailleurs. Donc si tu trouves mieux ou que l'envie te prends d'améliorer, fait. Par contre fait pas ta #@$£ si t'as mieux partage. Ou pas, on s'en fou en fait.

#!/bin/bash

woprPersonel_rootfile="/home/USERNAME/.personnel_file"
woprPersonel_mountdir="/mnt/"
woprPersonel_homedir="/home/USERNAME/"
woprPersonel_mountname="Personnel"

woprPersonel() {
    # Si la fonction a été appelée avec des paramètres
    if [ ! -z $1 ]; then
        # Option de montage
        if [ $1 == "o" ] || [ $1 == "open" ]; then
            # Création du répertoire dans /mnt
            sudo mkdir -p "$woprPersonel_mountdir$woprPersonel_mountname"
            
            # Déchiffrement du volume
            if __local_isOpen; then
                echo "[i] Device already open ! Trying to mount..."
            else
                sudo cryptsetup luksOpen $woprPersonel_rootfile "$woprPersonel_mountname"
            fi
            
            # Montage du volume déchiffré
            if __local_isMounted; then
                echo "[i] Device already mounted ! Trying to create shortcut..."
            else
                sudo mount "/dev/mapper/$woprPersonel_mountname" "$woprPersonel_mountdir$woprPersonel_mountname"
            fi
            
            # Création du raccourci dans le /home
            if [[ $(ls -al "$woprPersonel_homedir" | grep "$woprPersonel_mountdir$woprPersonel_mountname" | wc -l) -gt 0 ]]; then
                echo "[i] Shortcut already existing! The script will end now..."
            else
                ln -s "$woprPersonel_mountdir$woprPersonel_mountname" "$woprPersonel_homedir"
            fi
        # Option de démontage
        elif [ $1 == "c" ] || [ $1 == "close" ]; then
            # Démontage du volume déchiffré
            if __local_isMounted; then
                sudo umount "/dev/mapper/$woprPersonel_mountname"
            else
                echo "[i] Device is not mounted ! Restoring encryption..."
            fi
            
            # Chiffrement du volume
            if __local_isOpen; then
                sudo cryptsetup luksClose "/dev/mapper/$woprPersonel_mountname"
            else
                echo "[i] Device already crypted ! Removing directories..."
            fi
            
            # Suppression des répertoires
            if [ -z "$(ls -A "$woprPersonel_mountdir$woprPersonel_mountname")" ]; then
                sudo rmdir "$woprPersonel_mountdir$woprPersonel_mountname"
                rm "$woprPersonel_homedir$woprPersonel_mountname"
            else
                echo "[e] Directory is not empty! The script will end now..."
            fi   
        else
            echo "[i] Please use (o)pen or (c)lose to operate this script"
        fi
    else
        # Si la fonction a été appelée sans paramètres
        if __local_isOpen; then
            echo "[i] Device is open"
        else
            echo "[i] Device is close"
        fi
        
        # Montage du volume déchiffré
        if __local_isMounted; then
            echo "[i] Device is mounted"
        else
            echo "[i] Device is not mounted"
        fi
    fi
}

__local_isOpen() {
    if [[ $(sudo dmsetup ls | grep "$woprPersonel_mountname") ]]; then
        true; return
    else
        false; return
    fi
}
__local_isMounted() {
    if [[ $(findmnt -M "$woprPersonel_mountdir$woprPersonel_mountname") ]]; then
        true; return
    else
        false; return
    fi
}

Dernière modification par Archer (23-04-2022 12:30:42)

Hors ligne

Pied de page des forums