Subversion Repositories svn LFS-FR

Rev

Rev 1079 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1076 jmengual 1
AUTEUR : Lars Bamberger <Lars.Bamberger at gmx dot de>
2
 
3
TRADUCTEUR : Emmanuel Trillaud <etrillaud at gmail dot com>
4
 
5
DATE : 2009-11-20
6
 
7
LICENCE : GNU Free Documentation License Version 1.2
8
 
9
SYNOPSIS : Comment chiffrer un système de fichier y compris rootfs.
10
 
11
DESCRIPTION :
12
Ce document décrit un moyen de chiffrer votre disque dur, y compris le système
13
de fichier racine. Il est destiné aux utilisateurs expérimentés et tente
14
d'éviter les difficultés du chiffrement du système de fichier racine de façon
15
direct.
16
 
17
 
18
PREREQUIS :
19
Cette astuce nécessite une connaissance suffisante de BeyongLinuxFromScratch
20
ainsi que des logiciels assez à jour. Vous devez être à l'aise pour
21
construire un logiciel, trouver, lire et comprendre toute autre documentation
22
pertinente. Vous devez savoir comment configurer un initramfs. (Voir
23
'filesystems/ramfs-rootfs-initramfs.txt' dans la documentation du kernel.)
24
Vous devez être au courant de pourquoi vous voudriez un système de fichier
25
chiffré et vous devez comprendre les menaces contre lesquelles vous essayer de
26
vous protéger. Vous devez aussi comprendre les insuffisances et les problèmes
27
de sécurité si vous suivez les instructions contenues dans cette astuce.
28
 
29
Vous devez avoir une sauvegarde de votre système dans un endroit sûr! Ceci
30
inclus un périphérique de démarrage alternatif.
31
 
32
Vous DEVEZ ABSOLUMENT LIRE ET COMPRENDRE CETTE ASTUCE AVANT DE MODIFIER VOTRE
33
SYSTÈME.
34
 
35
 
36
ASTUCE :
37
 
38
1. À Propos
39
===========
40
 
41
Cette astuce parle du chiffrement de toutes les partitions de votre disque dur
42
sauf une en utilisant LUKS pour dm-crypt. Nous démarrerons à partir d'une
43
petite partition non chiffrée en utilisant initramfs pour déchiffrer rootfs
44
(système de fichier racine).  Cette astuce suppose la présence d'un petite
45
partition disponible servant à démarrer (10 MB devraient être suffisants.)
46
 
47
 
48
2. Logiciels nécessaires et dépendances
49
=======================================
50
 
51
2.1 Logiciels présents dans BLFS
52
 
53
Vous avez besoin d'installer 'Popt', car 'cryptsetup' en dépend.Vous aurez
54
également besoin de 'uuencode' pour créer les fichiers contenant les clefs.
55
'uuencode' est inclus dans 'GMime' qui a d'autres dépendances listées dans le
56
livre BLFS.
57
 
58
2.2 Logiciels absents du livre BLFS
59
 
60
2.2.1 devmapper
61
 
62
Obtenez-le sur http://packages.debian.org/stable/source/devmapper
63
Compilez et installez-le. Nécessaire à 'cryptsetup'.
64
 
65
 
66
2.2.2 cryptsetup avec l'extension LUKS
67
 
68
Obtenez-le sur http://code.google.com/p/cryptsetup/
69
Compilez et installez-le. Nécessaire pour gérer les partitions chiffrées.
70
 
71
 
72
2.2.3 busybox
73
 
74
Obtenez-le sur http://www.busybox.net/
75
La configuration minimum requise comprend :
76
* cp
77
* hush (shell interactif non requis)
78
* mount (avec le support pour de nombreux drapeaux -o ) et
79
* switch_root.
80
 
81
Compilez-le, mais NE L'INSTALLEZ PAS. Conservez l'exécutable et nommez-le
82
"busybox-minimum". Ensuite, Re-configurez busybox pour un environnement de
83
bureau complet. Vous aurez besoin de tous les outils et utilitaires standards
84
pour le chiffrement initial de votre partition racine et pour cibler les
85
problèmes éventuels. Nommez cet exécutable "busybox-large" ou quelque chose
86
d'approchant. De même, il n'est pas nécessaire de l'installer.
87
 
88
 
89
3. Recompilez le noyau
90
======================
91
 
92
Choisissez l'algorithme que vous voudriez utiliser pour chiffrer votre disque
93
dur. Notez que c'est une décision cruciale et vous devriez vous renseignez
94
plus avant. (Voir la section REMERCIEMENTS). Les modules appropriés doivent
95
être compilés (en dur, pas comme modules) dans le noyau. Par exemple, vous
96
pouvez utilisé la méthode "twofish-cbc-essiv:sha256".
97
 
