2 votes

Ubuntu 14.04 peut-il utiliser le swap crypté sans recourir à des hacks non officiels ?

Sur une nouvelle installation d'Ubuntu 14.04, j'obtiens ce message d'erreur pendant le démarrage.

le lecteur de disque pour /dev/mapper/cryptswap1 n'est pas encore prêt ou n'est pas présent

et la partition swap n'est jamais activée. De mes recherches jusqu'à présent, j'ai trouvé :

  • Il s'agit d'un problème répandu, qui affecte probablement toutes les installations Ubuntu 14.04 sur lesquelles l'échange crypté a été activé.
  • Une partie du problème est un bogue facile à corriger qui fait que l'en-tête d'échange chiffré (généré pendant le démarrage) écrase l'en-tête d'échange non chiffré, ce qui rend impossible la recherche de la bonne partition lors du démarrage suivant.
  • Toutes les solutions proposées pour le faire fonctionner semblent n'être que des solutions de contournement qui se résument à : 1. Désactiver le swap en le définissant comme noauto dans fstab. 2. Créer un fichier /etc/rc.local (ou définir votre propre service à activer au démarrage), qui active la partition d'échange.

Est-il possible d'utiliser un swap crypté sur Ubuntu 14.04 sans utiliser cette sorte de hack ? Je suis parfaitement à l'aise avec la mise à jour de tous les paquets installés et la correction de ces fichiers de configuration, qui ont été initialisés avec un contenu incorrect en raison d'un bug d'installation scripts. Je préfère éviter d'avoir à utiliser mon propre scripts pour activer le swap, car ce genre d'approche a tendance à se casser lorsque les paquets sont mis à jour.

C'est ce que mon /etc/crypttab ressemble :

cryptswap1 /dev/sda6 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16

Et la ligne pertinente de mon /etc/fstab est :

/dev/mapper/cryptswap1 none swap sw 0 0

Ce que j'ai essayé jusqu'à présent :

J'ai trouvé message le lecteur de disque pour /dev/mapper/cryptswap1 n'est pas encore prêt ou n'est pas présent même après avoir essayé diverses options en demandant ce qui pourrait être le même scénario.

Mais la seule réponse est de suggérer l'utilisation d'un swap non crypté.

J'ai trouvé http://ubuntuforums.org/showthread.php?t=2200995 qui prétend avoir une solution, mais cette solution n'a aucun sens pour moi.

La première partie de la solution proposée consiste à réécrire l'en-tête de swap chiffré en utilisant mkswap. Cependant, comme cet en-tête est crypté avec une clé qui n'est pas persistante lors des redémarrages, cette étape n'aidera pas à faire fonctionner l'échange après le prochain redémarrage.

Il suggère également des mises à jour de /etc/fstab, mais il semble que mon fstab soit déjà correctement configuré.

Le post suppose LVM, que je n'utilise pas. Je ne suis pas au courant d'un moyen qui pourrait faire la différence.

J'ai trouvé https://bugs.launchpad.net/ubuntu/+source/ecryptfs-utils/+bug/1310058 ce qui m'a aidé à comprendre le problème de l'en-tête de swap qui est écrasé et que l'ajout de offset a crypttab et en régénérant l'en-tête de swap non crypté, peut résoudre ce problème.

Cependant, l'en-tête écrasé n'est pas le seul problème en jeu, il y a un autre problème, que je ne comprends pas encore complètement.

J'ai découvert d'autres choses sur ce problème :

De la lecture /lib/cryptsetup/cryptdisks.functions J'ai appris que lors du démarrage, le périphérique est censé être créé en utilisant le nom cryptswap1_unformatted alors l'en-tête de swap crypté doit être écrit, et le périphérique doit être renommé en tant que cryptswap1 . Dans le journal du noyau, je trouve ce message d'erreur :

[   39.419429] device-mapper: ioctl: Unable to change name on mapped device cryptswap1_unformatted to one that already exists: cryptswap1

Curieusement, le résultat est que l'appareil finit par porter le nom de cryptswap1 mais le swap La tête n'a jamais été écrite.

Swap fonctionne pendant les démarrages où une vérification du système de fichiers a été effectuée. Ce n'est que lorsqu'aucune vérification du système de fichiers n'est effectuée que j'obtiens le redoutable message suivant cryptswap1 is not ready yet erreur.

En /var/log/upstart/cryptdisks.log Je trouve le message d'erreur

Device cryptswap1_unformatted already exists.

