Espace d'Asher256

6 Étapes pour Protéger votre Clé USB sous Linux grâce à encfs (+ un script)





Vous balader avec votre petite clé USB contenant vos données personnelles ou sensibles (vos projets, votre journal intime, vos photos personnelles, vos mots de passe, etc.)  n’est pas ce qu’il y a de plus  prudent. À cause de sa taille, une clé USB peut facilement être perdue ou volée.

Chiffrer (crypter) et déchiffrer (décrypter) votre clé USB sous Linux

Pour minimiser le risque que vos données personnelles tombent entre de mauvaises mains, il est fortement recommandé de rendre vos fichiers invisibles à tous ceux qui n’ont pas votre mot de passe !

Grâce au script de cet article, nommé  mount-encfs-dir.sh, et à encfs, vous pourrez facilement sécuriser et sauvegarder les données de votre clé USB avec une interface graphique Zenity facile d’accès.

NOTE : La méthode de cet article est surtout dédiée à ceux qui souhaitent avoir un script transporté avec eux, dans leur clé USB, pour déchiffrer leurs fichiers chiffrés avec encfs, en plus de les sauvegarder. Vous avez intérêt à avoir déjà touché à la ligne de commande. Si vous êtes débutant et que vous ne souhaitez qu’utiliser encfs facilement, l’outil Cryptkeeper disponible dans les dépôts est largement suffisant pour vous (et beaucoup plus facile que les étapes de cet article).

Avertissement : les manipulations qui suivent nécessitent des manipulations à effectuer  avec des droits super-utilisateur (root) dont le mauvais usage peut engendrer des effets néfastes pour votre système.

Étape 1. Trouver le répertoire de votre clé USB.

En général, quand vous insérez une clé USB sous Linux, elle est montée dans le répertoire /media/.

Allez à /media/, avec votre gestionnaire de fichiers, et insérez ensuite votre clé USB. Le répertoire qui apparaîtra dans /media/ est celui que nous cherchons, le « répertoire de votre clé USB ».

Pour vous donner un exemple, dans mon cas, quand j’insère ma clé USB, le répertoire MEMUP apparait dans /media/. Le « répertoire de ma clé USB » est donc /media/MEMUP/.

(Vous pouvez également voir tout ce qui est monté avec la commande mount, sans arguments, si vous préférez le terminal)

Étape 2. Les préparatifs : créer votre coffre fort encfs !

Dans cette étape, vous allez exécuter quelques commandes dans le terminal, afin de créer votre « coffre fort », c’est-à-dire le répertoire chiffré contenant vos fichiers impossibles (en théorie) à lire par ceux qui n’ont pas votre mot de passe encfs.

(Si vous êtes curieux, si vous souhaitez en savoir plus sur encfs, je vous recommande de faire quelques recherches sur Internet. Si vous utilisez Ubuntu, le Wiki d’Ubuntu a consacré un article à encfs)

Pour commencer, lancez un terminal et devenez administrateur (root). Dans certaines distributions, comme Ubuntu, la commande « sudo -s » vous rendra administrateur. Dans d’autres distributions, c’est la commande « su » qui aura le même effet. Si vous ne savez pas laquelle choisir, testez les deux, pour choisir celle qui accepte votre mot de passe 😉 .

Une fois que vous serez devenu administrateur (pour le vérifier, la commande « id -u » doit afficher zéro), allez vers le répertoire de votre clé USB avec la commande « cd » :

cd /media/NOM_DE_VOTRE_CLE

(dans mon cas, j’ai remplacé NOM_DE_VOTRE_CLE par MEMUP, comme dit dans l’Étape 1)

Créez deux répertoires dans votre clé USB :

mkdir -p .coffre fichiers

Puis créez un répertoire chiffré avec encfs :

encfs "$(pwd)/.coffre" "$(pwd)/fichiers"

Encfs vous affichera ceci :