98
Également, sélectionnez l'option 'Device mapper support' du menu 'Multiple
99
devices driver support' dans la configuration du noyau, ainsi que l'option
100
'crypto target'.
101
 
102
Sélectionnez 'Initial RAM filesystem and RAM disk' sous la section 'general
103
setup' et 'RAM block device support' sous 'Block devices'.
104
 
105
NOTE : vous devez démarrer ce nouveau noyau avant d'aller plus loin.
106
 
107
 
108
4. Chiffrer les partitions autres que rootfs et autre que swap
109
==============================================================
110
 
111
Vous devez modifier votre système pour qu'il puisse gérer les partitions
112
chiffrées. Dans un premier temps, nous modifions le système pour qu'il puisse
113
gérer les partitions AUTRES que le rootfs. Il est fortement recommandé que
114
vous conserviez une sauvegarde de tous les fichiers que vous modifierez par la
115
suite.
116
 
117
4.1 Chiffrer les partitions
118
 
119
NOTE :	Ce document décrit comment chiffrer chaque partition séparément. Si
120
        vous avez plus d'un disque dur dans votre système, vous pourriez
121
        vouloir chiffrer tout le périphérique, y compris la table des
122
        partitions. Utiliser la méthode décrite dans ce document laissera la
123
        table des partitions en clair, vous exposant à une attaque. Considérez
124
        ceci comme un risque potentiel pour votre sécurité.
125
 
126
*** PIÈGE ***
127
Si /usr est une partition séparée, cryptsetup et toutes les bibliothèques
128
nécessaires à son exécution doivent être placé sur la partition racine.
129
Utilisez 'ldd cryptsetup' pour les trouver. Il peut être nécessaire de changer
130
le niveau d'exécution à 1 pour pouvoir démonter /usr. Assurez-vous également
131
que le shell de root n'utilise pas de bibliothèques sur cette partition. Si
132
nécessaire, compilez un shell statique à l'usage de root.
133
 
134
La procédure pour chaque partition est la suivante :
135
 
136
1) Créez autant de clefs que vous voulez pour la partition, par exemple :
137
   head -c 2880 /dev/urandom | uuencode -m - | head -n-1 | tail -n+2 > keyfile
138
   ou utiliser une phrase de passe facile à retenir.
139
 
140
2) Faites une sauvegarde sécurisée de votre clef et sécurisez le fichier de
141
   la clef par 'chmod 0400' ou autre. Votre clef de sauvegarde doit être
142
   sécurisée (i.e. pas sur votre ordinateur). Souvenez-vous, si vous perdez
143
   votre clé, vous ne serez définitivement PLUS capable d'accéder à vos
144
   données.
145
 
146
3) Faites une sauvegarde des données présentes sur la partition.
147
 
148
4) Démontez la partition.
149
 
150
5) Créez une partition chiffrée (Toutes les données présentes sur cette
151
   partition seront perdues). Lancez
152
   cryptsetup -c $algorithme-chiffrement luksFormat /dev/sd?? $keyfile
153
   Remplacez '$algorithme-chiffrement', '/dev/sd??' and '$keyfile' avec les
154
   valeur correspondantes.
155
 
156
6) Optionnellement, ajoutez d'autres clefs à la partition. Lancez
157
   cryptsetup -y -d $keyfile luksAddKey /dev/sd??
158
   Remplacez '$keyfile' de la même façon que plus haut et '/dev/sd??' par la
159
   partition correspondante.
160
 
161
7) Ouvrez la partition. Lancez
162
   cryptsetup -d $keyfile luksOpen /dev/sd?? sd??
163
   Remplacez '$keyfile' et '/dev/sd??' par les valeurs correspondantes.
164
   Remplacez 'sd??' par un nom ayant du sens. Si tout c'est bien passé, la
165
   partition apparaîtra comme '/dev/mapper/sd??' où 'sd??' est le nom que vous
166
   avez choisi.
167
 
168
8) Créez un système de fichier sur la partition. Lancez
169
   mkefs.$WHATEVER /dev/mapper/sd??
170
   Remplacez '$WHATEVER' par le type de système de fichier que vous voulez
171
   utiliser (e.g. ext2) et '/dev/mapper/sd??' par la partition correspondante.
172
 
173
9) Modifier /etc/fstab
174
   Puisque le point de montage de la partition chiffrée a changé, vous devez
