Créer et utiliser une partition cryptée

Si ca peut servir à quelqu’un… je poste ma methode:

Prérequis:

Avoir un noyau au minimum 2.6.4 (2.6.10 pour plus de sécurité) configuré avec BLK_DEV_DM et DM_CRYPT. Ces options sont présentes par défaut dans les noyaux binaires debian (pas de recompilation nécessaire)

│ Symbol: BLK_DEV_DM [=m] │ │ Prompt: Device mapper support │ │ Defined at drivers/md/Kconfig:186 │ │ Depends on: MD │ │ Location: │ │ -> Device Drivers │ │ -> Multi-device support (RAID and LVM) │ │ -> Multiple devices driver support (RAID and LVM) (MD [=y]) │ Symbol: DM_CRYPT [=m] │ │ Prompt: Crypt target support │ │ Defined at drivers/md/Kconfig:202 │ │ Depends on: BLK_DEV_DM && EXPERIMENTAL │ │ Location: │ │ -> Device Drivers │ │ -> Multi-device support (RAID and LVM) │ │ -> Multiple devices driver support (RAID and LVM) (MD [=y]) │ │ -> Device mapper support (BLK_DEV_DM [=m]) │ │ Selects: CRYPTO

Avoir une partition libre … (sisi…). Pour ma machine, c’est /dev/hda12

Il est interessant de s’assurer de l’integrité de secteurs sur cette partition et surtout de la remplir avec des données aléatoires (pour eviter certaines attaques)
2.a)
Verifier le disque et remplir avec des données aléatoires:

apt-get install e2fsprogs /sbin/badblocks -s -w -t random -v /dev/hda12
Ou
2.b)
Ne pas verifier le disque, seulement remplir avec des données aléatoires:

Installation des outils et scripts de démarrage:

[quote]cryptsetup: /.
cryptsetup: /etc
cryptsetup: /etc/default
cryptsetup: /etc/default/cryptdisks
cryptsetup: /etc/init.d
cryptsetup: /etc/init.d/cryptdisks-early
cryptsetup: /etc/init.d/cryptdisks

