Comment configurer un fichier d'échange crypté sous Linux?

15

AVERTISSEMENT 2017! La réponse acceptée semble fonctionner, mais avec les noyaux récents, j'ai découvert que le système se bloquerait dès qu'il aurait commencé à échanger. Si vous essayez d'utiliser un fichier d'échange crypté, assurez-vous qu'il permute correctement. Il m'a fallu beaucoup de temps pour comprendre pourquoi mon système se bloquait sans raison apparente. J'ai recommencé à utiliser une partition de swap chiffrée, qui fonctionne correctement.


Comment configurer un fichier d'échange crypté (pas une partition) sous Linux? Est-ce même possible? Tous les guides que j'ai trouvés parlent de partitions de swap chiffrées, mais je n'ai pas de partition de swap, et je préfère ne pas avoir à repartitionner mon disque.

Je n'ai pas besoin de la prise en charge de la suspension sur disque, donc j'aimerais utiliser une clé aléatoire à chaque démarrage.

J'utilise déjà un volume hébergé par fichier TrueCrypt pour mes données, mais je ne veux pas mettre mon échange dans ce volume. Je ne suis pas prêt à utiliser TrueCrypt pour le fichier d'échange s'il existe une meilleure solution.

J'utilise Arch Linux avec le noyau par défaut, si cela importe.

cjm
la source
À quoi servirait exactement cela? Il devrait être déchiffré lors de son utilisation et il serait vide lorsqu'il ne serait pas utilisé.
tkbx
1
Lorsque vous recherchez encrypted swapfilele premier résultat, vous accédez
ott--
@ott, malgré le fait de dire «fichier d'échange» dans le titre, si vous lisez les instructions dans ce post, elles décrivent clairement une partition d'échange.
cjm
@tkbx, le but est d'empêcher quelqu'un de récupérer des données sensibles du fichier d'échange après avoir éteint mon ordinateur. (Ou quelqu'un n'a pas pu deviner mon mot de passe, alors il redémarre sur un CD live ou autre.)
cjm
2
@tkbx, je ne le crois pas. Cela nécessiterait l'écriture de gigaoctets de données chaque fois que vous éteignez votre ordinateur. Les données d'un fichier d'échange ne sont pas utilisées lorsque vous redémarrez, mais cela ne signifie pas qu'elles sont effacées du disque.
cjm

Réponses:

14

En effet, la page décrit la configuration d'une partition, mais c'est similaire pour un fichier d'échange:

dd if=/dev/urandom of=swapfile.crypt bs=1M count=64
loop=$(losetup -f)
losetup ${loop} swapfile.crypt
cryptsetup open --type plain --key-file /dev/urandom ${loop} swapfile
mkswap /dev/mapper/swapfile
swapon /dev/mapper/swapfile

Le résultat:

# swapon -s
Filename                                Type            Size    Used    Priority
/dev/mapper/swap0                       partition       4000176 0       -1
/dev/mapper/swap1                       partition       2000084 0       -2
/dev/mapper/swapfile                    partition       65528   0       -3

swap0 et swap1 sont de vraies partitions.

ott--
la source
loop-AES.README dit dans la section 7.1: "Les boucles sauvegardées sur fichier ne peuvent pas être utilisées pour l'échange." Est-ce faux (ou seulement vrai pour la boucle-AES)?
cjm
C'est sans mappeur de périphérique.
ott--
J'ai révisé votre commande cryptsetup à utiliser à la openplace de create(dont la page de manuel indique qu'elle est obsolète), et à utiliser une clé aléatoire au lieu de demander un mot de passe. Cela semble fonctionner.
cjm
Cela ne semble pas persister au redémarrage: "swapon: ne peut pas ouvrir / dev / mapper / swapfile: aucun fichier ou répertoire"
therobyouknow
6

Cette configuration utilise des clés générées de manière aléatoire au démarrage et ne prend pas en charge l'hibernation 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!

Assurez-vous d'exécuter sudo -sou suavant d'exécuter ce qui suit.

  1. Désactiver l'échange:

    # swapoff -a
    
  2. Localiser la partition de swap existante

    # lsblk
    

    Vous obtiendrez quelque chose comme ceci:

    sda3    8:3    0     8G  0 part [SWAP]
    
  3. Écraser l'ancien échange

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

    par exemple:

    # dd if=/dev/zero bs=1024000 of=/dev/sda3
    
  4. fstab installer

    # vim /etc/fstab
    

    Remplacez l'ancien appareil SWAP par le nom du mappeur crypttab: /dev/mapper/cswap

    #<file system>      <mount point>   <type>  <options>   <dump>  <pass>
    /dev/mapper/cswap   none            swap    pri=1,defaults  0   0
    
  5. Configuration Crypto

    # ls -lF /dev/disk/by-id
    

    Par exemple:

    ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3 -> ../../sda3
    
    # vim /etc/crypttab
    
    # <name>    <device>                            <password>  <options>
      cswap     /dev/disk/by-id/ata-HGST_HTS545050A7E680_TEK55D4F0BU3GV-part3   /dev/urandom    swap,cipher=aes-cbc-essiv:sha256,size=256
    
  6. Échange crypté actif

    # reboot
    
  7. Vérifier les opérations de permutation activées

    Par exemple:

    # dmsetup -C info 
    cswap      253   0 L--w    2    1      0 CRYPT-PLAIN-cswap  
    # lsblk
    ├─sda3                8:3    0     8G  0 part  
    │ └─cswap             253:0    0     8G  0 crypt [SWAP]
    # cat /proc/swaps 
    Filename                Type        Size    Used    Priority
    /dev/dm-0               partition   8385532 0       -1
    
Timothy Butterworth
la source
1

Si vous utilisez dd if=/dev/zero of=/swapfile bs=8G count=1, suivi de mkswap /swapfileet swapon /swapfile, vous devriez avoir un fichier d'échange fonctionnel sur votre système de fichiers racine. (nous utilisons ddpour nous assurer qu'il n'y a pas de trous dans le fichier d'échange)

Cela évite d'avoir à jouer avec les périphériques en boucle et / ou la table de cryptage et place simplement le fichier d'échange à l'intérieur de votre système de fichiers déjà crypté. (Nous supposons que vous utilisez le cryptage pour l'ensemble du lecteur ici. Ajoutez le /swapfileparamètre avec le chemin d'accès à votre répertoire crypté s'il se trouve ailleurs)

Voir man mkswapet man swaponpour plus d'informations.

Mio Rin
la source
J'ai essayé de créer un fichier d'échange comme celui-ci dans mon répertoire personnel chiffré comme ça, et il s'est écrasé tout comme le fichier d'échange chiffré ...
fifaltra
Votre répertoire personnel est-il déverrouillé au démarrage du système ou lorsque vous vous connectez? S'il ne se déverrouille que lorsque vous vous connectez, vous ne pouvez pas y avoir le fichier d'échange. L'échange doit être déverrouillé et rendu disponible au démarrage du système. En plus de cela, vous ne voulez pas de trucs système dans votre répertoire personnel. C'est réservé aux utilisateurs.
Mio Rin