Comment créer une partition de swap chiffrée à clé aléatoire, en y faisant référence «by-uuid», sur Debian?

8

Il est judicieux que si vous avez une sorte de cryptage de périphérique de bloc implémenté sur votre système GNU / Linux, pour crypter votre partition de swap aussi, car toutes les données décryptées peuvent être écrites en texte clair à tout moment dans le swap.

En regardant la page de manuel debian pour "crypttab", je vois un exemple de création d'une partition de swap à clé aléatoire au démarrage, de sorte que la clé est définie de manière aléatoire au fur et à mesure du démarrage et connue uniquement du système lui-même:

# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap

Dans cet exemple, le dispositif d'échange est référencé par un chemin de développement conventionnel, c'est-à-dire /dev/sda6

Les chemins d'accès absolus aux appareils sont susceptibles de changer et d'être réaffectés au démarrage si, par exemple, un lecteur USB est branché, par exemple. Un utilisateur serait très mécontent s'il se /dev/sda6trouvait être une partition différente de celle attendue et elle a ensuite été remplacée par des données d'échange aléatoires !!

La solution semble donc être: utiliser un UUID au lieu d'un chemin de périphérique (car un UUID ne devrait pas changer), en le remplaçant /dev/sda6par/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>

MAIS ... voici le problème: chaque fois que cryptsetup recrée la partition de swap chiffrée au démarrage, il génère un nouvel UUID pour cela! Ah!

Nous devons donc en quelque sorte conserver l'UUID de ce système de fichiers chiffré. Je pense que cryptsetup peut le faire avec son --offsetcommutateur, permettant la préservation de l'en-tête LUKS et donc de l'UUID.

J'ai trouvé cette URL: https://wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions

Quelqu'un sait-il comment implémenter la solution décrite pour Arch Linux sur le système d'exploitation Debian? Les scripts d'initialisation mentionnés dans le document ne semblent pas exister sur le système d'exploitation Debian

Merci!

EDIT On pourrait utiliser ecryptfs pour atteindre les mêmes fins (espace d'échange crypté) en utilisant la commande: ecryptfs-setup-swap Sans les problèmes qui assaillent le cryptage des périphériques bloqués. Jetez un oeil à cette requête AskUbuntu

Geeb
la source
"On pourrait utiliser ecryptfs pour atteindre les mêmes fins [...] Sans les problèmes qui assaillent le chiffrement des périphériques bloqués." Non, car ecryptfs-setup-swapc'est juste une aide qui configure dm-crypt/ crypttabpour vous. Comme ecryptfsc'est un pilote au niveau du fichier, il ne gère pas des partitions entières, il le ferme donc dm-crypt. Vous trouverez peut-être cette méthode plus conviviale, mais vous n'obtiendrez finalement rien de différent. Si quoi que ce soit, les caprices de cette méthode (y compris l'UUID) m'ont probablement rendu plus confus que si je venais de le faire moi-même à partir des premiers principes ... bien que j'aie appris plus.
underscore_d

Réponses:

6

Chaque fois que cryptsetup recrée la partition d'échange cryptée au démarrage, il génère un nouvel UUID pour elle! Ah!

Dans / etc / crypttab, utilisez / dev / disk / by-id au lieu de / dev / disk / by-UUID pour faire référence à votre partition de swap. Par exemple, votre entrée / etc / fstab pour swap peut être

#<file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cswap none swap sw 0 0

Ensuite, l'entrée correspondante correcte dans / etc / crypttab serait quelque chose comme

# <name> <device> <password> <options>
cswap /dev/disk/by-id/ata-SAMSUNG_SSD_830_Series_S0XYNEAC762041-part5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256

Notez que le périphérique ci-dessus est référencé par / dev / disk / by-id que vous pouvez trouver pour votre lecteur en tapant ce qui suit sur la CLI:

