<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
  "http://www.docbook.org/xml/4.3/docbookx.dtd" [
<!ENTITY howto		"http://www.traduc.org/docs/howto/lecture/">
<!ENTITY traduc		"http://www.traduc.org">
]>

<article class="whitepaper" id="Encrypted-Root-Filesystem-HOWTO" lang="fr">

  <articleinfo>

    <title>
	Guide pratique de chiffrement des systèmes de fichiers racines
    </title>

    <subtitle>

	Adaptation française du <foreignphrase>Encrypted Root Filesystem 
	HOWTO</foreignphrase>

    </subtitle>

    <author>
	<firstname>Christophe</firstname>
	<surname>Devine</surname>
    </author>

    <othercredit role="traduction">
	<firstname>Guillaume</firstname>
	<surname>Lehmann</surname>
        <contrib>Adaptation française</contrib>
	<email>lehmann CHEZ free POINT fr</email>
    </othercredit>

    <othercredit role="relecture">
	<firstname>Claude</firstname>
	<surname>Thomassin</surname>
	<contrib>Relecture de la version française</contrib>
	<email>cthomassin CHEZ waika9 POINT com</email>
    </othercredit>

    <othercredit role="publication">
	<firstname>Jean-Philippe</firstname>
	<surname>Guérard</surname>
	<contrib>Préparation de la publication de la v.f.</contrib>
	<email>fevrier CHEZ tigreraye POINT org</email>
    </othercredit>

    <pubdate>2004-10-05</pubdate>
    <releaseinfo>Version&nbsp;: 1.1.fr.1.2</releaseinfo>

    <abstract><para>

	Ce document explique comment sécuriser vos données personnelles
	en chiffrant le système de fichiers racine de Linux avec un
	chiffrement fort.

    </para></abstract>

    <legalnotice><para>

	Ce guide pratique est sous la licence de documentation Libre GNU 
	(GFDL) en version 1.2.
	
    </para></legalnotice>

    <revhistory>
	<revision>
	    <revnumber>v1.1.fr.1.2</revnumber>
	    <date>2004-10-05</date>
	    <authorinitials>JPG</authorinitials>
	    <revremark>
	    
	    Correction orthographique mineure. Passage en 
	    DocBook&nbsp;4.3.
	    
	    </revremark>
	</revision>
	<revision>
	    <revnumber>v1.1.fr.1.1</revnumber>
	    <date>2004-01-11</date>
	    <authorinitials>GL,CT,JPG</authorinitials>
	    <revremark>
	    
	    Correction orthographique mineure.
	    
	    </revremark>
	</revision>
	<revision>
	    <revnumber>v1.1.fr.1.0</revnumber>
	    <date>2004-01-11</date>
	    <authorinitials>GL,CT,JPG</authorinitials>
	    <revremark>
	    
	    Adaptation française
	    
	    </revremark>
	</revision>
        <revision>
            <revnumber>v1.1</revnumber>
            <date>2003-12-01</date>
            <authorinitials>CD</authorinitials>
            <revremark>

            Ajout des informations relatives à GRUB
            (<emphasis>Added support for GRUB</emphasis>)

            </revremark>
        </revision>

        <revision>
            <revnumber>v1.0</revnumber>
            <date>2003-09-24</date>
            <authorinitials>CD</authorinitials>
            <revremark>
            
            Publication initiale, après validation par le projet de
            documentation Linux [LDP] (<emphasis>Initial release,
            reviewed by LDP</emphasis>)
            
            </revremark>
        </revision>

        <revision>
            <revnumber>v0.9</revnumber>
            <date>2003-09-11</date>
            <authorinitials>CD</authorinitials>
            <revremark>
            
            Mis à jour et converti en XML DocBook
            (<emphasis>Updated and converted to DocBook
            XML</emphasis>)
            
            </revremark>
        </revision>

    </revhistory>

</articleinfo>