Cependant, en ajoutant une journalisation supplémentaire à /lib/cryptsetup/cryptdisks.functions J'ai appris qu'il y a une course entre /etc/init.d/cryptdisks-early y /etc/init/cryptdisks.conf . Toute journalisation que j'ajoute à cryptdisks.functions peut influencer la façon dont les actions des deux scripts sont entrelacées, et occasionnellement, cela finit par fonctionner.

Il est clair que les deux ne sont pas censés gérer le même périphérique en parallèle. Comment puis-je obtenir que les deux scripts soient sérialisés, de telle sorte que le swap fonctionne à chaque démarrage ?

4voto

bokmann Points 694

Il y a deux problèmes distincts qui doivent être résolus afin d'obtenir cryptswap1 fonctionne correctement dans Ubuntu 14.04.

Problème 1 : En-tête de swap écrasé

La partition a été formatée à l'origine avec un en-tête de swap non crypté, qui est utilisé pour trouver la bonne partition à utiliser pendant le démarrage. Comme la clé de chiffrement change à chaque démarrage, l'en-tête d'échange chiffré sera réécrit à chaque démarrage. En raison d'un bogue dans la génération de /etc/crypttab l'en-tête d'échange chiffré écrase l'en-tête d'échange non chiffré. Cela empêchera la partition d'échange d'être trouvée à tous les futurs démarrages.

Problème 2 : Condition de course pendant le démarrage

Il y a une condition de course pendant le démarrage entre /etc/init.d/cryptdisks-early y /etc/init/cryptdisks.conf . Les deux essaieront simultanément d'activer tous les appareils répertoriés dans crypttab . Dans le cas du swap crypté, le résultat de la condition de course sera, la plupart du temps, qu'il ne fonctionne pas du tout. Un certain contrôle d'intégrité échoue, ce qui fait que l'écriture de l'en-tête de l'échange chiffré est ignorée afin d'éviter une perte de données potentielle.

Résoudre et contourner les problèmes

Le premier problème peut être facilement résolu. Le second peut être contourné. Sur /etc/crypttab identifier la ligne d'échange. Cela devrait ressembler à ceci (sauf que l'UUID sera différent) :

cryptswap1 UUID=f9a0f20c-fac4-408c-a8b9-47300216f727 /dev/urandom swap,cipher=aes-cbc-essiv:sha256

Dans mon cas, c'était la seule ligne dans /etc/crypttab . Pour corriger l'écrasement de l'en-tête de swap, il faut ajouter un décalage. Les sources ne sont pas d'accord sur la valeur exacte à utiliser, mais utiliser une valeur trop grande ne fait pas de mal. Je l'ai fait fonctionner en utilisant un décalage de 16 .

En outre, j'ai ajouté noearly qui provoque /etc/init.d/cryptdisks-early pour ignorer cette ligne et ainsi contourner la condition de course.

La ligne qui en résulte ressemble à ceci :

cryptswap1 UUID=f9a0f20c-fac4-408c-a8b9-47300216f727 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,offset=16,noearly

Cela empêchera l'en-tête de swap non chiffré d'être à nouveau écrasé, mais nous devons encore le recréer sur la partition. A cette étape, il est crucial d'utiliser la bonne partition car en utilisant la mauvaise partition sera causer des pertes de données. J'ai utilisé fdisk -l pour trouver la bonne partition, qui dans mon cas est /dev/sda6 .

今すぐ使用する mkswap pour réécrire l'en-tête non chiffré du swap.

mkswap /dev/sda6 -U f9a0f20c-fac4-408c-a8b9-47300216f727

L'UUID est celui que la partition de swap avait avant d'être écrasée (que vous pouvez toujours voir dans /etc/crypttab ). Une fois que cela est fait, un redémarrage est nécessaire, et tout devrait fonctionner.

Vérification du bon fonctionnement

Je recommande de redémarrer trois fois pour vérifier qu'il continue à fonctionner.

Le message d'erreur the disk drive for /dev/mapper/cryptswap1 is not ready yet or not present reste brièvement visible pendant le démarrage. Cela ne semble pas être un problème, car il devient prêt avant la fin du processus de démarrage.

Connectez-vous et tapez cat /proc/swaps pour voir que le swap est actif. Vous devriez voir une partition swap avec le nom de /dev/dm-0 donde dm indique qu'il utilise effectivement la couche de mappage de périphériques, qui fournit le cryptage.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X