Creating new encrypted volume.
Please choose from one of the following options:
 enter "x" for expert configuration mode,
 enter "p" for pre-configured paranoia mode,
 anything else, or an empty line will select standard mode.
?>

Tapez la touche entrée pour que encfs prenne les options par défaut (pas la peine d’être parano et choisir  « p », cela vous imposera plus de contraintes que d’avantages. Mais si vous le souhaitez, pourquoi pas 😉 )

Ensuite, Encfs vous demandera d’entrer votre mot de passe (vous l’utiliserez à chaque fois que vous souhaiterez que vos données chiffrées soient visibles) :

Now you will need to enter a password for your filesystem.
You will need to remember this password, as there is absolutely
no recovery mechanism.  However, the password can be changed
later using encfsctl.

New Encfs Password:
Verify Encfs Password:

Ne vous inquiétez pas si rien ne s’affiche quand vous entrez votre mot de passe. C’est voulu (de cette façon, si une personne est assise à côté de vous ou espionne votre écran avec des jumelles 😛 , elle ne devinera pas le mot de passe que vous êtes en train de taper. Et c’est moi en plus qui dit qu’il ne faut pas être parano 😀 ).

Je vous recommande de choisir un mot de passe avec au moins 10 caractères, contenant un mélange de chiffres, de lettres en majuscule et minuscule, pour rendre la tâche très difficile à ceux qui souhaitent lire vos données grâce à la méthode force brute par exemple.

Si tout se passe bien, le répertoire « fichiers » sera monté (vous pouvez vérifier avec la commande mount comme dit plus haut).

Lancez cette commande pour le démonter :

fusermount -u fichiers

Enfin, avant de passer à l’étape suivante, si vous souhaitez que votre utilisateur normal puisse utiliser encfs, ajoutez le au groupe d’encfs (c’est assez important. De cette façon, vous n’aurez pas, dans le futur, à utiliser le compte root / l’administrateur à chaque fois que vous voudrez lire les données de votre clé USB).

Les groupes diffèrent d’une distribution Linux à une autre, mais dans le cas d’Ubuntu par exemple, c’est les groupes plugdev (pour autoriser la lecture des clés usb) et fuse (pour avoir le droit d’utiliser encfs, et d’autres programmes fuse, comme sshfs).

Les commandes suivantes ajouteront votre utilisateur aux groupes qu’il faut pour utiliser encfs avec un simple utilisateur, sous Ubuntu ou Debian (pour les autres distributions, faites une vérification dans votre documentation sur encfs !) :

gpasswd -a VOTRE_UTILISATEUR fuse
gpasswd -a VOTRE_UTILISATEUR plugdev

Étape 3. Installer le script mount-encfs-dir.sh dans votre clé usb !

Téléchargez le script mount-encfs-dir.sh dans le répertoire de votre clé usb avec wget :

wget https://www.asher256.com/mes-fichiers/programmes/mount-encfs-dir.sh

Ensuite, installez Zenity, un outil important pour que mount-encfs-dir.sh ait une interface graphique. Sous Ubuntu, cela se fait avec la commande :

sudo apt-get install zenity

Étape 5. Votre premier test !

Lancez le script mount-encfs-dir.sh avec la commande :

sh mount-encfs-dir.sh

Vous pouvez aussi sous GNOME, avec Nautilus, double cliquer dessus pour le lancer.

Une fois lancé, une petite interface s’affichera vous demandant votre mot de passe, puis ensuite vous demandant de faire une sauvegarde (similaire aux logiciels de sauvegarde et archive d’Internet). Par défaut, si vous acceptez de faire une sauvegarde, tous vos fichiers seront sauvegardés en clair dans /home/<votreuser>/.save_usb_stick/ (par précaution, pour au moins avoir des fichiers non chiffrés chez vous).

Étape 6. Découvrir, personnaliser et lire le script mount-encfs-dir.sh

