#!/bin/sh # # Script de montage des partition chiffrées # # Version 3.0 # # Changelog : # 1.0 : script initial # 2.0 : suppression de l'utilisation de variable d'environement modifiable par l'utilisateur # 3.0 : Ajout du test de FSCK, du mode batch # Passage en procédure # Analyse des paramètres # #### # Init des variables # init_me() { CRYPTSETUP="/bin/cryptsetup" CRYPTSETUP_OPTIONS="--hash=sha256 --key-size=256 --cipher=aes" # " --verify-passphrase" NAME_USER=`/bin/awk -F ':' '{ if ( $3 == PROCINFO["euid"] ) print $1 }' /etc/passwd` HOME_USER=`/bin/awk -F ':' '{ if ( $3 == PROCINFO["euid"] ) print $6 }' /etc/passwd` PT_MONTAGE=${HOME_USER}/crypt DO_FSCK="NON" SKIP_FSCK="NON" I_AM_A_BATCH="NON" I_ASK_ALWAYS_YES="NON" } help_me() { echo "$0 : Script de montage des partition chiffrées V3.0" echo "Paramètres :" echo " fsck : forcage du FSCK à chaque montage" echo " nofsck : on ne fait pas le FSCK" echo " batch : pas d'interaction avec le tty, si le fsck est necessaire, il sera évité" echo " yes : répond oui à toutes les questions, utilisation avec l'option batch" echo " dump : donne les infos sur le conteneur Luks" echo " help : ..." echo exit 0 } log_me() { # $1 USER # $2 Message logger "MC : $1 - $2" } #### # On continu que si c'est la partition n'est pas déjà montée # check_already_mounted() { /bin/mount | grep "${NAME_USER}_clair" > /dev/null 2>&1 ret=$? if [ $ret -eq 0 ] then echo "Attention /dev/mapper/${NAME_USER}_clair est déjà montée" exit fi } #### # test si le conteneur chiffré a déjà été créé # check_crypt_exist_and_initialized() { if [ ! -e ${PT_MONTAGE}/.conteneur_chiffre_deja_cree ] then # on va créer ce conteneur chiffré log_me ${NAME_USER} "Creation du conteneur chiffré" sudo /usr/local/sbin/InitConteneurChiffre "ootaehaisaem3pha1iez2iWo5theekus" \ "${PT_MONTAGE}" "${NAME_USER}" "${CRYPTSETUP}" "${CRYPTSETUP_OPTIONS} --verify-passphrase" ret=$? [[ $ret -ne 0 ]] && exit fi } #### # Etablisement du device virtuel en clair # create_dm_crypt() { echo "Veuillez entrer la passe-phrase de chiffrement/déchiffrement" #sudo $CRYPTSETUP $CRYPTSETUP_OPTIONS create ${NAME_USER}_clair /dev/mapper/vg_sauv-lv_${NAME_USER}_crypt 2> /dev/null sudo $CRYPTSETUP $CRYPTSETUP_OPTIONS luksOpen /dev/mapper/vg_sauv-lv_${NAME_USER}_crypt ${NAME_USER}_clair ret=$? if [ $ret -ne 0 ] then echo "Problème de Cryptsetup ($ret)" log_me ${NAME_USER} "Problème de Cryptsetup ($ret)" /usr/local/bin/UC exit $ret fi } #### # Montage pour voir si la pass-phrase est correcte # mount_umount() { /bin/mount ${PT_MONTAGE} > /dev/null 2>&1 ret=$? if [ $ret -ne 0 ] then echo "NOK" #sudo $CRYPTSETUP remove ${NAME_USER}_clair sudo $CRYPTSETUP luksClose ${NAME_USER}_clair echo "Mot de passe INCORRECT !!!" log_me ${NAME_USER} "Mot de passe INCORRECT" exit 1 fi /bin/umount ${PT_MONTAGE} > /dev/null 2>&1 } #### # Vérif des paramètres # ##################################################################### #### # Init des variables # init_me if [ "$1" == "help" ] then help_me fi #### # On continu que si c'est la partition n'est pas déjà montée # check_already_mounted #### # test si le conteneur chiffré a déjà été créé # check_crypt_exist_and_initialized #### # Etablisement du device virtuel en clair # create_dm_crypt #### # Montage pour voir si la pass-phrase est correcte # mount_umount #### # FSCK de la partition si demandé ou si necessaire # if [ "$1" = "fsck" ] then DO_FSCK="OUI" else NB_MONTAGE=`sudo /sbin/tune2fs -l /dev/mapper/${NAME_USER}_clair | grep "Mount count" | sed 's/.*://;s/ *//'` NB_MONTAGE_MAX=`sudo /sbin/tune2fs -l /dev/mapper/${NAME_USER}_clair | grep "Maximum mount count" | sed 's/.*://;s/ *//'` echo "Montage N°${NB_MONTAGE}/${NB_MONTAGE_MAX}" if [ ${NB_MONTAGE} -ge ${NB_MONTAGE_MAX} ] then DO_FSCK="OUI" echo "FSCK Necessaire" else DO_FSCK="NON" fi fi if [ "${DO_FSCK}" = "OUI" ] then echo echo "== Attention ==" echo "Il serait nécessaire de faire FSCK sur cette partition : /dev/mapper/${NAME_USER}_clair" echo -n "Voulez vous le faire (O/n) " read reponse if [ "$reponse" = "n" -o "$reponse" = "N" ] then echo "FSCK non lancé, mais redemandé la prochaine fois..." echo DO_FSCK="NON" fi fi if [ "${DO_FSCK}" = "OUI" ] then echo "Lancement de FSCK sur /dev/mapper/${NAME_USER}_clair" echo "Veuillez tapez votre mot de passe de logon (si demandé)" sudo /sbin/fsck -C -T -f -a /dev/mapper/${NAME_USER}_clair sudo /sbin/tune2fs -c 30 /dev/mapper/${NAME_USER}_clair echo fi echo "Montage de ${PT_MONTAGE} ... " /bin/mount ${PT_MONTAGE} > /dev/null 2>&1 ret=$? if [ $ret -ne 0 ] then echo "NOK" #sudo $CRYPTSETUP remove ${NAME_USER}_clair sudo $CRYPTSETUP luksClose ${NAME_USER}_clair echo "Mot de passe INCORRECT !!!" log_me ${NAME_USER} "Mot de passe INCORRECT" exit 3 fi echo "OK" sudo $CRYPTSETUP status ${NAME_USER}_clair df -k ${PT_MONTAGE} log_me ${NAME_USER} "Montage de la partititon OK"