如何在 Linux 中设置加密交换文件?

cjm*_*cjm 16 linux arch-linux encryption swap

2017 警告!接受的答案似乎有效,但使用最近的内核,我发现系统一开始交换就会挂起。如果您尝试使用加密的交换文件,请确保它实际交换正确。我花了很长时间才弄清楚为什么我的系统一直无缘无故地锁定。我已经回到使用加密交换分区,它确实工作正常。


如何在 Linux 中设置加密交换文件(不是分区)?甚至有可能吗?我找到的所有指南都讨论了加密交换分区,但我没有交换分区,我宁愿不必重新分区我的磁盘。

我不需要磁盘挂起支持,所以我想在每次启动时使用一个随机密钥。

我已经将TrueCrypt文件托管卷用于我的数据,但我不想将交换放在该卷中。如果有更好的解决方案,我不会将 TrueCrypt 用于交换文件。

如果重要的话,我正在使用带有默认内核的Arch Linux

ott*_*t-- 15

实际上,该页面描述了设置分区,但它与交换文件类似:

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
Run Code Online (Sandbox Code Playgroud)

结果:

# 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
Run Code Online (Sandbox Code Playgroud)

swap0 和 swap1 是真正的分区。


小智 6

此配置在启动时使用随机生成的密钥,并且不支持休眠到硬盘!您应该通过相应的 DE 电源管理实用程序禁用休眠,并将其设置为在严重时关闭以避免数据丢失!

确保运行sudo -ssu在运行以下之前。

  1. 禁用交换:

    # swapoff -a
    
    Run Code Online (Sandbox Code Playgroud)
  2. 找到现有的交换分区

    # lsblk
    
    Run Code Online (Sandbox Code Playgroud)

    你会得到这样的东西:

    sda3    8:3    0     8G  0 part [SWAP]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 覆盖旧交换

    # dd if=/dev/zero bs=1024000 of=/dev/sda<#>
    
    Run Code Online (Sandbox Code Playgroud)

    例如:

    # dd if=/dev/zero bs=1024000 of=/dev/sda3
    
    Run Code Online (Sandbox Code Playgroud)
  4. fstab 设置

    # vim /etc/fstab
    
    Run Code Online (Sandbox Code Playgroud)

    用 crypttab 映射器名称替换旧的 SWAP 设备: /dev/mapper/cswap

    #<file system>      <mount point>   <type>  <options>   <dump>  <pass>
    /dev/mapper/cswap   none            swap    pri=1,defaults  0   0
    
    Run Code Online (Sandbox Code Playgroud)
  5. 加密设置

    # ls -lF /dev/disk/by-id
    
    Run Code Online (Sandbox Code Playgroud)

    例如:

    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
    
    Run Code Online (Sandbox Code Playgroud)
  6. 主动加密交换

    # reboot
    
    Run Code Online (Sandbox Code Playgroud)
  7. 验证加密交换操作

    例如:

    # 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
    
    Run Code Online (Sandbox Code Playgroud)