Ce script est utile pour que vous n’ayez pas à lancer la commande encfs manuellement, il s’occupe pour vous de monter et démonter votre coffre fort avec une interface simple Zenity. En plus, il vous encouragera à sauvegarder vos données à chaque fois que vous monterez et démonterez votre coffre fort, ce qui est très important pour la sécurité de vos données importantes !

Pour votre information, sachez qu’il est possible de personnaliser le script grâce aux variables globales disponibles au début du code source de mount-encfs-dir.sh.

Il est possible de lire code source directement depuis cet article pour savoir de quelles variables je parle (et pour le lire, si vous aimez la programmation 😉 !) :

#!/bin/bash
#
# mount-encfs-dir.sh
#
# Programme pour monter graphiquement, grâce à Zenity, votre
# répertoire chiffré encfs. Utile pour protéger les
# fichiers de votre clé USB.
#
# (Il faut installer zenity pour que ce programme
# fonctionne graphiquement)
#
# License : GPL
#
# Auteur : Asher256
# Email  : contact at asher256 dot com
# Site   : https://www.asher256.com/
#

#============== VARIABLES A MODIFIER =================
# (Variables utiles pour personnaliser le script)

# Répertoire dans lequel le répertoire chiffré sera monté
mount_dir="fichiers"

# Répertoire contenant les fichiers chiffrés
encrypted_dir=".coffre"

# Répertoire de sauvegarde
save_dir="$HOME/.save_usb_stick"

# save_source_dir contient ce qui doit être sauvegardé
# dans save_dir (variable plus haut).
#
# Si vous mettez dans save_source_dir "$mount_dir", la
# sauvegarde dans $save_dir ne sera PAS chiffrée
# (recommandé, au cas où les données ne sont plus
# accessibles pour une raison ou une autre). En
# revanche, si vous mettrez "$encrypted_dir" dans
# save_source_dir, la sauvegarde sera chiffrée.
save_source_dir="$mount_dir"

#=====================================================

#
# Fonction pour Lancer la sauvegarde.
#
do_save() {
	# Supprimer l'ancienne savegarde
	rm -fr "$save_dir"
	mkdir -p "$save_dir"

	if [ "$DISPLAY" = "" ]; then
		# Sauvegarde texte
		while true; do
			echo -n "Voulez-vous sauvegarder vos données '$save_source_dir' dans '$save_dir' ? [y/n] "
			read response

			if [ "$response" = "y" ]; then
				echo "Sauvegarde en cours..."
				cp -Rf "$0" "$save_source_dir" "$save_dir"
				break
			else
				break
			fi
		done
	else
		# Sauvegarde graphique
		if zenity --question --text "Voulez-vous sauvegarder vos données '$save_source_dir' dans '$save_dir' ?"; then
			cp -Rvf "$0" "$save_source_dir" "$save_dir" | zenity --progress --pulsate --title="Sauvegarde" --text="Sauvegarde en cours..."
		fi
	fi
}

#
# Fonction pour lancer le montage du répertoire chiffré.
#
# $1 contient le mot de passe encfs (facultatif).
#
do_mount() {
	if [ "$1" != "" ]; then
		# Si le mot de passe est défini, l'utiliser !
		echo "$1" | encfs --stdinpass -v "`pwd`/$encrypted_dir/" "`pwd`/$mount_dir/"
	else
		# Si le mot de passe n'est pas défini, monter sans mot de passe (il sera
		# demandé par encfs).
		encfs "`pwd`/$encrypted_dir/" "`pwd`/$mount_dir/"
	fi
}

#
# Afficher un message (graphique ou texte, selon $DISPLAY)
#
message() {
	if [ "$DISPLAY" = "" ]; then
		echo "$@"
	else
		zenity --info --title "Message du montage" --text "$*"
	fi
}

#
# Retourne vrai si le montage a déjà été effectué.
#
already_mounted() {
	if mount | grep "$(pwd)/$mount_dir" | grep encfs >/dev/null 2>&1; then
		return 0
	fi

	return 1
}

#
# Fonction principale (main) pour le texte
#
main_text() {
	if already_mounted; then
		echo "La partition chiffrée est déjà montée dans '$mount_dir'."
		echo
		echo "Appuyez sur la touche entrée pour la démonter..."
		read
		do_save
		fusermount -u "$mount_dir"
	else
		do_save

		# s'il n'est pas monté, faire le montage !
		if do_mount; then
			echo "Montage dans '$mount_dir' fait avec succès ! ;-)"
		else
			echo "Erreur lors du montage de '$encrypted_dir' dans '$mount_dir' !"
		fi
	fi
}

#
# Fonction principale (main) mais graphique avec Zenity
#
main_gui() {
	if ! which zenity >/dev/null; then
		echo "Le programme Zenity n'a pas été trouvé ! Tout se fera en mode texte..."
		echo
		main_text
		exit 0
	fi

	if ! already_mounted; then
		title="Mot de passe de déchiffrement"
		label="Entrez votre mot de passe pour déchiffrer '$encrypted_dir' dans '$mount_dir' :"
		while true; do
			password=$(zenity --entry --hide-text --title "$title" --text "$label")
			if [ "$?" -eq "0" ]; then
				if [ "$password" = "" ]; then
					message "Vous devez entrer un mot de passe."
					continue
				fi

				# lancer le montage...
				if do_mount $password; then
					message "La partition a été montée avec succès !"
					do_save
					break
				else
					message "Erreur lors du montage de la partition..."
				fi
			else
				# l'utilisateur clique sur Annuler...
				break
			fi
		done
	else
		do_save

		if zenity --question --text "Voulez-vous démonter la partition chiffrée '$mount_dir' ?"; then
			result=$(fusermount -u "$mount_dir" 2>&1)
			if [ "$?" -ne "0" ]; then
				echo -e "Erreur lors du démontage de '$mount_dir'.\n\n$result" | zenity --text-info
			else
				message "Le démontage de '$mount_dir' a effectué avec succès !"
			fi
		fi
	fi
}

#
# Premiers tests
#
first_tests() {
	# le script se déplace au répertoire dans lequel il est
	cd `dirname $0` || exit 1

	# tests si nous sommes dans les bons répertoires
	if ! [ -d "$mount_dir" ]; then
		message "Le répertoire $(pwd)/$mount_dir n'a pas été trouvé !"
		exit 1
	fi

	if ! [ -d "$encrypted_dir" ]; then
		message "Le répertoire $(pwd)/$encrypted_dir n'a pas été trouvé !"
		exit 1
	fi
}

# Lancer l'opération de montage
first_tests
if [ "$DISPLAY" = "" ]; then
	main_text
else
	main_gui
fi

exit 0




