eCryptfs est un système de fichiers cryptographiques empilés de classe entreprise conforme à POSIX pour Linux. Vous pouvez l'utiliser pour chiffrer des partitions ainsi que des répertoires qui n'utilisent pas de partition propre, quel que soit le système de fichiers sous-jacent, le type de partition, etc. Ce tutoriel montre comment utiliser eCryptfs pour chiffrer un répertoire sur Debian Jessie.
1 Remarque préliminaire
Dans ce didacticiel, je chiffrerai mon répertoire personnel, /home/falko/, qui se trouve sur la partition / (c'est-à-dire que /home/falko/ est un répertoire ordinaire et n'utilise pas sa propre partition).
2 Installer eCryptfs
eCryptfs peut facilement être installé comme suit :
apt-get -y install ecryptfs-utils
3 Chiffrer un répertoire
Je vais maintenant chiffrer mon répertoire personnel /home/falko/. Comme il y a déjà des fichiers (non cryptés) dans ce répertoire, je dois en faire une sauvegarde afin de pouvoir les restaurer ultérieurement dans le répertoire /home/falko/ alors crypté (sinon ces fichiers ne peuvent pas être consultés/lus tant que le répertoire est crypté):
cp -pfr /home/falko/ /tmp/
Je peux maintenant chiffrer le répertoire /home/falko/ en le montant avec le type de système de fichiers ecryptfs :
mount -t ecryptfs /home/falko /home/falko
Lorsque vous faites cela pour la première fois, vous devrez répondre à quelques questions :
[email protected]:/tmp# mount -t ecryptfs /home/falko /home/falko
Select key type to use for newly created files:
1) tspi
2) passphrase
Selection: <-- 2
Passphrase: <-- Enter a secure password
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32
2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]: <-- Press ENTER
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]: <-- Press ENTER
Enable plaintext passthrough (y/n) [n]: <-- Press ENTER
Enable filename encryption (y/n) [n]: <-- Press ENTER
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=bd28c38da9fc938b
WARNING: Based on the contents of [/root/.ecryptfs/sig-cache.txt],
it looks like you have never mounted with this key
before. This could mean that you have typed your
passphrase wrong.
Would you like to proceed with the mount (yes/no)? : <-- yes
Would you like to append sig [bd28c38da9fc938b] to
[/root/.ecryptfs/sig-cache.txt]
in order to avoid this warning in the future (yes/no)? : <-- yes
Successfully appended new sig to user sig cache file
Mounted eCryptfs
[email protected]:/home/administrator#
Jetez un oeil à la sortie de
mount
et vous devriez voir que /home/falko/ est maintenant crypté :
Restaurons notre sauvegarde dans le répertoire désormais chiffré /home/falko/ et supprimons ensuite la sauvegarde :
cp -pfr /tmp/falko/ /home/
rm -fr /tmp/falko/
À des fins de test, copions un autre fichier, par ex. /etc/hosts, vers /home/falko/ pour vérifier s'il est vraiment crypté :
cp /etc/hosts /home/falko
Alors que /home/falko/ est monté avec le type de système de fichiers ecryptfs, il devrait être possible de lire le contenu de /home/falko/hosts :
cat /home/falko/hosts
Démontez maintenant /home/falko/...
umount /home/falko
... et réessayez de lire /home/falko/hosts, et vous devriez obtenir des informations cryptées :
cat /home/falko/hosts
4 Comment monter automatiquement une partition chiffrée au démarrage
Bien sûr, nous ne voulons pas monter /home/falko/ manuellement à chaque fois - ce serait mieux s'il pouvait être monté automatiquement au démarrage. Pour ce faire, nous avons besoin d'un fichier de phrase secrète, et pour des raisons de sécurité, je souhaite que ce fichier de phrase secrète soit situé sur une clé USB.
Branchez une clé USB et lancez
fdisk -l
pour connaître son nom d'appareil et son type de système de fichiers :
[email protected]:~# fdisk -l
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00035e35
Device Boot Start End Blocks Id System
/dev/sda1 * 1 3793 30461952 83 Linux
/dev/sda2 3793 3917 992257 5 Extended
/dev/sda5 3793 3917 992256 82 Linux swap / Solaris
Disk /dev/sdb: 8086 MB, 8086617600 bytes
255 heads, 63 sectors/track, 983 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000e439f
Device Boot Start End Blocks Id System
/dev/sdb1 1 983 7895916 b W95 FAT32
[email protected]:~#
Dans mon cas, le nom du périphérique est /dev/sdb1, et il utilise un système de fichiers FAT32.
Montons la clé USB sur /mnt/usb :
mkdir /mnt/usb
mount /dev/sdb1 /mnt/usb
Jetez un oeil à la sortie de
mount
... et vous devriez voir qu'il a été monté avec le type de système de fichiers vfat (FAT32) - nous aurons besoin de ces informations plus tard pour notre fichier /etc/fstab :
[email protected]:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=124251,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=202132k,mode=755)
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
/dev/sdb1 on /mnt/usb type vfat (rw)
[email protected]:~#
Examinez maintenant le contenu de /root/.ecryptfs/sig-cache.txt :
cat /root/.ecryptfs/sig-cache.txt
bd28c38da9fc938b
Nous avons besoin de cette signature pour le fichier /root/.ecryptfsrc que nous créons comme suit :
nano /root/.ecryptfsrc
Assurez-vous d'utiliser la signature du fichier /root/.ecryptfs/sig-cache.txt dans la ligne ecryptfs_sig :
key=passphrase:passphrase_passwd_file=/mnt/usb/passwd_file.txt ecryptfs_sig=bd28c38da9fc938b ecryptfs_cipher=aes ecryptfs_key_bytes=16 ecryptfs_passthrough=n ecryptfs_enable_filename_crypto=n
Nous créons maintenant le fichier de phrase secrète sur notre clé USB :
nano /mnt/usb/passwd_file.txt
passphrase_passwd=some_passphrase
Assurez-vous d'utiliser la phrase secrète correcte, c'est-à-dire la phrase secrète que vous utiliseriez si vous montiez le répertoire manuellement.
Ouvrez ensuite /etc/fstab...
nano /etc/fstab
... et ajoutez les deux lignes suivantes (assurez-vous d'utiliser le bon type de système de fichiers pour votre clé USB - vfat dans mon cas) :
[...] /dev/sdb1 /mnt/usb vfat ro 0 0 /home/falko /home/falko ecryptfs defaults 0 0
(Il est important que la ligne de la clé USB vienne avant la ligne de la partition chiffrée car la clé USB doit être montée avant que la partition chiffrée ne puisse être montée !)
Redémarrez ensuite le système :
reboot
Si tout se passe bien, votre partition cryptée devrait être automatiquement montée après le redémarrage. Cependant, il est possible que votre système ne puisse pas monter votre clé USB lors du démarrage, ce qui signifie que votre partition chiffrée ne peut pas non plus être montée. Si cela se produit, éditez /etc/rc.local (ce script est exécuté à la fin du processus de démarrage)...
nano /etc/rc.local
... et ajoutez la ligne /bin/mount -a avant la ligne exit 0 :
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. /bin/mount -a exit 0
Cela (re-)montera toutes les partitions (y compris votre clé USB et la partition chiffrée) à la fin du processus de démarrage.
5 liens
- eCryptfs :https://launchpad.net/ecryptfs
- Debian :http://www.debian.org/