<sect1 id="preparer-le-systeme">
    <title>Préparer le système</title>

    <sect2 id="placement-des-partitions">
        <title>Configuration de la disposition de la partition</title>

        <para>
        
	    Votre disque dur (hda) devrait contenir au moins trois
	    partitions&nbsp;:

        </para>

	<variablelist>

	<varlistentry>
	<term><filename class="partition">hda1</filename></term>
	<listitem><para>
	    cette petite partition (~&nbsp;4&nbsp;Mo) non-chiffrée
	    demandera un mot de passe afin de monter le système de
	    fichiers racine chiffré.
        </para></listitem>
	</varlistentry>

	<varlistentry>
	<term><filename class="partition">hda2</filename></term>
	<listitem><para>
	    cette partition chiffrée contiendra votre système de fichiers
	    racine&nbsp;; assurez-vous qu'elle soit suffisamment grande.
        </para></listitem>
	</varlistentry>

	<varlistentry>
	<term><filename class="partition">hda3</filename></term>
	<listitem><para>
	    cette partition contient le vrai système GNU/Linux.
        </para></listitem>
	</varlistentry>
	
        </variablelist>
        <para>

	    Lorsque vous en serez arrivé là, ni <filename
	    class="partition">hda1</filename> ni <filename
	    class="partition">hda2</filename> ne seront plus utilisés.
	    <filename class="partition">hda3</filename> est l'endroit où
	    votre distribution Linux sera réellement installée&nbsp;;
	    <filename class="directory">/usr</filename> et <filename
	    class="directory">/boot</filename> <emphasis>doivent tous les deux</emphasis> se
	    trouver sur cette partition.

        </para>
    </sect2>

    <sect2 id="install-kernel">
        <title>Installer Linux-2.4.23</title>
        <para>
	   Deux projets principaux travaillent sur l'ajout de capacités
	   de chiffrement fort au noyau&nbsp;: CryptoAPI et loop-AES. Ce
	   guide pratique se base sur loop-AES, car il offre une mise en
	   &oelig;uvre de Rijndael en langage assembleur, rapide et très
	   optimisée, et donc des performances maximales aux possesseurs
	   de processeurs IA-32 (x86).
           
         </para>
        <para>
	    Tout d'abord, téléchargez et décompressez le paquet
	    loop-AES&nbsp;:
        </para>
<screen>
wget http://loop-aes.sourceforge.net/loop-AES/loop-AES-v2.0d.tar.bz2
tar -xvjf loop-AES-v2.0d.tar.bz2
</screen>

	<para>
	    Vous devez aussi télécharger et appliquer un correctif aux
	    sources du noyau&nbsp;:
        </para>

<screen>
wget http://ftp.kernel.org/pub/linux/kernel/v2.4/linux-2.4.23.tar.bz2
tar -xvjf linux-2.4.23.tar.bz2
cd linux-2.4.23
patch -Np1 -i ../loop-AES-v2.0d/kernel-2.4.23.diff
</screen>

	<para>
	    Configurez la carte du clavier&nbsp;:
        </para>

<screen>
dumpkeys | loadkeys -m - > drivers/char/defkeymap.c
</screen>

	<para>
	    Ensuite, configurez votre noyau&nbsp;; assurez-vous que les
	    options suivantes sont activées&nbsp;:
        </para>
<screen>
make menuconfig

    Block devices  ---&gt;

        &lt;*&gt; Loopback device support
        [*]   AES encrypted loop device support (NEW)

        &lt;*&gt; RAM disk support
        (4096)   Default RAM disk size (NEW)
        [*]   Initial RAM disk (initrd) support

    File systems  ---&gt;

        &lt;*&gt; Ext3 journalling file system support
        &lt;*&gt; Second extended fs support