175
   dire au système de fichier où la trouver. Modifiez le point de montage en
176
   insérant "mapper/" dans le champ du périphérique.
177
 
178
   Exemple :
179
   /dev/sda4         /home ext2 defaults 1 2
180
   devient
181
   /dev/mapper/sda4  /home ext2 defaults 1 2
182
 
183
10) Monter le système de fichier avec 'mount /dev/mapper/sd??'
184
 
185
11) Copier les données sur la partition.
186
 
187
 
188
4.2 Configurer le système pour qu'il monte et déchiffre automatiquement le(s)
189
    partition(s)
190
 
191
Créez un script de démarrage qui déchiffrera automatiquement vos partitions
192
chiffrées. On suppose que les phrases des passes sont stockées dans /etc/crypt
193
par exemple. Notez que conserver des phrases de passes sur le disque peut
194
poser des problèmes de sécurité. Utilisez le modèle pour les scripts de
195
démarrages qui est inclus dans BLFS et faites le exécuter :
196
 
197
/sbin/cryptsetup -d /etc/crypt/$PARTITION.key luksOpen \
198
   /dev/$PARTITION $PARTITION
199
 
200
pour chaque partition chiffrée autre que la partition racine et le(s)
201
partition(s) swap.
202
 
203
Exemple :
204
 
205
#!/bin/sh
206
########################################################################
207
# Début $rc_base/init.d/cryptsetup
208
#
209
# Description : Rends disponible les système de fichiers chiffrés pour être
210
#				monter et nettoyer après
211
#
212
# Auteur      : Lars Bamberger
213
#
214
# Version     : 00.01
215
#
216
# Notes       : Il ne devrait pas être exécuter automatiquement avec un autre
217
#				argument que "start". Durant l'arrêt et le redémarrage, il est
218
#				suffisant de démonter les systèmes de fichier. /dev/mapper/*
219
#				disparaît quand le noyau s'arrête ou redémarre.
220
#
221
########################################################################
222
 
223
. /etc/sysconfig/rc
224
. ${rc_functions}
225
PROC=/sbin/cryptsetup
226
 
227
case "${1}" in
228
	start)
229
		boot_mesg "luksOpen Home..."
230
		$PROC -d /etc/crypt/home.key luksOpen /dev/sda4 sda4
231
		evaluate_retval
232
	stop)
233
		boot_mesg "luksClose Home..."
234
		$PROC luksClose sda4
235
		evaluate_retval
236
		;;
237
	reload)
238
		boot_mesg "Reloading home..."
239
		$PROC reload sda4
240
		evaluate_retval
241
		;;
242
	restart)
243
		${0} stop
244
		sleep 1
245
		${0} start
246
		;;
247
	status)
248
		$PROC status sda4
249
		;;
250
	*)
251
		echo "Usage: ${0} {start|stop|reload|restart|status}"
252
		exit 1
253
		;;
254
esac
255
# Fin $rc_base/init.d/cryptsetup
256
 
257
Tout d'abord, avant de procéder, assurez-vous que tout ce qui a été fait
258
jusqu'à présent fonctionne comme prévu. Familiarisez-vous avec cette manière
259
de chiffrer vos partitions.
260
Créez un lien symbolique pour que le script soit lancé au démarrage :
261
 
262
# cd /etc/rc.d/rcsysinit.d
263
# ln -s ../init.d/cryptsetup S19cryptsetup
264
 
265
Vérifiez une nouvelle fois que le démarrage, le redémarrage, l'arrêt etc
266
fonctionnent normalement.
267
 
268
 
269
5. Un mot sur le chiffrement de(s) partition(s) de swap
270
=======================================================
271
 
272
N'oubliez pas de chiffrer vos partitions swap. Beaucoup de données
273
intéressantes se trouvent sur ces partitions. Ne considérez pas que vos
274
données sont en sûreté si vous n'utilisez pas des espaces swap chiffrés.
275
 
276
En théorie, les données présentent sur le(s) partition(s) swap n'ont pas
277
besoin d'être conservé entre les redémarrages. Cela signifie que nous
278
pourrions créer un nouvelle espace de swap au démarrage en utilisant une clé
279
de chiffrement aléatoire (donc différente) à chaque démarrage. De cette façon
280
vous n'avez pas à vous soucier de la gestion des clefs de chiffrement pour
281
l'espace de swap et vous n'avez pas à la stocker (sauf en mémoire). On pourrai
282
considérer cela comme une sécurité supplémentaire.
283
Néanmoins, si vous suspendez votre système (en RAM ou sur disque), les
284
données de l'espace de swap doit rester consistantes. Vous devrez donc traiter
285
le(s) partition(s) swap comme si c'était des partitions standards. Dans ce
286
cas, vous devrez les chiffrer comme expliqué plus haut.
287
 
