IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Monter un conteneur crypté via un script


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Par défaut Monter un conteneur crypté via un script
    Salut à tous,
    Alors voilà je pose le décor. J'ai une règle UDev qui à chaque connexion d'un périphérique précis (ici ma clef usb) fait appel à un script.
    J'ai un debian live sur ma clef avec un /home crypté, donc 2 partitions: 1 système et 1 données, le /home crypté est dans un conteneur .img
    Ainsi à la connexion de ma clef sur mon poste fixe, le script monte les partitions et doit aussi décrypter le conteneur pour monter son contenu dans un dossier (ici le contenu du /home) pour le synchroniser avec un dossier sur mon pc. Grâce à ça je concerve les traces de mon travail accomplis lors de mes déplacements.
    Alors ici tout est censé marcher mais il y a un soucis lors de l'ouverture du conteneur. A noter que le même script exécuté à la main fonctionne parfaitement (lancé dans un terminal), du moins le bout de code qui fonctionne mal.
    J'ai isolé le problème qui se situe à ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			echo $mdp|sudo /sbin/cryptsetup luksOpen $loop 
     
    			# Monter
    			sudo mount -o loop /dev/mapper/LUKS $CRYPT_MOUNT
    Ce qui est bizare c'est le luks est apparement ouvert mais il n'est pas monté
    J'ai d'abord pensé à un problème sur les droits d'éxécution mais j'ai mis un gros chmod 777 bourrin dessus et pareil :/
    j'ai même mis un setuid sur "cryptsetup", le script lui même et rien...
    Honnètement je ne sais plus où donner de la tête donc si vous avez une petite idée je dis pas non :-)

    Merci d'avance à tous

    PS: je vous poste l'intégralité du script pour mieux visualiser ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    #! /bin/bash
     
    ######################################################################################
    # Script de gestion de connexion et sauvegarde du /home de la clef sur le poste fixe #
    ######################################################################################
     
     
    #------------------------------------------------------------------------------------#
    # Fonction									     #
    #------------------------------------------------------------------------------------#
     
    afficheTaille () {
     taille=$(sed '/\./! s/^.*$/&.00/' <<< $1)
      i=1
      while [[ ${#taille} -ge 7 ]]; do
        taille=$(bc <<< "scale=2;$taille/1024")
        ((i+=1))
      done
     
      case $i in
        1) taille+=" octets" ;;
        2) taille+=" Ko" ;;
        3) taille+=" Mo" ;;
        4) taille+=" Go" ;;
      esac
     
      echo $taille
    }
     
    #-------------------------------------------------------------------------------------#
    # Déclaration des variables							      #
    #-------------------------------------------------------------------------------------#
     
    # Paramètres d'identification de la clef
    DEVTYPE="usb"
    ID_SERIAL_SHORT="A500000000026452"
    KEY_SYNC=/dev/LiveUSB2
    USERNAME="leseb" # Indispensable pour l'affichage des fenêtres Zenity
     
     
    # Répertoire source, destination, de montage de LiveUSB2, du montage du volume crypté, de backup du .img
    SRC_DIR=/home/leseb/MOUNT/
    DEST_DIR=/home/leseb/udevsync/
    MONT_POINT=/home/leseb/MOUNT/
    CRYPT_MOUNT=/home/leseb/CRYPT/
    CONTENEUR=/home/leseb/MOUNT/luks-home.img
    BKP_CONT=/home/leseb/Backup_IMG/
     
     
    # Fichiers de log horodatés
    BKP_DATE=`date +"%Y-%m-%d_%H-%M"`
    LOG_FILE=/tmp/Logs_Sync/sdBackup_${BKP_DATE}.log
    BKP_LOG_FILE=$DEST_DIR/Logs_Sync/sdBackup_${BKP_DATE}.log
    RSYNC_ERR=/tmp/rsync.err
     
     
    #------------------------------------------------------------------------------------#
    # Algo										     #
    #------------------------------------------------------------------------------------#
     
    # Initialisation du fichier de log
    echo "Backup du $BKP_DATE" >> $LOG_FILE
    echo "Début à `date +'%H:%M:%S'`" >> $LOG_FILE
     
    # Action à l'insertion de la clef
    if [ "$ID_FS_TYPE" = "ext2" ] ; then  # Variable de UDev pour l'insertion de clef
     
    	# Montage de la partition contenant le volume crypté
    	mount $KEY_SYNC $MONT_POINT
     
    	# Demande de synchronisation
    	su - ${USERNAME} -c "DISPLAY=:0.0 zenity --question  --title='Bienvenue' --text='Clef montée. \nVoulez-vous synchroniser le <b>/home</b> de la clef ?'"
     
    	if [ "$?" = 0 ]; then # Si on clique sur "Valider"
     
    		if [ -f $CONTENEUR ] ; then # vérifie si le volume crypté existe
     
    			# Cherche un loop libre
    			loop=$(losetup -f)
    			/sbin/losetup $loop $CONTENEUR
     
    			# Ouverture du conteneur et saisie de mot de passe
    			mdp=$(su - ${USERNAME} -c "DISPLAY=:0.0 zenity --entry \
    					--title='Ouverture du conteneur chiffré' \
    					--text='Entrez le mot de passe pour ouvrir le conteneur chiffré' \
    					--hide-text")
     
    			# On envoie le mdp dans la commande
    			echo $mdp|sudo /sbin/cryptsetup luksOpen $loop LUKS
     
    			# On monte le contenu du conteneur dans un dossier
    			sudo mount -o loop /dev/mapper/LUKS $CRYPT_MOUNT 
     
    			# Synchro + barre de progression
    			echo "0" > nb
    			DEBUT=$(date +%s)
     
    			rsync -av --delete --ignore-errors --force --progress $CRYPT_MOUNT/ $DEST_DIR/ 2>>$RSYNC_ERR | sed '
    			/to-check=/! {
    			/^sending/  {d;q;}
    			/\/$/       {d;q;}
    			/^sent/     {s/^.*$/echo "&" \>\/tmp\/rapport\.txt/e;d;q;};
    			/^total/    {s/^.*$/echo "&" \>\>\/tmp\/rapport\.txt/e;d;q;};
    			/^.\{43\}/  {s/\(^.\{20\}\).*\(.\{20\}$\)/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "\1\[...\]\2" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
    			/^.\{43\}/! {s/^.*$/echo \$\(\(\$\(cat nb\) + 1\)\) \> nb; echo "&" \>\/tmp\/svgrd_sed\.txt/e;d;q;};
    			}
    			/to-check=/ {
    			s/.*=\(.*\)\/\(.*\))/echo "#`echo "scale=2;\(\2-\1\)\*100\/\2" | bc | cut -d\. -f1`% (\$\(\(\2 - \1\)\) fichiers sur \2\) > \$\(cat \/tmp\/svgrd_sed\.txt\)"\; echo "scale=2;\(\2-\1\)\*100\/\2" | bc/e
    			}
    			' | su - ${USERNAME} -c "DISPLAY=:0.0 zenity --progress --width=580 --title='Synchronisation' --text='Initialisation de la sauvegarde...' --percentage=0 --auto-close"
     
    			FIN=$(date +%s)
    			TEMPS=$(($FIN-$DEBUT))
    			TP_HEU=$(sed 's/^.$/0&/' <<< $(($TEMPS/3600)))
    			TP_TMP=$(($TEMPS%3600))
    			TP_MIN=$(sed 's/^.$/0&/' <<< $(($TP_TMP/60)))
    			TP_SEC=$(sed 's/^.$/0&/' <<< $(($TP_TMP%60)))
    			TP=$(echo "$TP_HEU:$TP_MIN:$TP_SEC")
     
    			# Vérifie la sortie de rsync
    			ERR=$(cat $RSYNC_ERR)
    			if [[ ${#ERR} -ne 0 ]]; then
    				su - ${USERNAME} -c "DISPLAY=:0.0 zenity --error --title='Erreur de copie' --text='Problème lors de la sauvegarde du répertoire <b>$MOUNT_POINT</b>.\n\n<b><span color='red'>$ERR</span></b>.'"
    				rm $RSYNC_ERR
    			else
    				NB_FICH=$(cat nb)
    				ENVOI=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f2))
    				VITESS=$(afficheTaille $(cat /tmp/rapport.txt | grep sent | cut -d' ' -f9))
    				su - ${USERNAME} -c "DISPLAY=:0.0 zenity --info --title='Terminé' --text='Sauvegarde du répertoire\n<b>$CRYPT_MOUNT</b> effectuée avec succès.\n$NB_FICH fichiers synchronisés\nTemps:\t$TP\nTransfert:\t$VITESS/sec\nTotal transféré: $ENVOI'"
    				rm nb
    			fi    
     
    			# Copie du log sur le répertoire de synchro
    			cp -f $LOG_FILE $BKP_LOG_FILE
     
    			# Précaution de backup du conteneur crypté
    			cp $CONTENEUR $BKP_CONT 
    		else
    			su - ${USERNAME} -c "DISPLAY=:0.0 zenity --error \
    			--title='Erreur' \
    			--text='Aucun volume crypté trouvé !'"
     
    		fi
     
     
    	fi
    fi
     
    if [ "$ACTION" = "remove" ] ; then  # Variable de UDev
     
    	# Démonter le volume crypté
    	umount $CRYPT_MOUNT
     
    	# Fermer le volume crypté
    	sudo /sbin/cryptsetup luksClose LUKS
     
    	# Libérer le loop
    	/sbin/losetup -d $loop
     
    	# Démontage de la clef
    	umount -f $KEY_SYNC >> $LOG_FILE
    	echo "Clef "$ID_MODEL" démontée ("$ACTION")" >> $LOG_FILE
    	su - ${USERNAME} -c "DISPLAY=:0.0 zenity --info  --title='Au revoir' --text='Clef démontée avec succès.'"
     
    fi
     
    #------------------------------------------------------------------------------------#
    # EOF										     #
    #------------------------------------------------------------------------------------#

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Par défaut
    Grosse rectification !
    Je viens de me rendre compte que TOUT fonctionne !
    Seulement la synchro démarche exactement 3minutes après avoir accepté la demande de synchro.
    Je ne sais pas d'où peut venir cette latence donc si vous avez des idées :-)

Discussions similaires

  1. Ouverture d'une image via un script PHP
    Par passie dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 24/01/2006, 17h10
  2. Erreur 1045 impossible de se connecter à mysql via un script
    Par julian-brokendolls dans le forum Installation
    Réponses: 7
    Dernier message: 05/01/2006, 04h23
  3. Exporter une variable via un script sous KSH
    Par Snivel dans le forum Linux
    Réponses: 4
    Dernier message: 09/12/2005, 16h44
  4. Ajout de champs à une table via un script ?
    Par mathias dans le forum Access
    Réponses: 1
    Dernier message: 05/12/2005, 23h02
  5. Réponses: 4
    Dernier message: 16/07/2004, 09h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo