Back to homepage

logo Installation et intégration complète de Truecrypt sous Debian

0. Préliminaires

Voici quelques réponses à des questions que vous pourriez vous poser :

A qui se destine ce texte ?
A toute personne souhaitant installer Truecrypt sous GNU/Debian.
Qu'est-ce que Truecrypt ?
Un driver qui permet de charger une partition chiffré pour stoquer des données confidentielles sur son disque dur.
Attardons-nous sur le choix de Truecrupt : pourquoi pas son concurent, mountloop ?
Réponse très simple : Truecrypt fonctionne également sous Windows et propose une multitude d'algorithmes de chiffrage.
Comment et où taper les commandes énumérées ci-dessous ?
Il faut tout d'abord avoir ouvert un shell (bash).
Vous devez être en root pour saisir les commandes ci-dessous :
=> une fois le shell ouvert, tapez la commande su pour passer root

Ne recopier que la commande suivant le caractère ' # ' – représentant l'invite du shell – sans inclure ce dernier !
Quel niveau est requis pour effectuer ces manipulations ?
Je serai tenté de dire débutant acharné étant donné que j'explique clairement la marche à suivre.
En réalité, il n'en est rien : il faut un minimun de connaissances de linux pour comprendre – au moins – ce qui est fait.
Toutes les manipulations s'effectuant en root cela est dangereux pour votre système, sans compter que l'on manipule le noyau.

Il faut au moins être un bon utilisateur moyen de linux.

1. Installer un noyau récent

Truecrypt demande un noyau récent, ce qui est contradictoire avec la politique de stabilité Debian, d'où la nécessité de mettre à jour le noyau pour Truerypt.

Pour partir du bon pied, mettons tout d'abord à jour la liste des paquets disponibles :
# apt-get update

Puis, recherchons le dernier noyau disponible :
# apt-cache search linux-image

Là, cela se complique un petit peu : il va falloir choisir parmi la liste de paquets proposés et cela est dépendant de votre machine.
C'est le nom du paquet va déterminer votre choix, fonction de votre configuration.

Un nom de noyau est composé de la facon suivante :
linux-image-[version].[revision_majeure]-[revision_mineure]-[architecture]

par exemple : linux-image-2.6.8-3-686

