Rendez-vous sur Arrakis, Le site perso d'un hacker libriste curieux crêpophile étourdi
Le 11/09/2019 à 14:53 dans /Logiciel-libre/OpenBSD/

Chiffrer son dossier personnel

Si pour une quelconque raison votre installation n'est pas chiffrée entièrement, comme c'est expliqué dans la FAQ (en fr), on peut quand même chiffrer le /home après coup. Ce dernier contient tous vos mots de passes et préférences configurés dans les applications que vous utilisez (messagerie, ssh…)…

Tout d'abord, sauvegardez entièrement votre dossier /home, puisque nous allons devoir l'effacer.

Voici un exemple de découpage d'une installation existante :

# disklabel sd0
[...]
16 partitions:
#                size           offset  fstype [fsize bsize   cpg]
  a:          8401920               64  4.2BSD   2048 16384 12958 # /
  b:          8402006          8401984    swap                    # none
  c:        488397168                0  unused
  d:          8401984         16804000  4.2BSD   2048 16384 12958 # /tmp
  e:         25173856         25205984  4.2BSD   2048 16384 12958 # /var
  f:          6297472         50379840  4.2BSD   2048 16384 12958 # /usr
  g:          3084480         56677312  4.2BSD   2048 16384 12958 # /usr/X11R6
  h:         62926592         59761792  4.2BSD   2048 16384 12958 # /usr/local
  i:          4209024        122688384  4.2BSD   2048 16384 12958 # /usr/src
  j:         12594976        126897408  4.2BSD   2048 16384 12958 # /usr/obj
  k:        348899648        139492416  4.2BSD   4096 32768 26062 # /home

Nous modifierons donc la section /dev/sd0k par la suite.

Identifiez-vous ensuite comme root pour modifier le type de la section /home en “RAID” (ou bien redémarrez sur le noyau bsd.rd pour obtenir un shell) :

$ su -
# umount /home
# disklabel -E /dev/sd0c
# m k
offset: [139492416]
size: [348899648]
FS type: [3.2BSD] RAID
> w
> q

Ensuite, pour bien faire, on écrit n'importe quoi sur ce qui sera /home :

# dd if=/dev/random of=/dev/rsd0k bs=4m

C'est long… C'est normal ceci dit. C'est essentiel de le faire, sinon quelqu'un qui récupère votre disque peut deviner des éléments importants selon ce qu'il trouve d'écrit sur le disque.

Ensuite, définissez une phrase de pass robuste pour être en mesure d'ouvrir votre /home chiffré :

# bioctl -c C -l /dev/sd0k softraid0
New passphrase:
Re-type passphrase:
softraid0: CRYPTO volume attached as sd3

Dans cet exemple, le /home est identifié par sd3. Tout se passe comme s'il s'agissait d'un nouveau disque. Soyez bien attentif au message retourné par bioctl.

On met des zéros sur les premiers megas :

# dd if=/dev/zero of=/dev/rsd3c bs=1m count=1

On crée la partition dans le volume chiffré :

# fdisk -i sd3
Do you wish to write new MBR and partition table? [n] y
Writing MBR at offset 0.
# disklabel -E sd3
Label editor (enter '?' for help at any prompt)
sd3> a a
offset: [64]
size: [348883541]
FS type: [4.2BSD]
sd3> w
sd3> q
No label changes.

Et on formate :

# newfs /dev/rsd3a

On veut maintenant que cette partition soit montée au démarrage.

Commencez par retirer la ligne concernant /home dans le fichier /etc/fstab.

Repérer l'uid du volume chiffré :

# disklabel sd0k |grep uid
duid: adcd45470b9b4392

Repérer l'uid de la partition /home chiffrée :

# disklabel sd3a |grep uid
duid: 535ff5528fa5c598

Vous pouvez maintenant ajouter ce petit script dans le fichier /etc/rc.local qui est lancé à chaque démarrage. Remplacez bien les “uid”.

printf "%s\n" "Unlock /home (or try to)"
bioctl -c C -l adcd45470b9b4392.k softraid0
if [ $? -ne 0 ]; then
    printf "%s\n" "Wrong password, shutting down"
    /sbin/shutdown -hp now
else
    fsck 535ff5528fa5c598.a
    mount -o rw,nodev,nosuid,softdep 535ff5528fa5c598.a /home
fi

Vous voudrez peut-être modifier les options utilisées au montage “nodev,nosuid,softdep”.

Le script ci-dessus ne laisse pas le droit à l'erreur. Vous préférerez peut-être avoir le droit à 3 essais pour entrer le mot de passe. Voici une autre version du même script qui avertit root s'il y a eu échec et éteint la machine :

printf "%s\n" "Unlock /home (or try to)"
ATTEMPT=0
MAXATTEMPT=3
while [ ${ATTEMPT} -le ${MAXATTEMPT} ]; do
        ATTEMPT=$((${ATTEMPT} + 1))
        bioctl -c C -l adcd45470b9b4392.k softraid0 && break || printf "%s\n" "Wrong password"
        sleep 3
done
if [ ${ATTEMPT} -gt ${MAXATTEMPT} ]; then
        printf "%s\n" "Shutting down, wrong password for encrypted device"
        printf "%s" "Someone tried to unlock /home and failed" | mail -s "unlock /home failed" root
        /sbin/shutdown -hp now
else
        fsck 535ff5528fa5c598.a
        mount -o rw,nodev,nosuid,softdep 535ff5528fa5c598.a /home
fi

Avant de redémarrer, n'oubliez pas de restaurer vos documents dans votre nouveau /home après l'avoir monté :

# mount sd3a /home
# rsync ...

L'idée d'origine a été piquée ici : http://astro-gr.org/openbsd-encrypt-home/ et complète https://www.openbsd.org/faq/faq14.html#softraidFDE