cryptsetup: /lib
cryptsetup: /lib/cryptsetup
cryptsetup: /lib/cryptsetup/checks
cryptsetup: /lib/cryptsetup/checks/ext2
cryptsetup: /lib/cryptsetup/checks/swap
cryptsetup: /lib/cryptsetup/checks/un_vol_id
cryptsetup: /lib/cryptsetup/checks/vol_id
cryptsetup: /lib/cryptsetup/checks/xfs
cryptsetup: /lib/cryptsetup/scripts
cryptsetup: /lib/cryptsetup/scripts/decrypt_gpg
cryptsetup: /lib/cryptsetup/scripts/decrypt_old_ssl
cryptsetup: /lib/cryptsetup/scripts/decrypt_ssl
cryptsetup: /lib/cryptsetup/cryptdisks.functions
cryptsetup: /sbin
cryptsetup: /sbin/cryptsetup
cryptsetup: /usr
cryptsetup: /usr/sbin
cryptsetup: /usr/sbin/luksformat
cryptsetup: /usr/share
cryptsetup: /usr/share/initramfs-tools
cryptsetup: /usr/share/initramfs-tools/hooks
cryptsetup: /usr/share/initramfs-tools/hooks/cryptroot
cryptsetup: /usr/share/initramfs-tools/scripts
cryptsetup: /usr/share/initramfs-tools/scripts/local-top
cryptsetup: /usr/share/initramfs-tools/scripts/local-top/cryptroot
cryptsetup: /usr/share/initramfs-tools/conf.d
cryptsetup: /usr/share/lintian
cryptsetup: /usr/share/lintian/overrides
cryptsetup: /usr/share/lintian/overrides/cryptsetup
cryptsetup: /usr/share/man
cryptsetup: /usr/share/man/man5
cryptsetup: /usr/share/man/man5/crypttab.5.gz
cryptsetup: /usr/share/man/man8
cryptsetup: /usr/share/man/man8/cryptsetup.8.gz
cryptsetup: /usr/share/man/man8/luksformat.8.gz
cryptsetup: /usr/share/locale
cryptsetup: /usr/share/locale/de
cryptsetup: /usr/share/locale/de/LC_MESSAGES
cryptsetup: /usr/share/locale/de/LC_MESSAGES/cryptsetup-luks.mo
cryptsetup: /usr/share/doc
cryptsetup: /usr/share/doc/cryptsetup
cryptsetup: /usr/share/doc/cryptsetup/NEWS.Debian.gz
cryptsetup: /usr/share/doc/cryptsetup/changelog.gz
cryptsetup: /usr/share/doc/cryptsetup/AUTHORS
cryptsetup: /usr/share/doc/cryptsetup/README.html
cryptsetup: /usr/share/doc/cryptsetup/CryptoRoot.HowTo
cryptsetup: /usr/share/doc/cryptsetup/CryptoSwap.HowTo
cryptsetup: /usr/share/doc/cryptsetup/usbcrypto.mkinitrd
cryptsetup: /usr/share/doc/cryptsetup/usbcrypto.root
cryptsetup: /usr/share/doc/cryptsetup/README.initramfs
cryptsetup: /usr/share/doc/cryptsetup/README.Debian
cryptsetup: /usr/share/doc/cryptsetup/TODO.Debian
cryptsetup: /usr/share/doc/cryptsetup/copyright
cryptsetup: /usr/share/doc/cryptsetup/examples
cryptsetup: /usr/share/doc/cryptsetup/examples/gen-ssl-key
cryptsetup: /usr/share/doc/cryptsetup/examples/gen-old-ssl-key
cryptsetup: /usr/share/doc/cryptsetup/changelog.Debian.gz
cryptsetup: /usr/share/doc/cryptsetup/usbcrypto.hotplug.gz
cryptsetup: /usr/lib
cryptsetup: /usr/lib/libcryptsetup.so.0.0.0
cryptsetup: /usr/lib/libcryptsetup.la
cryptsetup: /usr/include
cryptsetup: /usr/include/libcryptsetup.h
cryptsetup: /usr/lib/libcryptsetup.so.0
cryptsetup: /usr/lib/libcryptsetup.so[/quote]

[quote]dmsetup: /.
dmsetup: /sbin
dmsetup: /sbin/dmsetup
dmsetup: /usr
dmsetup: /usr/share
dmsetup: /usr/share/man
dmsetup: /usr/share/man/man8
dmsetup: /usr/share/man/man8/dmsetup.8.gz
dmsetup: /usr/share/doc/dmsetup
dmsetup: /usr/share/doc/dmsetup/INTRO
dmsetup: /usr/share/doc/dmsetup/copyright
dmsetup: /usr/share/doc/dmsetup/changelog.Debian.gz
dmsetup: /usr/share/doc/dmsetup/changelog.gz
[/quote]
2)
Ici j’utilise LUKS qui définit un standard pour le chiffrement de système de fichier. Vous pouvez très bien faire votre propre cuisine mais je n’ai pas trouvé d’interet( Luksformat fait appel à cryptsetup que vous pouvez utilisez directement pour utiliser d’autre methode de cryptage, etc…)

On formate la partition hda12 avec dedans un système de fichier ext2

luksformat -t ext2 /dev/hda12
Il vous demande plusieurs fois le mot de passe.
Essayez de vous en rappeler :wink:

Créer le point de montage

Et rajouter cette ligne pour que dm puisse faire l’association entre /dev/mapper/cdisk1 et /mnt/cdisk1:

Automatiser le montage et decryptage au boot:
/etc/init.d/cryptdisks lit le fichier /etc/crypttab et monte les partitions en demandant le passe au boot.
Créez ce fichier:

Ici il y a notre ligne, on utilise luks et ses options par défaut.
L’autre exemple permet de stocker la clef, cryptée avec SSL, sur une clef usb (qu’il faudra donc monter avant, voir le parametre CRYPTDISKS_MOUNT dans /etc/default/cryptdisks)

