2017 年警告!接受的答案似乎有效,但对于最近的内核,我发现系统一旦开始交换就会挂起。如果您尝试使用加密的交换文件,请确保它确实可以正确交换。我花了很长时间才弄清楚为什么我的系统总是无缘无故地锁定。我又重新使用加密的交换分区,它确实可以正常工作。
如何在 Linux 中设置加密交换文件(不是分区)?有可能吗?我找到的所有指南都谈到加密交换分区,但我没有交换分区,而且我不想对磁盘重新分区。
我不需要暂停到磁盘支持,因此我想在每次启动时使用随机密钥。
我已经在使用了真密我的数据的文件托管卷,但我不想将交换放在该卷中。如果有更好的解决方案,我不会使用 TrueCrypt 来交换文件。
我在用着架构Linux使用默认内核,如果这很重要的话。
答案1
的确,这一页描述了设置分区,但它与交换文件类似:
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是真正的分区。
答案2
此配置在启动时使用随机生成的密钥,并且不支持硬盘休眠!您应该通过您尊敬的 DE 电源管理实用程序禁用休眠并将其设置为关键时关闭以避免数据丢失!
确保在运行以下命令之前运行sudo -s
或。su
禁用交换:
# swapoff -a
找到现有的交换分区
# lsblk
你会得到这样的东西:
sda3 8:3 0 8G 0 part [SWAP]
覆盖旧交换
# dd if=/dev/zero bs=1024000 of=/dev/sda<#>
例如:
# dd if=/dev/zero bs=1024000 of=/dev/sda3
fstab
设置# vim /etc/fstab
用 crypttab 映射器名称替换旧的 SWAP 设备:
/dev/mapper/cswap
#<file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/cswap none swap pri=1,defaults 0 0
加密设置
# 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
主动加密交换
# reboot
验证加密的交换操作
例如:
# 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
答案3
如果您使用dd if=/dev/zero of=/swapfile bs=8G count=1
、 、 和mkswap /swapfile
,则swapon /swapfile
您的根文件系统上应该有一个可用的交换文件。 (我们用它dd
来确保交换文件中没有漏洞)
这样就不必弄乱循环设备和/或 crypttab,只需将交换文件放入已经加密的文件系统中即可。 (我们假设您在此处对整个驱动器使用加密。/swapfile
如果加密目录位于其他位置,请在参数前面添加加密目录的路径)
请参阅man mkswap
和man swapon
了解更多信息。