Je joue actuellement autour et teste ZFS et je l'aime vraiment. Maintenant, je cherche la meilleure façon de l'utiliser comme remplacement de mon configuration standard avec le cryptage complet de LUKS basé sur la LUKS.
Comment le concept de cryptage dans ZFS est-il crypté un ensemble piscine ou juste individuel jeux de données? Mon idée est de démarrer, d'entrer une phrase secrète et du reste comme d'habitude. Je ne veux pas entrer dans une phrase secrète pour chaque jeu de données dans ma piscine, alors est-il possible?
J'ai déjà essayé d'utiliser une piscine ZFS à l'intérieur d'un conteneur de cryptage de disque complet Luks, cela fonctionne, mais je suppose que cela sera bien moins performant que d'utiliser des ZFS directement.
J'utilise Arch Linux avec le noyau "stable" et un SSD NVME. Merci de clarification et de configurations recommandées!
Oh, un de plus: j'ai lu que vous ne pouvez pas chiffrer les jeux de données ou les pools existants, est-ce encore le cas?
Le cryptage a été ajouté à ZFS sous Linux avec la version de la version 0.8. Vous avez donc besoin d'au moins cette version.
Dans ZFS, le cryptage est sur une base de données de données, pas sur une piscine - mais, comme avec la plupart des choses de ZFS, un jeu de données peut hériter des propriétés de cryptage de son parent (ou à partir d'un encryptionroot
au lieu du parent ).
Réglage du cryptage sur un jeu de données dans ZFS sera non chiffrer automatiquement toutes les données déjà dedans. Comme pour la compression active (ou la modification du type de compression), seules les nouvelles données seront cryptées.
pour chiffrer les données existantes, vous pouvez rsync
ou zfs send
It à un autre jeu de données avec cryptage activé, puis remplacez l'ancien jeu de données avec le nouveau crypté. Cela peut nécessiter que le système soit en mode mono-utilisateur (ou, au moins, pour éteindre temporairement tous les programmes qui peuvent écrire ou avoir des fichiers ouverts sur, l'ancien jeu de données).
Je n'utilise pas de cryptage sur aucun de mes zpools, donc c'est à peu près tout ce que je sais à ce sujet. Je vous conseillerais vivement de faire plus de recherches et de lire les archives des listes de diffusion zol et de la recherche problèmes liés au cryptage sur le ZOL GITUB REPO .
À partir du cryptage section de man zfs
:
cryptage
L'activation de la fonctionnalité de cryptage permet de créer des systèmes de fichiers et des volumes cryptés. ZFS cryptera des données de fichiers et de zvol, des attributs de fichier, des ACL, des bits d'autorisation, des listes de répertoires, des mappages Fuid et
userused
/groupused
données. ZFS ne criera pas les métadonnées liées à la structure de la piscine, y compris les noms de jeu de données et instantanés, la hiérarchie de données, les propriétés, la taille du fichier, les trous de fichier et les tables de déduplication (bien que les données dédupliquées elles-mêmes sont cryptées).La rotation de la clé est gérée par ZFS. Modification de la clé de l'utilisateur (par exemple, une phrase secrète) ne nécessite pas de ré-chiffrer tout le jeu de données. Les ensembles de données peuvent être nettoyés, résilverés, renommés et supprimés sans que les touches de cryptage soient chargées (voir le
zfs load-key
Sous-chambre pour plus d'informations sur le chargement de clé).Création d'un jeu de données crypté nécessite de spécifier les propriétés
encryption
etkeyformat
propriétés au moment de la création, ainsi qu'un optionnelkeylocation
etpbkdf2iters
. Après avoir entré une clé de cryptage, le jeu de données créé deviendra une racine de cryptage. Tous les jeux de données descendants hériteront de la clé de cryptage à partir de la racine de cryptage par défaut, ce qui signifie que le chargement, le déchargement ou la modification de la clé de la racine de cryptage fera de la même manière pour tous les ensembles de données héritantes. Si cette héritage n'est pas souhaitée, fournissez simplement unkeyformat
lors de la création du jeu de données de l'enfant ou de l'utilisationzfs change-key
Pour briser une relation existante, créant une nouvelle racine de cryptage sur l'enfant.Notez que l'enfant
keyformat
peut correspondre à celui du parent tout en créant toujours une nouvelle racineencryption
, et que la modification de la propriété de cryptage ne crée pas de nouvelle racine de cryptage; Cela utiliserait simplement une suite ciphéreuse différente avec la même clé que sa racine de cryptage. La seule exception est que les clones utiliseront toujours la clé de cryptage de leur origine. À la suite de cette exception, certaines propriétés liées au cryptage (nommémentkeystatus
,keyformat
,keylocation
, etpbkdf2iters
) Ne pas hériter des autres propriétés ZFS et utilisez plutôt la valeur déterminée par leur racine de cryptage. Le héritage des racines de cryptage peut être suivi via le en lecture seuleencryptionroot
Propriété.Le cryptage modifie le comportement de quelques opérations ZFS. Le cryptage est appliqué après la compression afin que les ratios de compression soient préservés. Normalement, les checksums de ZFS sont de 256 bits de long, mais pour les données cryptées, la somme de contrôle est de 128 bits de la somme de contrôle choisi par l'utilisateur et 128 bits de Mac de la suite de cryptage, qui offre une protection supplémentaire contre des données malveillantes. La déduplication est toujours possible avec le cryptage activé mais pour la sécurité, les jeux de données ne seront déduisés que contre eux-mêmes, leurs instantanés et leurs clones.
Il existe quelques limitations sur les jeux de données cryptés. Les données cryptées ne peuvent pas être intégrées via le
embedded_data
caractéristique. Les ensembles de données cryptés peuvent ne pas avoir de copies = 3 car la mise en œuvre stocke certaines métadonnées de cryptage lorsque la troisième copie serait normalement. Étant donné que la compression est appliquée avant le cryptage, les jeux de données peuvent être vulnérables à une attaque de type crime si les applications accédant à la donnée le permettent. La déduplication avec le cryptage s'écoulera des informations sur les blocs équivalents dans un jeu de données et entraîneront un coût supplémentaire de la CPU par bloc écrit.