Si vous avez un /proc/crypto avec les priorités standard, vous avez alors votre partition cryptée en AES, le mot de passe est hashé en SHA256, blindé contre une attaque par dictionnaire.

Je me rend compte à l’instant que vous pouvez acceder à cette partition a partir de windows grace à:
freeotfe.org/ (non GPL mais sources fournies)
Dans ce cas, il faut probablement ne pas fixer l’option -t ext2 dans l’etape 2 si bien que la partition décrypté sera au format vfat, accessible sans problème sous windows.
J’ai pas essayé je n’ai pas encore trouvé d’utilité à Windows :slightly_smiling:

Dans le repertoire doc, vous trouverez une moultitude de possibilités de cryptage: cryptage du swap, cryptage de /, cryptage complet d’une clef usb, déplacement de la clef secrete cryptée sur une clef usb ,…

ps: Etant donné que j’avais déja une partition cryptée et plus d’autre partition, j’ai du refaire la manip pour créer ce post. Donc c’est à paufiner probablement: peut-etre que certaines étapes sont manquantes si on part de zéro. Prévenez-moi, je modifierai.

dans le cas où on veut crypter un disque dur externe (ce qui peut justifier ici l’utilisation de vfat), le montage se passe de quelle manière ? le mot de passe est demandé quand on utilise la commande mount ?

[quote=“Fritz_smh”]dans le cas où on veut crypter un disque dur externe (ce qui peut justifier ici l’utilisation de vfat), le montage se passe de quelle manière ?
[/quote]
Comme pour un disque dur interne

Non, mount n’a pas ce mecanisme. Mount va monter le dm après qu’il ai été crée (et donc décrypté) par luks.
C’est cryptsetup qui va

  • demander le mot de passe :

ou

  • lire la clef si elle est dispo dans un fichier :

Si on lance

/etc/init.d/cryptdisks start, le système lit /etc/crypttab puis demande le passe donc au boot on a un message:

[quote] * Starting remaining crypto disks…
Enter LUKS passphrase
[/quote]Si rien n’est rentré au bout de 10 secondes, le boot continue.

En manuel:

[code]Montage:
root@debian# /etc/init.d/cryptdisks start
ou /sbin/cryptsetup luksOpen /dev/hda12 cdisk1

  • Starting remaining crypto disks…
    Enter LUKS passphrase:
    key slot 0 unlocked.
    Command successful.
    [ ok ]
    root@debian# ll /mnt/cdisk1/
    total 0
    root@debian# mount /mnt/cdisk1/
    root@debian# ll /mnt/cdisk1
    total 83
    drwx------ 2 root root 12288 2006-11-03 12:32 lost+found
    -rw-r–r-- 1 root root 71345 2006-11-03 14:54 photo_de_ma_soeur.png

Démontage:
root@debian# umount /mnt/cdisk1
root@debian# cryptsetup luksClose cdisk1[/code]

merci pour la réponse :slightly_smiling: tout s’éclaire…

par contre, je suppose que pour ces genres de périphériques, on peu abandonné l’idée d’un montage automatique ?

Tu veux dire en hotplug?
Oui oui c’est géré.

Sous gnome t’as meme une popup qui apparait. J’ai pas trop testé a vrai dire.

c’est magnifique alors :slightly_smiling:

vivement que je teste ça !

En regardant un peu le hotplug qui peut etre géré par pmount, je me suis rendu compte que justement pmount permettait de monter une partition luks, donc exactement ce que tu demandais.
Vu que moi c’est pas un peripherique amovible (/sys/block/hda/removable=0) j’ai du le rajouter dans /etc/pmount.allow et ensuite en tant qu’utilisateur (qui doit etre dans le groupe plugdev):
pmount /dev/hda12

Et la partition est prete a l’emploi (dans /media/hda12)

Vas-y, ca me permettra de savoir si j’ai oublié des etapes.

Bonjour,