version :
Le deuxième chiffre est - et doit être - pair, prennez la version paire du noyau la plus haute disponible (actuellement, il s'agit de la 2.6).
revision_majeure / revision_mineure :
La révision la plus récente ou bien suffisante pour lancer la compilation de Truecrypt.
(actuellement, Truecrypt demande la révision majeure 5 du noyau 2.6).
architecture :
Si vous ne connaissez pas votre architecture, utilisez la commande uname -m (donne l'architecture actuellement utilisée).
A défaut, si vous êtes sur un pc, il y a toute les chances que l'architecture ' 386 ' fonctionne.

Après avoir choisi votre paquet, installer-le au moyen de la commande :
# apt-get install [nom_de_l'image]

Vous devrez redémarrer à ce stade pour booter sur sur le nouveau noyau (il faudra le sélectionner au démarrage, via le boot loader).

Le kernel plus ancien pourra alors être retiré par la commmande :
# apt-get remove [nom_de_l'ancienne_image]

2. Installer les sources du noyau

Pour cette opération délicate, je vous propose directement d'utiliser un petit script que j'ai rédigé :


#!/bin/bash

# install source of current runing kernel using apt (written for debian)

set -e

versext=`uname -r`
version=${versext/-.*$//}

# if it already here, keep archive...
[ -f /usr/src/linux-source-$version.tar.bz2 ] || apt-get install linux-source-$version

cd /usr/src/

# ...but we don't want to keep an old directory !
[ -d linux-source-$version ] && rm -rf linux-source-$version

tar -xvjf linux-source-$version.tar.bz2

ln -sf linux-source-$version linux

# copy current config into directory
cp /boot/config-$versext ./linux/.config

Copiez le tout dans un fichier texte – ici: install_sources.sh –, activez les droits d'executions et lancez-le. Le tout en root :
# chmod +x install_sources.sh
# ./install_sources.sh

Attention ! Ce script fonctionnera uniquement si vous utilisez une version stable de Debian et son noyau actuel.
Dans le cas contraire, il vous faudra télécharger les sources correspondant à votre noyau sur kernel.org.

Si d'une façon ou d'une autre, le premier script ne marchait pas, essayez celui-ci :


#!/bin/bash

# install source of current runing kernel asking kernel.org (written for debian)

set -e

version=`uname -r | sed s/-[^-]*$// | sed s/-/./g`
link="http://www.kernel.org/pub/linux/kernel/v2.6/"

filename=linux-${version}.tar.bz2

cd /usr/src

# if it already here, keep archive...
[ -f $filename ] || wget ${link}${filename}

# ...but we don't want to keep an old directory !
[ -d linux-${version} ] && rm -rf linux-${version}

tar xvjf $filename

ln -sf linux-${version} linux

# copy current config into directory
cp /boot/config-$(uname -r) ./linux/.config

# run the *make oldconfig*
cd linux
make oldconfig

Copiez le tout dans un fichier texte – ici: install_sources_other.sh –, activez les droits d'executions et lancez-le. Le tout en root :
# chmod +x install_sources_other.sh
# ./install_sources_other.sh

3. Installer dmsetup

La commande pour l'insallation du paquet :
# apt-get install dmsetup

Ce paquet est nécessaire pour lancer Truecrypt.

4. Compilation et installation avec les sources de Truecrypt

Vous l'avez probablement déjà fait, sinon il va falloir récupérer les sources depuis le site officiel.
Ensuite, il vous suffit d'extraire l'archive, de vous placer dans le répertoire ainsi extrait...
# tar xvzf truecrypt-[version]-source-code.tar.gz --directory /tmp/
# cd /tmp/truecrypt-[version]

...et, de lancer les scripts de construction et d'installation :
# ./Linux/build.sh && ./Linux/install.sh

Il va ensuite falloir vérifier que le module de Truecrypt est bien chargé, en utilisant cette commande :
# modprobe -l | grep truecrypt
(Une ligne identifiant le module truecrypt doit apparaitre, confirmant que la compilation a correctement fonctionné)

Après réussite, nous pouvons effacer le répertoire temporaire :
# rm -rf /tmp/truecrypt-[version]

5. Mise en place d'un script de montage automatique, type 'démon'

Après avoir créé vos volumes chiffrés (commande truecrypt -c), nous allons pouvoir les faire charger automatiquement au démarrage de la machine.

Pour la lecture du mot de passe

Voici un script perl qui nous permettra de saisir un mot de passe de facon masqué.
Contrairement à la commande read, celui-ci est capable de gérer tous les caractères spéciaux.


#!/usr/bin/perl -w

print getpass();

sub getpass {
	open STDIN, "/dev/tty";

	system "stty -echo";
	my($c, $pwd);
	$pwd = "";
	while (($c = getc(STDIN)) ne '' and $c ne "\n" and $c ne "\r") {
		$pwd .= $c;
	}
	system "stty echo";
	print STDERR "\n";

	return $pwd;
}

Récupérez-le dans un fichier texte – ici: read_shadow.pl –, activez les droits d'éxécutions étant root puis copier le vers /usr/bin/readpasswd
# chmod +x read_shadow.pl
# cp read_shadow.pl /usr/bin/readpasswd

Le script qui simule un démon

Il s'agit du script qui chargera les partitions par groupe, il est inspiré du fichier /etc/init.d/skeleton


#!/bin/bash

# truecrypt automount 'deamon script',
# written by Julien Blitte, 2006-10-10
#
# based on skeleton 2.58-28.

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Truecrypt automount"
NAME=tcamount
SCRIPTNAME=/etc/init.d/$NAME

test -x /usr/bin/truecrypt || exit 0

#
#	Function that starts the daemon/service.
#
d_start() {
	for i in /etc/fstcam[0-9]
	do

		echo -n "volume group n°${i: -1}, enter password (else press return): "

		mdp=`readpasswd`
		
		if [ "$mdp" = "" ]
		then
			echo "aborded (empty password)."
			continue
		fi

		for p in `grep -v "^[[:space:]]*\(#\|$\)" $i`
		do
			what=$(echo $p | cut -f 1 -d ':')
			where=$(echo $p | cut -f 2 -d ':')
			who=$(echo $p | cut -f 3 -d ':')

			[ -d $where ] || mkdir $where

			# si ca match : on monte la partition
			if [ -d $where ];
			then
				echo " * mouting $where..."
				sudo -u $who truecrypt -u $what $where -p "$mdp" 2> /dev/null
			fi
		done
		mdp=""
	done
}

#
#	Function that stops the daemon/service.
#
d_stop() {
	for i in `truecrypt -l | cut -f 1 -d ' '`
	do
		echo " * umounting $i..."
		truecrypt -d $i
	done
}

case "$1" in
  start)
	echo "Starting $DESC: $NAME"
	d_start
	;;
  stop)
	echo "Stopping $DESC: $NAME"
	d_stop
	;;
  restart|force-reload)
	echo "Restarting $DESC: $NAME"
	d_stop
	sleep 1
	d_start
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0

Récupérez-le dans un fichier texte – ici: deamon.sh –, activez les droits d'éxécutions étant root et puis copier le vers /etc/init.d/tcamount
# chmod +x deamon.sh
# cp deamon.sh /etc/init.d/tcamount

Rédiger un fichier de configuration pour notre script de lancement

Avec notre script pseudo-démon, nous pouvons générer jusqu'a 10 groupes de partitions, un groupe ayant le même mot de passe pour l'ensemble de ses partitions.
Ils sont stoqués dans /etc/ et portent le nom fstcam0 ... fstcam9

Chaque fichier est structuré de la façon suivante :

Voici un exemples avec deux groupes :

Génération des liens pour les différents niveaux de démarrage :

Nous pouvons tester notre script via la commande :
# /etc/init.d/tcamount start

Si cela fonctionne, on peut alors définir des liens pour l'ensemble des runlevels* :
# update-rc.d tcamount defaults

*Un runlevel correspond à un changement d'état de la machine : démarrage graphique, arrêt, reboot, démarrage en 'recovery mode'...
Ce sont ces liens symboliques qui appeleront le scripts au bon moment pour monter/démonter les disques.


La réponse devrait ressembler à :
 Adding system startup for /etc/init.d/tcamount ...
   /etc/rc0.d/K25tcamount -> ../init.d/tcamount
   /etc/rc1.d/K25tcamount -> ../init.d/tcamount
   /etc/rc6.d/K25tcamount -> ../init.d/tcamount
   /etc/rc2.d/S25tcamount -> ../init.d/tcamount
   /etc/rc3.d/S25tcamount -> ../init.d/tcamount
   /etc/rc4.d/S25tcamount -> ../init.d/tcamount
   /etc/rc5.d/S25tcamount -> ../init.d/tcamount

contact/mail protection