288
 
289
6. Chiffrer rootfs
290
==================
291
 
292
Il n'est pas possible de chiffrer rootfs comme les autres partitions, car le
293
système s'exécute dessus. L'idée est de créer un initramfs contenant tous
294
le nécessaire pour chiffrer (et déchiffrer) rootfs (Voir la documentation du
295
noyau pour les détails : 'filesystems/ramfs-rootfs-initramfs.txt').
296
 
297
Vous aurez besoin de tous les répertoires standards (bin, sbin,
298
usr/{bin,sbin}, proc, sys, dev, lib). Dans bin, nous mettons busybox-large
299
(renommé en busybox), ainsi qu'un lien symbolique vers busybox appelé hush.
300
Copiez cryptsetup vers sbin.  Placez quelques périphérique utiles dans dev :
301
console, null, sd??, ainsi qu'un répertoire 'mapper' contenant 'control'. Puis
302
faites une copie de dev :
303
cp -a dev init-dev
304
Dans lib (et dev) placez tout ce qui est nécessaire à l'exécution de busybox
305
et cryptsetup.
306
 
307
Le script d'initialisation est le suivant :
308
#!/bin/hush
309
/bin/busybox mount -t proc proc /proc
310
/bin/busybox mount -t sysfs sysfs /sys
311
/bin/busybox mount -t tmpfs tmpfs /dev
312
/bin/busybox cp -a /init-dev/* /dev
313
/bin/busybox --install -s
314
exec /bin/busybox hush
315
 
316
Placez tout cela dans un répertoire (init y sera et non pas dans sbin), puis
317
créez l'image avec :
318
find . | cpio --quiet -H newc -o | gzip -9 -n > /boot/imagefile.img
319
Transmettez l'argument initrd approprié au noyau lors du démarrage et vous
320
atterrirez dans un shell hush après le démarrage du système.
321
 
322
*** PIÈGES ***
323
cryptsetup a besoin que proc et sys soient monté. Il requiert aussi le
324
répertoire dev. Puisque nous voulons sauvegarder dev quand nous lançons
325
switch_root dans a suite, nous le montons comme tmpfs. Cela signifie que les
326
périphériques de dev seront absent, il faut qu'on les copier dans dev. Notez
327
bien que vous avez besoin que 'null' et 'console' soient présent dans dev
328
avant de monter tmpfs sur dev.
329
 
330
Une fois le shell a disposition, chiffrez votre rootfs comme n'importe qu'elle
331
autre partitions comme décrit plus haut. N'oubliez pas la sauvegarde!
332
Assurez-vous ABSOLUMENT d'être capable À COUP SÛR de monter et d'accéder à
333
la sauvegarde non chiffrée de rootfs depuis le shell hush!
334
 
335
Ensuite, créez la partition racine chiffrée. Notez que la phrase de passe ne
336
sera stockée nul part que le disk, donc lancez :
337
 
338
cryptsetup -y -c $cipher-algorithm luksFormat /dev/sd??
339
 
340
pour créer le rootfs chiffré. Remplacez '$cipher-algorithm' et '/dev/sd??' par
341
leur valeurs respectives. Ensuite, ouvrez la partition, formatez là, et
342
restaurez la sauvegarde :
343
 
344
cryptsetup luksOpen /dev/sd?? sd??
345
$BAKUROOTFS/mkefs.$TYPE /dev/mapper/sd??
346
mkdir /new-root
347
mount -t $FSTYPE /dev/mapper/sd?? /new-root
348
cp -a $BACKUPROOTFS /new-root
349
 
350
*** PIÈGE ***
351
Puique votre ancien rootfs n'est pas monté, vous ne devriez pas être capable
352
d'exécuter mkefs à cause de bibliothèques manquantes. Soit copiez ce qui est
353
nécessaire à un emplacement accessible à l'éditeur de lien, soit utilisez la
354
version de mkfs fourni avec busybox. Assurez vous que busybox est configuré en
355
conséquence.
356
 
357
Ensuite, modifier /etc/fstab (sur /new-root) pour prendre en compte le nouveau
358
périphérique de rootfs. Modifiez aussi le script cryptsetup comme décrit plus
359
bas (7. PIÈGE).
360
 
361
 
362
7. Déchiffrer rootfs lors des démarrages suivants
363
=================================================
364
 
365
Comme dans 6., créez un initramfs. La différence est que nous utiliserons
366
l'exécutable "busybox-minimum" et que vous aurez besoin du répertoire
367
supplémentaire new-root. N'oubliez pas le lien symbolique 'hush'.
368
L'initialisation est comme suit : (remplacez 'sd??' par le périphérique racine
369
et ajustez le type de système de fichier).
370
 
371
#!/bin/hush
372
/bin/busybox mount -t proc proc /proc
373
/bin/busybox mount -t sysfs sysfs /sys
374
/bin/busybox mount -t tmpfs tmpfs /dev
375
/bin/busybox cp -a /init-dev/* /dev
376
/sbin/cryptsetup luksOpen /dev/sd?? sd??
377
/bin/busybox mount -r -t ext2 /dev/mapper/sd?? /new-root
378
/bin/busybox mount --move /proc /new-root/proc
379
/bin/busybox mount --move /sys /new-root/sys
380
/bin/busybox mount --move /dev /new-root/dev
381
exec /bin/busybox switch_root /new-root /sbin/init $@
382
 
383
*** PIÈGE ***
384
Vous voulez conserver /proc /sys and /dev après switch_root car cryptsetup les
385
utilise. D'où la commande 'mount --move'. Notez que /dev/mapper/sd?? (le
386
périphérique racine) ne sera plus là quand vous aurez monté la vrai partition
387
racine, exécuter switch_root et que rootfs aura démarré udev. C'est pour cela
388
que ce périphérique doit être recréé. Modifiez donc le script d'initialisation
389
cryptsetup en ajoutant :
390
 
391
		if [[ ! -b /dev/mapper/sd?? ]];
392
		then
393
			boot_mesg "Making device for rootfs..."
394
			/bin/mknod -m 0600 /dev/mapper/sd?? b 254 0
395
			evaluate_retval;
396
		fi
397
 
398
à la section 'start' du script
399
 
400
 
401
8. S'assurer que la sécurité n'est pas compromise
402
=================================================
403
 
404
Une fois que tout marche comme il le devrait, supprimez la sauvegarde non
405
chiffrée de votre rootfs. Protégez votre chargeur de démarrage par un mot de
406
passe pour supprimer la possibilité de modifier les paramètres de démarrage
407
sans autorisation.
408
Créez un script de démarrage (checkbootfs) qui s'assure que la partition non
409
chiffrée utilisée pour démarrer n'est pas compromise. Utilisez quelque-chose
410
comme :
411
 
412
		boot_mesg "Checking integrity of boot FS..."
413
		if
414
		[[ $(/bin/md5sum -b /dev/sd??) == \
415
		"$whatevermd5sum */dev/sd??" ]] \
416
			&& \
