blog-image

Nextcloud - Chiffrement des données - LUKS - Raspberry PI - Rock64 (armhf-arm64)

  • dHENRY
  • 01/07/2020
  • (Durée de lecture : 5 mn)

Vous disposez d’un stockage NextCloud personnel, le système de sauvegarde externe est déjà en place, mais avez-vous pensé au cambriolage ? Si des personnes malveillantes embarquent votre système, ces dernières pourront accéder à l’intégralité des données NextCloud stockées sur les disques durs. Chiffrer ses données reste la solution la plus sécurisée. Si le serveur est arrêté, le redémarrage nécessitera de fournir le mot de passe de chiffrement pour accèder aux données NextCloud.

Cet article explique comment migrer vos données NextCloud de production vers un disque chiffré LUKS, sans changer la configuration de NextCloud.

Topologie

  • Disque dur non chiffré contenant les données Nextcloud : 500 Gb, une seule partition montée sur /Disk1. Les données sont situées dans “/Disk1/nextcloud”
  • Un nouveau disque SSD de 500Gb

Vous devrez adapter cette instruction selon votre topologie.

Préparation

Attention cette opération nécessite l’arrêt du service apache2, qui est chargé de distribuer l’application NextCloud. Par conséquent, ce dernier sera indisponible durant toute la durée de l’opération, équivalente au temps nécessaire pour copier l’intégralité des données de production vers le disque chiffré.

  • Stopper apache2 : systemctl stop apache2

Installer Cryptsetup

Sur le serveur disposant du service NextCloud, installer le service de chiffrement :

apt-get install cryptsetup

Créer la partition

Insérer le disque SSD, puis consulter la device allouée avec :

dmesg

Dans mon cas j’obtiens :

[ 3165.174689] sd 6:0:0:0: [sdb] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[ 3165.178755] sd 6:0:0:0: [sdb] Attached SCSI disk

La device du nouveau disque est ici : “/dev/sdb”

Créer la partition

Utilisez la commande fdisk (je ne détaille pas ici son fonctionnement). fdisk /dev/sdb, dans mon cas, une seule partition de type “83 (Linux)”

Le resultat après création de la partition unique est :

Périphérique Amorçage Début       Fin  Secteurs Taille Id Type
/dev/sdb1              2048 976773167 976771120 465.8G 83 Linux

Initialisation

  • Générez tout d’abord un mot de passe qui sera demandé durant ce processus, vous pouvez utiliser l’utilitaire “apg”. Attention, notez bien ce mot de passe. Une fois créé la partition chiffrée ne poura être utilisée que si vous fournissez la bonne clé de chiffrement.

  • Paramétrer la partition unique “/dev/sdb1” au format “Luks” :

cryptsetup -q luksFormat /dev/sdb1
# Le processus vous demande le mot de passe de chiffrement.

Une partition chiffrée LUKS supporte jusqu’à 8 slots, c’est à dire, 8 mots de passe de chiffrement. Vous pouvez consulter les slots disponibles avec la commande :

cryptsetup luksDump /dev/sdb1

Pour ouvrir le container chiffré LUKS :

cryptsetup luksOpen /dev/sdb1 datanextcloud

/dev/sdb1 : Partition chiffrée LUKS sur le disque SSD datanextcloud : Alias du container. Cet alias peut etre n’importe quel nom, description,… et sera accessible au travers du mapper : “/dev/mapper/datanextcloud”

L’exécution de cette commande nécessite de fournir le mot de passe de chiffrement.

Une fois le container chiffré accessible, crée un système de fichier au format “ext4” (ou autre selon vos besoins).

mkfs -t ext4 /dev/mapper/datanextcloud

PS : J’ai du procéder au reboot de l’unité, pour accéder correctement au “mapper”.

Monter maintenant le système de fichiers sur par exemple “/mnt/ssd”

mkdir /mnt/ssd
mount /dev/mapper/datanextcloud /mnt/ssd

Transfert des données

Procédez maintenant au transfert des données du disque non chiffré, vers la partition LUKS chiffrée en utilisant la commande “rsync”

Synchronisation du disque de production vers le nouveau disque SSD

apt install rsync
rsync -ravH /Disk1/nextcloud /mnt/ssd/.

Attendre la fin complète de la synchronisation des données. Puis procédez au démontage des deux partitions :

umount /Disk1
umount /mnt/ssd

Commentez la ligne de montage automatique correspondant à “/Disk1” dans le fichier “/etc/fstab”.

Installation dans le Datacenter MytinyDC

Nous allons devoir adapter le démarrage de nextcloud, puisque le montage du disque chiffré nécessitera de fournir la clé de chiffrement, et du fait que je n’ai pas console sur ce serveur, je procède au démarrage complet du service en mode “manuel”. Les conséquences : si le serveur redémarre (reboot), NextCloud ne sera pas démarré automatiquement.

Préparation du serveur

# Instalation LUKS
apt-get install cryptsetup
# desactivation du service apache2 au démarrage
systemctl disabled apache2
## Dans mon cas, rapsberry Pi4, Debian 10, j'ai dû redémarrer le serveur pour qu'il expose le mapper "/dev/mapper"
reboot
# Nextcloud n'est plus accessible pour le moment

Montage de la partition chiffrée et démarrage de Nextcloud (manuel)

Après démarrage, vous devrez vous connecter à la console du serveur NextCloud, afin de lancer manuellement le service NextCloud :

cryptsetup luksOpen /dev/sda1 datanextcloud
# Fournir la clé de chiffrement
# Le point de montage NextCloud reste le même, l'architecture n'a pas changé
mount /dev/mapper/datanextcloud /Disk1
systemctl start apache2

Votre service NextCloud est démarré et utilise le nouveau disque chiffré. Si MytinyDC est dérobé, seul le matériel pourra être utilisé pour une nouvelle expérience :)

Tests de performance Lecture/Ecriture

Ces tests ont été effectués sur un Rasbperry PI4

Support Lecture (10Mo) Ecriture (10Mo) Lecture (50Mo) Ecriture (50Mo)
Carte SD 337 MB/s 124 MB/s 496 MB/s 191 MB/s
Disque dur USB3 (non chiffré - 5000 tr/mn) 650 MB/s 118 MB/s 657 MB/s 188 MB/s
Disque SSD Chiffré USB3 596 MB/s 127 MB/s 685 MB/s 194 MB/s

Aller plus loin

  • Créer un shell de démarrage du service NextCloud
  • Utiliser la clé de chiffrement stockée sur un support externe (clé USB, API, etc…)
  • Monter le disque chiffré après insertion d’une clé USB (système automatisé), n’oubliez pas de retirer le périphérique USB une fois le service démarré.
  • Le serveur envoi un email à l’administrateur après chaque rédémarrage

Ce document a été co-écrit par Benjamin

Licence de ce document : Creative Commons (CC BY-NC-ND 4.0)

CETTE DOCUMENTATION EST LIVRÉE “EN L’ÉTAT”, SANS GARANTIE D’AUCUNE SORTE ET DISTRIBUÉE DANS UN BUT ÉDUCATIF EXCLUSIVEMENT. L’AUTEUR, CONTRIBUTEURS DE CETTE DOCUMENTATION OU ©MYTINYDC.COM NE SAURAIENT EN AUCUN CAS ÊTRE TENUS RESPONSABLES DES DOMMAGES DIRECTS OU INDIRECTS POUVANT RÉSULTER DE L’APPLICATION DES PROCÉDURES MISES EN ŒUVRE DANS CETTE DOCUMENTATION, OU DE LA MAUVAISE INTERPRÉTATION DE CE DOCUMENT.