Déjà 16 commentaires dans “6 Étapes pour Protéger votre Clé USB sous Linux grâce à encfs (+ un script)”
  1. Moncef

    Merci mais comment le mot de passe est crypté ?

  2. Asher256

    Le mot de passe n’est pas chiffré Moncef, il n’y a que les fichiers qui le sont.

    Le mot de passe est entré par l’utilisateur avant le déchiffrement, pour permettre à encfs de déchiffrer tous les fichiers.

  3. Amine

    Dis moi notre discussion t’a inspiré? 😉

  4. SkeRoy

    Bon article, mais encfs n’est pas une bonne solution pour crypter une clé usb : en effet, comme il est obligé de décrypter les données sur le même volume, en fait il divise l’espace disponible sur la clé de moitié (une clé de 2 Go avec 1Go cryptés nécessite 1Go pour décrypter)

    Il vaudrait mieux crypter toute la partition avec cryptsetup…
    http://forum.ubuntu-fr.org/viewtopic.php?id=20840

  5. nattyebo

    très intéressante, mais vu qu’une clef usb est portable, c’est dommage de ne pas pouvoir s’en servir sur 90% (c’est plus 20% dans mon entourage mais quand bien même) des ordinateurs : ceux qui sont sous windows….

  6. Asher256

    @Amine: ouais, un peu 🙂 . J’avais cet article dans ma liste d’idées et je l’ai écrit avant les autres suite à notre discussion 😉 .

    @nattyebo: oui, mais comme les fichiers chiffrés ne sont que dans le répertoire « fichiers », tu peux mettre tes fichiers en clair dans d’autres répertoires, pour pouvoir les lire sous Windows (l’avantage d’encfs est de ne pas t’imposer l’écrasement de ta partition. Elle peut rester en FAT32). Si tu parlais du fait de déchiffrer sous Windows, alors là, en effet, c’est assez dommage 😉 .

    @SkeRoy: encfs a l’avantage d’être facile d’accès. L’une des choses aussi assez intéressante c’est qu’il ne t’oblige pas de remplacer toute la partition. Cela dit, si c’est le chiffrement complet de la partition dont il est question, il existe aussi truecrypt, qui est facile d’accès avec sa nouvelle interface graphique.

  7. michauko

    Ou utiliser truecrypt (opensource, tout ça)
    Du coup, « container » (ou partition complète) lisible depuis n’importe quel OS

  8. michauko

    « Du coup » => « Et aussi »

  9. Tharkun007

    Et voila pourquoi ceux qui utilisent windows disent que tout est compliqué sous linux !
    En fait il suffit juste d’installer cryptkeeper (présent dans les dépots) et tout le tuto se fera tout seul ! Vous pourrez meme importer les dossiers cryptés que vous vous etes amusés a faire en ligne de commande avec ce tuto.
    lancer cryptkeeper, cliquer sur le cadenas qui apparait en haut a droite du bureau, clic droit ou gauche et tout est simple.

  10. Asher256

    En effet Tharkun007, Cryptkeeper est une excellente solution aussi.

    La méthode de cet article, c’est surtout pour ceux qui souhaitent avoir un script transporté avec eux, dans leur clé USB, où ils n’auront pas besoin d’installer quoi que ce soit pour monter et déchiffrer leur partition, mis-à-part un double click (par exemple une personne qui utilise plusieurs ordinateurs différents).

    Je vais ajouter ce détail à l’article, pour prévenir à quoi sert cette méthode.

  11. atlas95

    Bonjour,
    Je fais cours, ça fait 3x que je récris ce message a cause de ma clé 3g qui plante, j’abandonne, sans rentrer dans les détails donc, j’utilise depuis peu, lukfsformat (luks) sous linux et freeotfe sous windows pour lire cette meme clé, ca crypte/decerypte a la volée, est super fiable.
    De plus nautilus detect la clé cmme un média crypté comme un grand (meme sous Hardy) et demande le mot de passe.
    Je ferais surement un poste sur le planet également quand j’aurais retrouvé du courage !
    Joli article asher sinon, j’utiliser la meme methode avant avec un script un peu moin propre 🙂
    😉

  12. bartux

    Pour ma part, une clef usb doit être accessible sur tout ordinateur, même un windows sur lequel on n’a pas de droit admin. Jusqu’à maintenant la seule solution efficace et multi-OS (GNU-Linux, Mac, Win) que j’ai trouvé est L’IronKey. C’est chers mais ça marche vraiment bien:
    https://www.ironkey.com/

  13. Asher256

    @atlas95: excellent pour luks. On attend ton post 😉 .

    @bartux: merci pour le partage. Je testerai cet outil. Comment est-il par rapport à truecrypt par ex. ?

  14. bartux

    L’IronKey n’est pas un logiciel, c’est une clef usb avec chiffrement matériel intégré. Pour plus d’info, voir ici:
    http://www.hermitagesolutions.com/produits/ironkey

    Pour ma part, je l’ai achetée en Suisse sur ce site:
    http://www.kainoa.ch

  15. atlas95

    Ha bartux tu l’as l’iron? Je reçois la mienne lundi prochain normalement, ça fait une semaine que fedex essai de me la livrer …
    Elle marche bien sous ubuntu alors?
    Elle est vraiment rapide ?