Je vais acquérir dans peu de temps un laptop.
J’aimerai installer sur celui-ci une Debian sur un système de fichier crypté.
Cette procédure fonctionne t’elle si on l’applique à partir d’un Live CD ?(je vais prendre 150 Mo pour /boot et l’autre partition sera cryptée).

Merci pour vos réponses :slightly_smiling:

Je crois que le netinstall propose de crypter la partition grâce à lvm.

Mai sje ne suis pas sur qu’il ai pas une augmentation de la consommation quelque soit la solution utilisé.

Je testerai ça à l’occasion, c’est en projet.
En tout cas merci énormément pour ce tuto, ça va me servir ! :smiley:

Si on veut créer un répertoire crypté, par exemple un répertoire temporaire pour des créations de PDFs confidentiels à la volée (cas personnel), cela peut se faire simplement.

  1. Prévoir une place de 2G mettons sous /var
    Faire un fichier à partir de urandom (pas random, ça prendrait 2 ans :slightly_smiling:

(ici 20*100M=2G, attention c’est long)
Associer ce fichier à un périphérique loop

Il faut maintenant créer un volume crypté et préparer volume

[code]# echo “motdepassedelamortquitue” | cryptsetup -c aes-cbc-essiv:sha256 create tmps /dev/loop0

losetup /dev/loop1 /dev/mapper/tmps

mkfs.ext3 /dev/loop1

[/code]
Tout est près

losetup -d /dev/loop1 cryptsetup remove tmps losetup -d /dev/loop0

  1. Préparer un crypt de connexion. Cela peut être fait avec un script /etc/init.d/tmps

PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Preparation /tmps" NAME=divers DAEMON=/bin/true SCRIPTNAME=/etc/init.d/$NAME [ -x "$DAEMON" ] || exit 0 [ -r /etc/default/$NAME ] && . /etc/default/$NAME . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { losetup /dev/loop0 /var/tmps.crypt echo -n "Mot de passe:" read PASSE echo $PASSE | cryptsetup -c aes-cbc-essiv:sha256 create tmps /dev/loop0 losetup /dev/loop1 /dev/mapper/tmps mount /dev/loop1 /tmps } do_stop() { umount /tmps losetup -d /dev/loop1 cryptsetup remove tmps losetup -d /dev/loop0 } do_reload() { return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac

/etc/init.d/tmps start

lancera le montage

/etc/init.d/tmps stop démontera le volume. Il est intéressant de faire un lien

/etc/rc6.d/K90tmps et /etc/rc0.d/K90tmps faire /etc/init.d/tmps pour démonter quoiqu’il arrive ce volume. Si quelqu’un vole la machine, il ne trouvera rien d’exploitable sur la machine.

Pourquoi tu monte le volume en fonction d’init et pas en fonction de l’utilisateur qui se connecte ?
Si c’est un rep pour toi autant qu’il soit monté que quand toi tu t’y connect non ? Ou alors pour le groupe d’utilisateurs en question.

  • Le script n’est pas éxécuter automatiquement mais à la demande, sauf pour le démontage à l’extinction.
  • En l’occurrence, l’utilisateur est www-data et il est toujours présent.

Ok j’avais pas bien compris tu le met dans /etc/init.d uniquement pour bien vérifié qu’il soit démonté comme il faut.

Pour un utilisateur d’une machine, j’imagine que ça doit pouvoir se monter dans le .profile et s’arreté dans dans un .bash_logout (ou équivalent).

Oui.

salut tout le monde,

je ne sais pas si je peux demander ça ici ou créer un nouveau topic:
j’ai installé une debian lenny sur une machine vmware.
et lors de l’installation j’ai demandé à ce qu’il me crée mes partitions et les chiffres
(j’ai utilisé les options par défaut).
j’ai essayé de récupérer un fichier effacé par erreur avec testdisk.
le problème est que je ne peux plus redémarrer ma machine.

Auriez vous une idée sur comment récupérer les données?

Merci de votre aide.
BoooBooo