(note importante&nbsp;: n'activez pas le support du système de fichiers /dev)
</screen>
	
	<para>
	    Compilez le noyau et installez-le&nbsp;:
        </para>

<screen>
make dep bzImage
make modules modules_install
cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.23
</screen>

        <para>
	    Si vous utilisez grub comme chargeur de démarrage, mettez à
	    jour le fichier <filename>/boot/grub/menu.lst</filename> ou
	    <filename>/boot/grub/grub.conf</filename>&nbsp;:
        </para>

<screen>
cat &gt; /boot/grub/menu.lst &lt;&lt; EOF
default 0
timeout 10
color green/black light-green/black
title Linux
    root (hd0,2)
    kernel /boot/vmlinuz-2.4.23 ro root=/dev/hda3 vga=4
EOF
</screen>
	<para>
	    Sinon, mettez à jour <filename>/etc/lilo.conf</filename> et 
	    exécutez la commande <userinput>lilo</userinput>&nbsp;:
        </para>

<screen>
cat &gt; /etc/lilo.conf &lt;&lt; EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/boot/vmlinuz-2.4.23
    label=Linux
    read-only
    root=/dev/hda3
    vga=4
EOF
lilo
</screen>

	<para>
	    Vous devez maintenant redémarrer votre système.
        </para>

    </sect2>

    <sect2 id="installer-util-linux">
        <title>Installation de util-linux-2.12</title>
        
        <para>

	    Il faut maintenant appliquer un correctif et recompiler le
	    programme <command>losetup</command> afin de lui donner la
	    capacité d'utiliser un chiffrement fort. Ce programme est
	    une composante du paquet
	    <medialabel>util-linux</medialabel>. Téléchargez,
	    décompressez <medialabel>util-linux</medialabel>, puis
	    appliquez-lui le correctif&nbsp;:
            
        </para>

<screen>
wget http://ftp.cwi.nl/aeb/util-linux/util-linux-2.12.tar.gz
tar -xvzf util-linux-2.12.tar.gz
cd util-linux-2.12
patch -Np1 -i ../loop-AES-v2.0d/util-linux-2.12.diff
</screen>

	<para>
	    Afin de pouvoir utiliser des mots de passes de moins 
	    de 20 caractères, entrez&nbsp;:
        </para>
        
<screen>
CFLAGS=&quot;-O2 -DLOOP_PASSWORD_MIN_LENGTH=8&quot;; export CFLAGS
</screen>

	<para>
	    Si la sécurité est importante pour vous, je vous en prie,
	    n'autorisez pas les mots de passes de moins de 20
	    caractères. La sécurité a un prix, et l'une des contraintes
	    d'une bonne sécurité est la nécessité d'utiliser des mots de
	    passes longs.
        </para>
        
        <para>
	    Compilez <command>losetup</command> et installez-le en tant 
	    que super-utilisateur (compte root)&nbsp;:
        </para>
        
<screen>
./configure &amp;&amp; make lib mount
cp -f mount/losetup /sbin
rm -f /usr/share/man/man8/losetup.8.gz
cp -f mount/losetup.8 /usr/share/man/man8
</screen>

    </sect2>
</sect1>

<sect1 id="chiffrer-la-racine">
    <title>Création du système de fichiers racine chiffré</title>

    <para>
	Remplissez la partition cible avec des données aléatoires&nbsp;:
    </para>

<screen>
shred -n 1 -v /dev/hda2
</screen>

    <para>
    
	Configurez le périphérique de 
	bouclage<footnote><para><foreignphrase>Loopback 
	device.</foreignphrase></para></footnote> chiffré&nbsp;:
    
    </para>

<screen>
losetup -e aes256 -S <replaceable>xxxxxxxxxx</replaceable> /dev/loop0 /dev/hda2
Password:
</screen>

    <para>
	Pour se prémunir contre les attaques par dictionnaire, il est
	recommandé d'ajouter l'option <literal>-S
	<replaceable>xxxxxxxxxx</replaceable></literal>, où
	«&nbsp;<replaceable>xxxxxxxxxx</replaceable>&nbsp;» est votre
	graine choisie aléatoirement. En outre, afin d'éviter les
	problème de paramétrage clavier lors du démarrage, n'utilisez
	que des caractères ASCII (ie pas de caractères accentués, et 
	cætera) dans votre mot de passe.
    </para>

    <para>
	Maintenant, créez le système de fichiers ext3&nbsp;:
    </para>

<screen>
mke2fs -j /dev/loop0
</screen>
    
    <para>
	Vérifiez que vous avez correctement entré le mot de passe&nbsp;:
    </para>

<screen>
losetup -d /dev/loop0
losetup -e aes256 -S <replaceable>xxxxxxxxxx</replaceable> /dev/loop0 /dev/hda2
Password:
</screen>

<screen>
mkdir /mnt/efs
mount /dev/loop0 /mnt/efs
</screen>
    
    <para>
	Vous pouvez comparer les données chiffrées et les données
	non-chiffrées&nbsp;:
    </para>
<screen>
xxd /dev/hda2  | less
xxd /dev/loop0 | less
</screen>

    <para>
	C'est le moment d'installer le système Linux chiffré. Si vous
	utilisez une distribution GNU/Linux (tel que Debian, Slackware,
	Gentoo, Mandrake, RedHat/Fedora, SuSE, et cætera), exécutez la
	commande suivante&nbsp;:
    </para>

<screen>
cp -avx / /mnt/efs
</screen>

    <para>
	Si vous utilisez le livre Linux From Scratch, procédez comme il
	est indiqué dans le manuel, avec les modifications
	suivantes&nbsp;:
    </para>
	
    <itemizedlist>

    <listitem><para>
        Chapitre 6 - Installation de util-linux&nbsp;:
    </para>
    <para>
        Appliquez le correctif loop-AES après décompression des sources.
    </para></listitem>
    <listitem><para>
        Chapitre 8 - Rendre amorçable le système LFS&nbsp;:
    </para>
    <para>
        Référez-vous à la section suivante.
    </para></listitem>
    </itemizedlist>

</sect1>

<sect1 id="configurer-amorce">

    <title>Installation du périphérique d'amorçage</title>

    <sect2 id="ramdisque-initial">

    <title>Création du ramdisque</title>

        <para>
	    Pour commencer, redéfinissez la racine du système (via
	    <command>chroot</command>) à l'intérieur de la partition
	    chiffrée et créez le point de montage du périphérique
	    d'amorçage&nbsp;:
        </para>

<screen>
chroot /mnt/efs
mkdir /loader
</screen>
	
	<para>
	    Ensuite, créez le ramdisque initial (initrd), lequel sera
	    nécessaire par la suite&nbsp;:
        </para>

<screen>
cd
dd if=/dev/zero of=initrd bs=1k count=4096
mke2fs -F initrd
mkdir ramdisk
mount -o loop initrd ramdisk
</screen>

	<para>
	    Créez la hiérarchie du système de fichiers et copiez-y les
	    fichiers requis&nbsp;:
	</para>

<screen>
mkdir ramdisk/{bin,dev,lib,mnt,sbin}
cp /bin/{bash,mount,umount} ramdisk/bin/
ln -s bash ramdisk/bin/sh
mknod -m 600 ramdisk/dev/console c 5 1
mknod -m 600 ramdisk/dev/hda2    b 3 2
mknod -m 600 ramdisk/dev/loop0   b 7 0
cp /lib/{ld-linux.so.2,libc.so.6,libdl.so.2} ramdisk/lib/
cp /lib/{libncurses.so.5,libtermcap.so.2}    ramdisk/lib/
cp /sbin/{losetup,pivot_root} ramdisk/sbin/
</screen>
    
    <para>
	Ne soyez pas surpris si vous voyez un message du genre
	«&nbsp;/lib/libncurses.so.5: No such file or directory&nbsp;»,
	ou «&nbsp;/lib/libtermcap.so.2: No such file or
	directory&nbsp;», c'est normal&nbsp;: bash n'a besoin que de
	l'une de ces deux bibliothèques. Vous pouvez vérifier laquelle
	est actuellement nécessaire avec la commande suivante&nbsp;:
    </para>

<screen>
ldd /bin/bash
</screen>

    <para>
	Créez le script d'initialisation <filename>init</filename>
	(n'oubliez pas de remplacer
	«&nbsp;<replaceable>xxxxxxxxxx</replaceable>&nbsp;» par la
	graine que vous avez choisi)&nbsp;:
    </para>
    
<screen>
cat &gt; ramdisk/sbin/init &lt;&lt; &quot;EOF&quot;
#!/bin/sh

/sbin/losetup -e aes256 -S <replaceable>xxxxxxxxxx</replaceable> /dev/loop0 /dev/hda2
/bin/mount -r -n -t ext2 /dev/loop0 /mnt

while [ $? -ne 0 ]
do
    /sbin/losetup -d /dev/loop0
    /sbin/losetup -e aes256 -S <replaceable>xxxxxxxxxx</replaceable> /dev/loop0 /dev/hda2
    /bin/mount -r -n -t ext2 /dev/loop0 /mnt
done

cd /mnt
/sbin/pivot_root . loader
exec /usr/sbin/chroot . /sbin/init
EOF

chmod 755 ramdisk/sbin/init
</screen>

    <para>
	Démontez le périphérique de bouclage (<foreignphrase>loopback 
	device</foreignphrase>) et compressez le fichier initrd&nbsp;:
    </para>
    
<screen>
umount -d ramdisk
rmdir ramdisk
gzip initrd
mv initrd.gz /boot/
</screen>

    </sect2>

    <sect2 id="cd-amorcable">
    <title>Démarrage depuis un cd-rom</title>

        <para>
	    Je vous conseille vivement de démarrer votre système depuis
	    un média en lecture seule, tel qu'un cd-rom amorçable.
        </para>
        
        <para>
	    Téléchargez et décompressez syslinux&nbsp;:
        </para>

<screen>
wget ftp://ftp.kernel.org/pub/linux/utils/boot/syslinux/syslinux-2.07.tar.gz
tar -xvzf syslinux-2.07.tar.gz
</screen>

	<para>
	    Configurez isolinux&nbsp;:
        </para>
        
<screen>
mkdir bootcd
cp /boot/vmlinuz-2.4.23 bootcd/vmlinuz
cp /boot/initrd.gz syslinux-2.07/isolinux.bin bootcd/
echo &quot;DEFAULT vmlinuz initrd=initrd.gz ro root=/dev/ram0 vga=4&quot; \
    &gt; bootcd/isolinux.cfg
</screen>

        <para>
	    Créez et gravez l'image iso sur un cd-rom amorçable&nbsp;:
        </para>

<screen>
mkisofs -o bootcd.iso -b isolinux.bin -c boot.cat \
        -no-emul-boot -boot-load-size 4 -boot-info-table \
        -J -hide-rr-moved -R bootcd/

cdrecord -dev 0,0,0 -speed 4 -v bootcd.iso

rm -rf bootcd{,.iso}
</screen>

    </sect2>

    <sect2 id="partition-d-amorcage">
    <title>Démarrer depuis une partition</title>

        <para>

	    La partition d'amorçage est un périphérique de démarrage de
	    remplacement&nbsp;: vous en aurez besoin si vous perdez
	    votre CD amorçable. <emphasis>Rappellez-vous que <filename
	    class="partition">hda1</filename> est un média sur lequel il
	    est possible d'écrire et que cela n'est pas sécurisé&nbsp;;
	    utilisez-le seulement en cas d'urgence&nbsp;!</emphasis>
	    
        </para>

        <para>
	    Créer et montez le système de fichiers ext2&nbsp;:
        </para>

<screen>
dd if=/dev/zero of=/dev/hda1 bs=8192
mke2fs /dev/hda1
mount /dev/hda1 /loader
</screen>

        <para>
	    Copiez le noyau et le ramdisque initial&nbsp;:
        </para>

<screen>
cp /boot/vmlinuz-2.4.23 /loader/vmlinuz
cp /boot/initrd.gz /loader/
</screen>

        <para>
	    Si vous utilisez <command>grub</command>&nbsp;:
        </para>
        
<screen>
mkdir /loader/boot
cp -av /boot/grub /loader/boot/
cat &gt; /loader/boot/grub/menu.lst &lt;&lt; EOF
default 0
timeout 10
color green/black light-green/black
title Linux
    root (hd0,0)
    kernel /vmlinuz ro root=/dev/ram0 vga=4
    initrd /initrd.gz
EOF
grub-install --root-directory=/loader /dev/hda
umount /loader
</screen>

        <para>
	    Si vous utilisez <command>lilo</command>&nbsp;:
        </para>

<screen>
mkdir /loader/{boot,dev,etc}
cp /boot/boot.b /loader/boot/
mknod -m 600 /loader/dev/hda  b 3 0
mknod -m 600 /loader/dev/hda1 b 3 1
mknod -m 600 /loader/dev/ram0 b 1 0
cat &gt; /loader/etc/lilo.conf &lt;&lt; EOF
lba32
boot=/dev/hda
prompt
timeout=100
image=/vmlinuz
    label=Linux
    initrd=/initrd.gz
    read-only
    root=/dev/ram0
    vga=4
EOF
lilo -r /loader
umount /loader
</screen>

    </sect2>
</sect1>

<sect1 id="dernieres-etapes">
    <title>Dernières étapes</title>

    <para>
	Modifiez /etc/fstab pour qu'il contienne&nbsp;:
    </para>

<screen>
/dev/loop0      /      ext3    defaults             0 1
</screen>

    <para>

	Supprimez /etc/mtab et annulez la redéfinition de la racine du
	système (sortez de <command>chroot</command>). Enfin, exécutez
	<userinput>umount -d /mnt/efs</userinput> et redémarrez. 
	<filename class="partition">hda3</filename> n'est désormais plus
	nécessaire, donc vous pouvez créer un système de fichiers chiffré
	sur cette partition et l'utiliser comme sauvegarde.

    </para>

    <para>

	Maintenant, si votre machine n'a pas beaucoup de mémoire, vous
	aurez besoin d'un peu d'espace d'échange. Supposons que
	<filename class="partition">hda4</filename> contiendra votre
	partition d'échange chiffrée&nbsp;; vous devez tout d'abord
	créer le périphérique d'échange&nbsp;:

    </para>

<screen>
shred -n 1 -v /dev/hda4
losetup -e aes256 /dev/loop1 /dev/hda4
mkswap /dev/loop1
</screen>

    <para>
	Ensuite, créez un script (<filename>S00swap</filename>) dans le
	répertoire de démarrage du système (<filename
	class="directory">/etc/rcS.d/</filename> sous Debian)&nbsp;:
    </para>
    
<screen>
#!/bin/sh

echo &quot;<replaceable>mot de passe choisi précédemment</replaceable>&quot; | \
    losetup -p 0 -e aes256 /dev/loop1 /dev/hda4
swapon /dev/loop1
</screen>

</sect1>

<sect1 id="a-propos">
    <title>À propos de ce guide pratique</title>
    
    <para>
	Ce document a tout d'abord été écrit en novembre 2002 pour le
	projet <ulink
	url="http://www.fr.linuxfromscratch.org/">Linux From
	Scratch</ulink>. Je voudrai remercier les nombreuses personnes
	qui m'ont aidé depuis lors à améliorer ce guide pratique (dans
	l'ordre chronologique inverse)&nbsp;: Julien Perrot, Grant
	Stephenson, Cary W. Gilmer, James Howells, Pedro Baez, Josh
	Purinton, Jari Ruusu et Zibeli Aton.
    </para>
    
    <para>
	Merci d'envoyer vos commentaires (en anglais) à <ulink
	url="http://www.cr0.net:8040/about/">Christophe Devine</ulink>.
    </para>

    <para>
        La <ulink
        url="&howto;Encrypted-Root-Filesystem-HOWTO.html">dernière
        version française</ulink> de ce document est disponible sur le
        site du projet <ulink url="&traduc;">traduc.org</ulink>.
    </para>

    <para>
        N'hésitez pas à faire parvenir tout commentaire relatif à la version
        française de ce document à
        <email>commentaires CHEZ traduc POINT org</email> en précisant 
        le nom et la version du document auquel vous faites référence.
    </para>

</sect1>

</article>