417
		[[ $(/bin/sha1sum -b /dev/sd??) == \
418
		"$whatevensha1sum */dev/sd??" ]];
419
		then
420
			echo_ok;
421
		else
422
			echo_failure
423
boot_mesg -n "FAILURE:\n\nThe boot file system seems to have been
424
altered!\n\n" ${FAILURE}
425
        boot_mesg -n " DO NOT TRUST THIS SYSTEM!\n\n"
426
        boot_mesg_flush
427
 
428
*** PIÈGE ***
429
Assurez-vous que c'est la dernière chose que vous implémenterez, car les
430
sommes de contrôle changerons lors de la mise en œuvre. Les sommes de
431
contrôle changerons aussi si vous exécutez fsck sur la partition de démarrage.
432
 
433
 
434
REMERCIEMENTS :
435
  * Various pour les pages de wiki
436
    http://de.gentoo-wiki.com/Cryptsetup-luks_initramfs
437
    et
438
    http://en.gentoo-wiki.com/wiki/SECURITY_System_Encryption_DM-Crypt_with_LUKS
439
  * Clemens Fruhwirth (http://clemens.endorphin.org/)
440
    pour LUKS et dm-crypt: http://luks.endorphin.org/dm-crypt
441
 
442
HISTORIQUE DES CHANGEMENTS :
443
[2009-11-23]
444
  * lister les dépendances du livre BLFS
445
[2009-11-20]
446
  * cryptsetup a besoin de /dev/urandom
447
  * mkefs pourrai ne pas fonctionner dans initramfs
448
  * mise à jour de certaines URLs
449
  * changements mineurs
450
[2009-02-15]
451
  * Réécriture basique.
452
[2008-02-17]
453
  * Astuce initiale.
454
 
455
HISTORIQUE DE LA TRADUCTION :
456
[2009-12-16]
457
  * traduction de la version du [2009-11-23]