ls -lF /dev/disk/by-id
Jun_in_Jeju
la source
Notez que le nom by-id fait référence à la fois au modèle et au numéro de série, ce qui est très peu susceptible de se chevaucher avec tout autre appareil que vous pourriez brancher.
cscracker
... ce qui, pour le bénéfice des lecteurs qui pourraient se demander, est une très bonne chose. Vous ne voulez pas configurer votre swap chiffré, /dev/sdaNpuis branchez un autre disque un jour et constatez que votre ordre de nommage du noyau a été changé et qu'une de vos partitions non swap a été mise à la poubelle. L'UUID serait bien aussi, mais je pense que le problème clé est qu'il est stocké dans les premiers octets de la partition, donc nous obtenons le scénario insoluble de poulet et d'œuf qui est discuté ici.
underscore_d
3

Dans mon / etc / crypttab, j'ai

# <target name>  <source device>        <key file>   <options>
swap             /dev/mapper/cswap      /dev/random  swap

Ici / dev / mapper / cswap est un volume logique créé par LVM, qui se charge d'attribuer correctement les noms de volumes logiques indépendamment des noms de lettre de lecteur. Cela me permet également de redimensionner facilement ma partition de swap.

Andrew Schulman
la source
0

Essayez d'implémenter le reste de la solution en ignorant le fichier init. Il semble que ce morceau de script d'init ne soit là que pour vous protéger. Soit Debian ne vous protège pas de cette façon, soit elle vous donnera un message d'erreur lorsque vous essayez de démarrer avec elle qui, nous l'espérons, vous mènera au bon endroit.

Je ferais également attention à ce que l'IICRC Debian et ArchLinux aient des formats différents pour / etc / crypttab (fou, je sais, mais je suis passé d'Ubuntu à Arch il y a quelques années et j'ai finalement décidé d'utiliser directement bash plutôt que de se mêler de crypttabs).

idupree
la source
Merci pour votre réponse. Oui, je suis d'accord pour dire que le script Arch est une vérification de santé mentale pour s'assurer que la partition semble être une partition de swap. Mais j'imagine avoir laissé une clé USB branchée et redémarré pour trouver une partition non échangeable utilisée. Je pense que je pleurerais de vraies larmes ... Je suis reconnaissant pour tous les tests de santé mentale que je peux obtenir!
Geeb
Cela ne devrait pas se produire car vous utilisez son UUID pour le trouver en premier lieu. Donc, tout ce qu'il trouvera, c'est la partition de swap, ou rien.
idupree
0

exécutez ecryptfs-setup-swap ou manuellement:

Cette configuration utilise des clés générées aléatoirement au démarrage et ne prend pas en charge la mise en veille prolongée sur le disque dur! Vous devez désactiver la mise en veille prolongée via votre respectie DE Power Management Utility et le définir sur Shutdown on Critical pour éviter la perte de données!

Passer à un compte administrateur / root

su root ou sudo pour chaque commande

Désactiver l'échange

swapoff -a

Localiser la partition d'échange existante

lsblk

exemple: sda3 8: 3 0 8G 0 partie [SWAP]

Écraser l'ancien échange

dd if = / dev / zero bs = 1024000 of = / dev / sda <#>

exemple: dd if = / dev / zero bs = 1024000 of = / dev / sda3

Configuration de FSTAB

vim / etc / fstab

Remplacez l'ancien périphérique SWAP par le nom du mappeur crypttab: / dev / mapper / cswap

OLD UUID = d03f3d8e-7888-48a5-b3cc-41de8dbbcfdc swap swap swap defaults 0 0

NOUVEAU

/ dev / mapper / cswap aucun swap pri = 1, par défaut 0 0

Configuration Crypto

ls -lF / dev / disk / by-id

Exemple: ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 -> ../../sda3

vim / etc / crypttab

cswap / dev / disk / by-id / ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 / dev / urandom swap, cipher = aes-cbc-essiv: sha256, taille = 256

Échange crypté actif

Redémarrez l'ordinateur

Vérifier les opérations de permutation activées

dmsetup -C info

Exemple: cswap 253 0 L - w 2 1 0 CRYPT-PLAIN-cswap

lsblk

Exemple ├─sda3 8: 3 0 8G 0 partie
│ └─cswap 253: 0 0 8G 0 crypt [SWAP]

chat / proc / swaps

exemple: nom de fichier type taille utilisée priorité / dev / dm-0 partition 8385532 0 -1

Timothy Butterworth
la source