Page mise à jour le 30 avril 2024
Quelques mots sur LUKS
LUKS, pour Linux Unified Key Setup, est le standard GNU/Linux pour le chiffrement des disques.
Une partition chiffrée est chiffrée via une clé, clé qui est générée lors de la création de la partition chiffrée et qui est protégée par un mot de passe (appelée phrase secrète).
LUKS a la particularité de supporter de multiples clés pour un même volume chiffré (ce qui permet de partager un accès sans divulger sa propre clé et/ou son propre mot de passe, de créer une clé/mot de passe de secours, …).
Une des utilisations possibles (que je conseille et détaille par la suite) et de laisser LUKS stocker les clés et donc de n’utiliser que le mot de passe lié à une clé pour déverrouiller une partition chiffrée.
La plupart des commandes suivantes sont a exécuter avec les droits root.
Installer les packets utiles
apt-get install cryptsetup
Chiffrements disponibles
Pour connaitre les paramètres de chiffrement compilés par défaut sur votre système (dont le type et la taille de la clé) :
cryptsetup --help
Default compiled-in device cipher parameters: loop-AES: aes, Key 256 bits plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160 LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha256, RNG: /dev/urandom
Créer une partition chiffrée avec LUKS
Repérer le disque (et ses actuelles partitions)
Repérer la partition à chiffrer, ou le disque sur laquelle elle est située si l’on veut modifier les partitions de ce disque.
fdisk -l # ou tree /dev/disk # ou, si la partition était montée : mount
Par la suite, le disque que je prend comme exemple est /dev/sdX sur lequel je chiffre la partition /dev/sdX1
Démonter la partition si elle était montée
Nous allons modifier la partition ( création d’une partition chiffrée, formatage), il est donc nécessaire de la démonter.
Si vous souhaitez modifier la table des partitions du disque, il est nécessaire de démonter toutes les partitions du disque.
umount /dev/sdX1 # ou umount /mnt/mount_point_of_sdX1
Editer la table des partitions du disque (optionnel)
Si vous souhaitez modifier la table des partitions du disque, voila la marche à suivre. Il est bien entendu possible de ne chiffrer que certaines partitions d’un même disque.
# lancer fdisk pour le disque # l'argument est le périphérique disque (/dev/sdX dans mes exemples) # et non un lien (/dev/disk/by-label/...) sudo fdisk /dev/sdX # commandes fdisk : # 'm' afficher l'aide m # 'p' afficher la table de partitions p # vérifier la table actuelle # 'd' supprimer la partition d # supprimer les partitions existantes # 'g' créer une nouvelle table vide de partitions GPT g # GPT est le standard à utiliser # 'n' ajouter une nouvelle partition n # entrer un numéro et une taille quand demandé # 'w' écrire la table sur le disque et quitter w
Créer une partition LUKS sur la partition
-
cryptsetup --verbose luksFormat --verify-passphrase /dev/sdX1 # WARNING! # ======== # Cette action écrasera définitivement les données sur /dev/sdX1. # # Are you sure? (Type uppercase yes): YES # Saisissez la phrase secrète: # Vérifiez la phrase secrète: # Opération réussie.
Choisissez une phrase secrète digne de sécurité !
Pour choisir une clé de taille spécifique, utiliser l’argument
– – key-size
Attention aux ressources CPU nécessaires ! A mon sens, la valeur par défaut (256 bits) est suffisante.Si la partition est un volume RAID
Attention, si vous chiffrez un volume RAID (type md RAID array), vous devriez ajouter l’argument – – align-payload=valeur : cela permet d’aligner les blocs chiffrés avec les bandes (stripes) du RAID
valeur = nombre de secteurs de 512 octets (bytes) dans une bande (stripe) RAID.
valeur = [RAID chunk size] x [Nbre disques utiles dans grappe] / 512
- RAID chunk size (en octets = bytes)
$ mdadm –detail /dev/mdX | grep Chunk pour l’obtenir.
Si donné en K, multiplier par 1024 ; - nombre de disques utiles dans la grappe RAID
N/2 pour RAID 1, N-1 for RAID 5 ; - 512 octets (bytes) par secteur.
Exemple :
- /dev/md3 : 4 HDD de 2 TB en RAID 5
# mdadm --detail /dev/md3 [...] Raid Level : raid5 Raid Devices : 4 Total Devices : 4 [...] State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 [...] Layout : left-symmetric Chunk Size : 512K [...]
- valeur = 512 x 1024 x (4-1) / 512 = 3072
- Consultez l’aide de mdadm ou ce site pour plus d’informations.
Ouvrir la partition chiffrée
Avant de formater, il est nécessaire d’ouvrir la partition chiffrée (et il faudra le faire à chaque démarrage ou après la fermeture de la partition chiffrée).
cryptsetup -v luksOpen /dev/sdX1 monVolume
Le mot de passe vous est demandé.
Attention !
A présent, pour accéder au contenu de la partition chiffrée /dev/sdX1, il ne faut pas utiliser /dev/sdX1 mais le mapper créé lors de l’ouverture de la partition chiffrée : /dev/mapper/monVolume
(le nom du mapper a été spécifié lors de l’ouverture avec cryptsetup luksOpen /dev/sdX1 monVolume).
Formater la partition chiffrée
Maintenant que la partition est ouverte et que l’on y accède via le mapper, nous pouvons la formater.
mke2fs -t ext4 -L monVolume /dev/mapper/monVolume
Voila ! Il est à présent possible de monter le mapper, et de se servir de notre partition chiffrée. Voir ci-dessous.
Ouvrir puis montrer la partition chiffrée
Ouvrir la partition chiffrée
cryptsetup -v luksOpen /dev/sdX1 monVolume
- /dev/sdX1 est la partition sur laquelle a été créée la partition chiffrée LUKS ;
- monVolume est le nom donné au mapper ;
- Bien-sûr, le mot de passe vous est demandé.
Attention !
Pour accéder au contenu de la partition chiffrée /dev/sdX1, il ne faut pas utiliser /dev/sdX1 mais le mapper : /dev/mapper/monVolume
Monter le mapper de la partition chiffrée
# Création du point de montage (une fois pour toute) mkdir /mnt/monVolume # Montage du mapper mount -v /dev/mapper/monVolume /mnt/monVolume
Démontrer puis fermer la partition chiffrée
Démonter le mapper de la partition chiffrée
# Démontage du mapper umount -v /dev/mapper/monVolume # ou umount -v /mnt/monVolume
Fermer la partition chiffrée
cryptsetup -v luksClose monVolume
Scripts bash
Ouvrir une partition chiffrée
Afficher ce script au format texte
#!/bin/bash ####################### # Info # ####################### SCRIPT_NAME=$(echo $0 | sed "s/^.*\///g") #sed in order to only keep script's name, without dir path where script is SCRIPT_AUTHOR="Valérian REITHINGER (@:valerian@reithinger.fr ; web:www.valerian.reithinger.fr)" SCRIPT_VERSION="1.1 (04/jan/2018)" SCRIPT_QUICK_DESCRIPTION="Mount a Luks encrypted filesystem" SCRIPT_ARG_MIN_NB=3 # optional arg(s) not counted SCRIPT_ARG_MAX_NB=4 # optional arg(s) not counted ####################### # Versions # ####################### # 1.0 (25/apr/2017) created # 1.1 (04/jan/2018) light the code ####################### # Dependencies # ####################### # * 'cryptsetup' command, tested ####################### # Config # ####################### DEBUG=false ####################### # To Do # ####################### # ####################### # Tests # ####################### # On Debian with V1.1 : OK ############################################################################################ # MAIN sub-Functions # ############################################################################################ ###################################### # check dependencies # ###################################### CheckDependencies() { # cryptsetup if hash cryptsetup 2>/dev/null; then if $DEBUG; then EchoDebugMsg "CheckDependencies(): 'cryptsetup' founded"; fi else EchoErrorMsg "no 'cryptsetup' command was found on this system!" exit -1 fi } ############################### # DisplayHelpMsg # ############################### # Display help msg DisplayHelpMsg() { echo "$SCRIPT_NAME: $SCRIPT_QUICK_DESCRIPTION" echo echo "Usage: $SCRIPT_NAME /encrypted_dev 'mapper_name' /mount_point [key]" echo echo " /encrypted_dev : path of the encrypted device (disk/partition) to open" echo " 'mapper_name' : name of the mapper which will manage the crypt disk (free label)" echo " /mount_point : path where the opened encrypted disk will be mount (must exist!) " echo " key (optionnal) : key to unlock the Luks device" echo echo "[optional args]" echo " -v or --verbose : verbose mode" echo " -q or --quiet : quiet mode (do not display anything, except warnings or errors)" echo echo "[other args]" echo " -h or --help : display this help message" echo " --version : display script version" echo echo "Example: $ $SCRIPT_NAME /dev/disk/by-uuid/10d0f53c-9545-47b1-8a1b-e309d36dada8 ext_HDD_4TB_LaCie /mnt/ext_HDD_4TB_LaCie" echo echo "Location: $0" echo "Version: $SCRIPT_VERSION" echo "Author: $SCRIPT_AUTHOR" } ################################### # Print script version # ################################### DisplayDescriptionMsg() { echo $SCRIPT_QUICK_DESCRIPTION } ############################### # DisplayVersionMsg # ############################### DisplayVersionMsg() { echo $SCRIPT_VERSION } ############################### # CheckArgs # ############################### CheckArgs() { #Check args (nb needed, help, version, ...) ARG_NB=$1 #nb of args given to this script TAB_ARGS=("${@}") #array of args TAB_ARGS=("${TAB_ARGS[@]:1}") #(need to remove 1st element = nb of args) if $DEBUG; then EchoDebugMsg "$ARG_NB arg(s) given : ${TAB_ARGS[@]}"; fi #------------------------------ # Init variables - #------------------------------ VERBOSE=false QUIET_MODE=false NOToptARGS=0 CRYPTDEVICE="" MAPPERNAME="" MOUNTPOINT="" LUKSKEY="" #------------------------------ # Loop on args - #------------------------------ for arg in "${TAB_ARGS[@]}" do if $DEBUG; then EchoDebugMsg "arg: $arg" ; fi case "$arg" in #------------------------------ # OPT args - #------------------------------ #Help asked ? "--help"|"-h") DisplayHelpMsg exit 0 ;; #Version asked ? "--version") DisplayVersionMsg exit 0 ;; #Description asked ? "--description") DisplayDescriptionMsg exit 0 ;; #verbose ? "--verbose"|"-v") VERBOSE=true ;; #quiet mode "--quiet"|"-q") QUIET_MODE=true ;; #recursive mode "--recursive"|"-r") RECURSIVE_MODE=true ;; #------------------------------ # not OPT args - #------------------------------ *) ((NOToptARGS++)) if [ $NOToptARGS -eq 1 ]; then CRYPTDEVICE=$arg; elif [ $NOToptARGS -eq 2 ]; then MAPPERNAME=$arg; elif [ $NOToptARGS -eq 3 ]; then MOUNTPOINT=$arg; elif [ $NOToptARGS -eq 4 ]; then LUKSKEY=$arg; else : ; fi ;; esac done #-------------------------------- # verbose mode is stronger than quiet mode #-------------------------------- if $VERBOSE; then if $QUIET_MODE; then QUIET_MODE=false EchoWarningMsg "you asked both verbose and quiet mode, verbose mode is stronger" fi fi #-------------------------------- # check min/max of not opt args - #-------------------------------- if [ $NOToptARGS -lt $SCRIPT_ARG_MIN_NB ] ; then EchoErrorMsg "not enough arguments given! ($ARG_NB<$SCRIPT_ARG_MIN_NB=min). Display help:" DisplayHelpMsg; exit 1 elif [ $NOToptARGS -gt $SCRIPT_ARG_MAX_NB ] ; then EchoErrorMsg "to much arguments given! ($ARG_NB>$SCRIPT_ARG_MAX_NB=max, see help with -h)" exit 1 fi if $DEBUG; then echo " -> VERBOSE = $VERBOSE" echo " -> QUIET_MODE = $QUIET_MODE" echo " -> CRYPTDEVICE = $CRYPTDEVICE" echo " -> MAPPERNAME = $MAPPERNAME" echo " -> MOUNTPOINT = $MOUNTPOINT" echo " -> LUKSKEY = $LUKSKEY" fi } ############################# # CheckCRYPTDEVICE # ############################# CheckCryptedDevice() { if $VERBOSE; then EchoVerboseMsg "Checking encrypted device: $CRYPTDEVICE"; fi #Exists ? if [[ -e $CRYPTDEVICE ]]; then if $VERBOSE ; then EchoVerboseMsg " -> OK, exists"; fi else EchoErrorMsg "Encrypted device '$CRYPTDEVICE' do not exists / is not readable" exit -1 fi } ############################# # CheckMapper # ############################# CheckMapper() { MAPPERPATH="/dev/mapper/$MAPPERNAME" if [ "$1" == "mustNOTexist" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mapper: $MAPPERPATH (must NOT exist)"; fi if [ -e $MAPPERPATH ]; then EchoErrorMsg "Mapper $MAPPERPATH ever exist" exit -1 else if $VERBOSE ; then EchoVerboseMsg " -> OK, do NOT exist"; fi fi elif [ "$1" == "mustexist" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mapper: $MAPPERPATH (must exist)"; fi if ! [ -e $MAPPERPATH ]; then EchoErrorMsg "Mapper $MAPPERPATH do NOT exist" exit -1 else if $VERBOSE ; then EchoVerboseMsg " -> OK, exist"; fi fi else EchoErrorMsg "CheckMapper(): unknown argument '$1'" exit 1 fi } ############################# # CheckMOUNTPOINT # ############################# CheckMountPoint() { if $VERBOSE; then EchoVerboseMsg "Checking asked mount point: $MOUNTPOINT"; fi if [[ -d $MOUNTPOINT ]]; then if $VERBOSE ; then EchoVerboseMsg " -> OK, exists"; fi else EchoErrorMsg "Asked mount point '$MOUNTPOINT' do not exists / is not writable / is not a directory" exit -1 fi } ############################# # CheckMOUNT # ############################# CheckMount() { if [ "$1" == "mustNOTbeMounted" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mount: $MOUNTPOINT (must NOT be mounted)"; fi if [ $(mount | grep -c ${MOUNTPOINT::-1}) = 1 ]; then EchoErrorMsg "$MOUNTPOINT ever mounted!" exit -1 else if $VERBOSE ; then EchoVerboseMsg " -> OK, is NOT mounted"; fi fi elif [ "$1" == "mustbeMounted" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mount: $MOUNTPOINT (must be mounted)"; fi if [ $(mount | grep -c ${MOUNTPOINT::-1}) = 1 ]; then if $VERBOSE ; then EchoVerboseMsg " -> OK, is mounted"; fi else EchoErrorMsg "$MOUNTPOINT is NOT mounted!" exit -1 fi else EchoErrorMsg "CheckMount(): unknown argument '$1'" exit 1 fi } ###################### # EchoFormatedString # ###################### EchoFormatedString() { #EchoFormatedString "the string" thelength 'm'/'l'/'r' (middle/left/right) string=$1 lengthAsked=$2 alignment=$3 if [ $# -eq 0 ]; then if [ "$4" = "nonewline" ] ; then echo ""; else echo -n ""; fi return elif [ $# -eq 1 ]; then if [ "$4" = "nonewline" ] ; then echo "$string"; else echo -n "$string"; fi return elif [ $# -eq 2 ]; then FormatStringLength "$string" "$lengthAsked" 'l' if [ "$4" = "nonewline" ] ; then echo "$FORMATEDSTRING"; else echo -n "$FORMATEDSTRING"; fi return else FormatStringLength "$string" "$lengthAsked" "$alignment" if [ "$4" = "nonewline" ] ; then echo "$FORMATEDSTRING"; else echo -n "$FORMATEDSTRING"; fi return fi } ###################### # FormatStringLength # ###################### FormatStringLength() { # FormatStringLength "the string" thelength 'm'/'l'/'r' (middle/left/right) string=$1 lengthAsked=$2 alignment=$3 if [ $# -eq 0 ]; then FORMATEDSTRING="" return elif [ $# -eq 1 ]; then FORMATEDSTRING="$string" return fi sizeoforiginalstring=${#string} if [ $sizeoforiginalstring -ge $lengthAsked ]; then FORMATEDSTRING="$string" return fi if [ "$alignment" = "m" ] ; then before=true while [ ${#string} -lt $lengthAsked ]; do if $before ; then before=false string=" $string" else before=true string="$string " fi done elif [ "$alignment" == "r" ]; then while [ ${#string} -lt $lengthAsked ]; do string=" $string" done else #[ "$alignment" == "l" ]; then while [ ${#string} -lt $lengthAsked ]; do string="$string " done fi FORMATEDSTRING="$string" } ############################# # EchoTXTColors # ############################# EchoInGreen() { echo -n -e "\033[39;32;49m" #$(BashTextStyles green) } EchoInRed() { echo -n -e "\033[39;31;49m" #$(BashTextStyles red) } EchoInYellow() { echo -n -e "\033[39;33;49m" #$(BashTextStyles yellow) } EchoInCyan() { echo -n -e "\033[39;36;49m" #$(BashTextStyles cyan) } EchoInLBlue() { echo -n -e "\033[39;94;49m" #$(BashTextStyles light-blue) } EchoInLBlack() { echo -n -e "\033[39;90;49m" #$(BashTextStyles light-black) } EchoInDefaultStyle() { echo -n -e "\033[39;0;49m" #$(BashTextStyles default) } ############################# # EchoXXXXXMsg # ############################# EchoErrorMsg() { EchoInRed echo -n "[ERROR] " EchoInDefaultStyle echo "$1" } EchoWarningMsg() { EchoInYellow echo -n "[WARNING] " EchoInDefaultStyle echo "$1" } EchoDebugMsg() { EchoInLBlack echo -n "[DEBUG] " EchoInDefaultStyle echo "$1" } EchoVerboseMsg() { EchoInLBlue echo -n "[VERBOSE] " EchoInDefaultStyle echo "$1" } EchoOKMsg() { EchoInGreen echo -n "[OK] " EchoInDefaultStyle echo "$1" } ############################################################################################ # " MAIN " # ############################################################################################ #Check Dependencies CheckDependencies #Check args (nb needed, help, version, ...) CheckArgs $# $* CheckCryptedDevice CheckMapper "mustNOTexist" CheckMount "mustNOTbeMounted" CheckMountPoint verboseArg="" if $VERBOSE; then verboseArg="-v"; fi # luksOpen if ! [ "$LUKSKEY" == "" ]; then if $VERBOSE; then EchoVerboseMsg "Trying to open $CRYPTDEVICE with 'crypsetup luksOpen' to mapper $MAPPERNAME (key given in arg)"; fi echo $LUKSKEY | cryptsetup -q $verboseArg luksOpen $CRYPTDEVICE $MAPPERNAME else if $VERBOSE; then EchoVerboseMsg "Trying to open $CRYPTDEVICE with 'crypsetup luksOpen' to mapper $MAPPERNAME (key going to be asked)"; fi cryptsetup -q $verboseArg luksOpen $CRYPTDEVICE $MAPPERNAME fi CheckMapper "mustexist" # mount if $VERBOSE; then EchoVerboseMsg "Trying to mount $MAPPERPATH on $MOUNTPOINT ..."; fi mount $verboseARg $MAPPERPATH $MOUNTPOINT CheckMount "mustbeMounted" if $QUIET_MODE; then : else EchoOKMsg "$CRYPTDEVICE mounted on $MOUNTPOINT (via mapper $MAPPERPATH)" fi exit 0
Fermer une partition chiffrée
Afficher ce script au format texte
#!/bin/bash ####################### # Info # ####################### SCRIPT_NAME=$(echo $0 | sed "s/^.*\///g") #sed in order to only keep script's name, without dir path where script is SCRIPT_AUTHOR="Valérian REITHINGER (@:valerian@reithinger.fr ; web:www.valerian.reithinger.fr)" SCRIPT_VERSION="1.1 (04/jan/2018)" SCRIPT_QUICK_DESCRIPTION="Unmount a Luks encrypted filesystem" SCRIPT_ARG_MIN_NB=1 # optional arg(s) not counted SCRIPT_ARG_MAX_NB=1 # optional arg(s) not counted ####################### # Versions # ####################### # 1.0 (25/apr/2017) created # 1.1 (04/jan/2018) light the code ####################### # Dependencies # ####################### # * 'cryptsetup' command, tested ####################### # Config # ####################### DEBUG=false ####################### # To Do # ####################### # ####################### # Tests # ####################### # On Debian with V1.1 : OK ############################################################################################ # MAIN sub-Functions # ############################################################################################ ###################################### # check dependencies # ###################################### CheckDependencies() { # cryptsetup if hash cryptsetup 2>/dev/null; then if $DEBUG; then EchoDebugMsg "CheckDependencies(): 'cryptsetup' founded"; fi else EchoErrorMsg "no 'cryptsetup' command was found on this system!" exit -1 fi } ############################### # DisplayHelpMsg # ############################### # Display help msg DisplayHelpMsg() { echo "$SCRIPT_NAME: $SCRIPT_QUICK_DESCRIPTION" echo echo "Usage: $SCRIPT_NAME /dev/mapper/name" echo echo " /dev/mapper/name : full path of the mapper which is opened for the crypt disk (and will be closed)" echo echo "[optional args]" echo " -v or --verbose : verbose mode" echo " -q or --quiet : quiet mode (do not display anything, except warnings or errors)" echo echo "[other args]" echo " -h or --help : display this help message" echo " --version : display script version" echo echo "Example: $ $SCRIPT_NAME /dev/mapper/bkpHDDcrypt" echo echo "Location: $0" echo "Version: $SCRIPT_VERSION" echo "Author: $SCRIPT_AUTHOR" } ################################### # Print script version # ################################### DisplayDescriptionMsg() { echo $SCRIPT_QUICK_DESCRIPTION } ############################### # DisplayVersionMsg # ############################### DisplayVersionMsg() { echo $SCRIPT_VERSION } ############################### # CheckArgs # ############################### CheckArgs() { #Check args (nb needed, help, version, ...) ARG_NB=$1 #nb of args given to this script TAB_ARGS=("${@}") #array of args TAB_ARGS=("${TAB_ARGS[@]:1}") #(need to remove 1st element = nb of args) if $DEBUG; then EchoDebugMsg "$ARG_NB arg(s) given : ${TAB_ARGS[@]}"; fi #------------------------------ # Init variables - #------------------------------ VERBOSE=false QUIET_MODE=false NOToptARGS=0 MAPPERPATH="" #------------------------------ # Loop on args - #------------------------------ for arg in "${TAB_ARGS[@]}" do if $DEBUG; then EchoDebugMsg "arg: $arg" ; fi case "$arg" in #------------------------------ # OPT args - #------------------------------ #Help asked ? "--help"|"-h") DisplayHelpMsg exit 0 ;; #Version asked ? "--version") DisplayVersionMsg exit 0 ;; #Description asked ? "--description") DisplayDescriptionMsg exit 0 ;; #verbose ? "--verbose"|"-v") VERBOSE=true ;; #quiet mode "--quiet"|"-q") QUIET_MODE=true ;; #recursive mode "--recursive"|"-r") RECURSIVE_MODE=true ;; #------------------------------ # not OPT args - #------------------------------ *) ((NOToptARGS++)) if [ $NOToptARGS -eq 1 ]; then MAPPERPATH=$arg; else : ; fi ;; esac done #-------------------------------- # verbose mode is stronger than quiet mode #-------------------------------- if $VERBOSE; then if $QUIET_MODE; then QUIET_MODE=false EchoWarningMsg "you asked both verbose and quiet mode, verbose mode is stronger" fi fi #-------------------------------- # check min/max of not opt args - #-------------------------------- if [ $NOToptARGS -lt $SCRIPT_ARG_MIN_NB ] ; then EchoErrorMsg "not enough arguments given! ($ARG_NB<$SCRIPT_ARG_MIN_NB=min). Display help:" DisplayHelpMsg; exit 1 elif [ $NOToptARGS -gt $SCRIPT_ARG_MAX_NB ] ; then EchoErrorMsg "to much arguments given! ($ARG_NB>$SCRIPT_ARG_MAX_NB=max, see help with -h)" exit 1 fi if $DEBUG; then echo " -> MAPPERPATH = $MAPPERPATH" fi } ############################# # CheckMapper # ############################# CheckMapper() { if [ "$1" == "mustNOTexist" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mapper: $MAPPERPATH (must NOT exist)"; fi if [ -e $MAPPERPATH ]; then EchoErrorMsg "Mapper $MAPPERPATH ever exist" exit -1 else if $VERBOSE ; then EchoVerboseMsg " -> OK, do NOT exist"; fi fi elif [ "$1" == "mustexist" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mapper: $MAPPERPATH (must exist)"; fi if ! [ -e $MAPPERPATH ]; then EchoErrorMsg "Mapper $MAPPERPATH do NOT exist" exit -1 else if $VERBOSE ; then EchoVerboseMsg " -> OK, exist"; fi fi else EchoErrorMsg "CheckMapper(): unknown argument '$1'" exit 1 fi } ############################# # CheckMOUNT # ############################# CheckMount() { MOUNTPOINT=$MAPPERPATH if [ "$1" == "mustNOTbeMounted" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mount: $MOUNTPOINT (must NOT be mounted)"; fi if [ $(mount | grep -c ${MOUNTPOINT::-1}) = 1 ]; then EchoErrorMsg "$MOUNTPOINT ever mounted!" exit -1 else if $VERBOSE ; then EchoVerboseMsg " -> OK, is NOT mounted"; fi fi elif [ "$1" == "mustbeMounted" ]; then if $VERBOSE; then EchoVerboseMsg "Checking mount: $MOUNTPOINT (must be mounted)"; fi if [ $(mount | grep -c ${MOUNTPOINT::-1}) = 1 ]; then if $VERBOSE ; then EchoVerboseMsg " -> OK, is mounted"; fi else EchoErrorMsg "$MOUNTPOINT is NOT mounted!" exit -1 fi else EchoErrorMsg "CheckMount(): unknown argument '$1'" exit 1 fi } ############################# # EchoTXTColors # ############################# EchoInGreen() { echo -n -e "\033[39;32;49m" #$(BashTextStyles green) } EchoInRed() { echo -n -e "\033[39;31;49m" #$(BashTextStyles red) } EchoInYellow() { echo -n -e "\033[39;33;49m" #$(BashTextStyles yellow) } EchoInCyan() { echo -n -e "\033[39;36;49m" #$(BashTextStyles cyan) } EchoInLBlue() { echo -n -e "\033[39;94;49m" #$(BashTextStyles light-blue) } EchoInLBlack() { echo -n -e "\033[39;90;49m" #$(BashTextStyles light-black) } EchoInDefaultStyle() { echo -n -e "\033[39;0;49m" #$(BashTextStyles default) } ############################# # EchoXXXXXMsg # ############################# EchoErrorMsg() { EchoInRed echo -n "[ERROR] " EchoInDefaultStyle echo "$1" } EchoWarningMsg() { EchoInYellow echo -n "[WARNING] " EchoInDefaultStyle echo "$1" } EchoDebugMsg() { EchoInLBlack echo -n "[DEBUG] " EchoInDefaultStyle echo "$1" } EchoVerboseMsg() { EchoInLBlue echo -n "[VERBOSE] " EchoInDefaultStyle echo "$1" } EchoOKMsg() { EchoInGreen echo -n "[OK] " EchoInDefaultStyle echo "$1" } ############################################################################################ # " MAIN " # ############################################################################################ #Check Dependencies CheckDependencies #Check args (nb needed, help, version, ...) CheckArgs $# $* #CheckMount "mustbeMounted" CheckMapper "mustexist" verboseArg="" if $VERBOSE; then verboseArg="-v"; fi # unmount if $VERBOSE; then EchoVerboseMsg "Trying to UNmount $MAPPERPATH ..."; fi umount $verboseARg $MAPPERPATH CheckMount "mustNOTbeMounted" # luksClose if $VERBOSE; then EchoVerboseMsg "Trying to close mapper $MAPPERPATH ..."; fi cryptsetup -q $verboseArg luksClose $MAPPERPATH CheckMapper "mustNOTexist" if $QUIET_MODE; then : else EchoOKMsg "Mapper $MAPPERPATH and it's mount point successfully Close / UNmounted" fi exit 0
Tout simplement merci 🙂