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


15

2017警告!可接受的答案似乎有效,但是在最近的内核中,我发现系统在开始交换后将立即挂起。如果尝试使用加密的交换文件,请确保它实际上正确交换。我花了很长时间才弄清楚为什么我的系统无缘无故地锁定。我回过头来使用加密的交换分区,它可以正常工作。


如何在Linux中设置加密的交换文件(而非分区)?可能吗?我发现的所有指南都讨论了加密的交换分区,但是我没有交换分区,因此我不必重新分区磁盘。

我不需要磁盘暂挂支持,因此我想在每次启动时使用随机密钥。

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

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


这到底是什么意思?使用时必须解密,不使用时将为空。
tkbx

1
当您搜索encrypted swapfile的第一个结果导致rayslinux.blogspot.de/2011/01/...
ott--

@ott,尽管在标题中说了“交换文件”,但是,如果您阅读该文章中的说明,它们会清楚地描述交换分区。
cjm

@tkbx,关键是要防止有人在我关闭计算机后从交换文件中恢复敏感数据。(或者某人无法猜出我的密码,因此他们正在重新启动到实时CD等中。)
cjm

2
@tkbx,我不这么认为。每次关闭计算机时,这都需要写入千兆字节的数据。重新启动时不使用交换文件中的数据,但这并不意味着它已从磁盘上删除。
cjm

Answers:


14

的确,该页面描述了如何设置分区,但是对于交换文件却很相似:

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

结果:

# 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和swap1是真实分区。


loop-AES.README在7.1节中说:“文件支持的循环不能用于交换。” 这是不正确的(或仅对循环AES有效)吗?
cjm

那是没有设备映射器的。
ott--

我修改了您的cryptsetup命令,以使用open代替create(手册页上的描述已作废),并使用随机密钥代替提示输入密码。它似乎正在工作。
cjm

这似乎在重启后不会持续:“交换:无法打开/ dev / mapper / swapfile:没有这样的文件或目录”
therobyouknow

6

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

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

  1. 禁用掉期:

    # swapoff -a
    
  2. 找到现有的交换分区

    # lsblk
    

    您将获得如下内容:

    sda3    8:3    0     8G  0 part [SWAP]
    
  3. 覆盖旧交换

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

    例如:

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

    # vim /etc/fstab
    

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

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

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

    例如:

    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. 主动加密交换

    # reboot
    
  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
    

1

如果使用dd if=/dev/zero of=/swapfile bs=8G count=1,然后使用mkswap /swapfileswapon /swapfile,则在根文件系统上应该有一个有效的交换文件。(我们dd用来确保交换文件中没有孔)

这样就避免了使用循环设备和/或crypttab的麻烦,只需将交换文件放在已经加密的文件系统中即可。(我们假设您在此处对整个驱动器使用加密。/swapfile如果在其他位置,则在参数前面加上加密目录的路径)

请参阅man mkswapman swapon了解更多信息。


我试图像这样在我的加密主目录中创建一个交换文件,它像加密的交换文件那样崩溃了……
fifaltra

您的主目录在系统启动时或登录时是否已解锁?如果仅在登录时解锁,则那里没有交换文件。交换必须已解锁并在系统引导时可用。除此之外,您还不需要用户主目录中的系统内容。这是留给用户的东西。
Mio Rin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.