如果您在 GNU/Linux 系统上实现了任何类型的块设备加密,那么也应该加密您的交换分区,因为任何解密的数据都可能随时以明文形式写入交换分区。
查看“crypttab”的 debian 手册页,我看到了一个在启动时创建随机键控交换分区的示例,因此在启动过程中密钥是随机设置的,并且只有系统本身知道:
# Encrypted swap device
cswap /dev/sda6 /dev/urandom cipher=aes-cbc-essiv:sha256,hash=ripemd160,size=256,swap
Run Code Online (Sandbox Code Playgroud)
在此示例中,交换设备由常规开发路径引用,即 /dev/sda6
例如,如果插入了 USB 驱动器,则绝对设备路径可能会更改并在启动时重新分配。如果/dev/sda6
碰巧是与预期不同的分区并且随后被随机交换数据覆盖,用户会非常不高兴!!
所以解决方案似乎是:使用 UUID 而不是设备路径(因为 UUID 不应该改变),替换/dev/sda6
为/dev/disk/by-uuid/<whatever the uuid of dev/sda6 is>
但是……问题来了:每次 cryptsetup 在启动时重新创建加密的交换分区时,它都会为它生成一个新的 UUID!哦!
所以我们需要以某种方式保留这个加密文件系统的 UUID。我认为 cryptsetup 可以通过它的--offset
开关来做到这一点,允许保留 LUKS 标头,从而保留 UUID。
我找到了这个网址:https : //wiki.archlinux.org/index.php/System_Encryption_with_LUKS#Using_UUIDs_with_encrypted_swap_partitions
有谁知道如何在 Debian 操作系统上实现为 Arch Linux 描述的解决方案?文档中提到的 init 脚本在 Debian 操作系统上似乎不存在
谢谢!
编辑
可以使用ecryptfs使用以下命令实现相同的目的(加密交换空间):
ecryptfs-setup-swap
没有困扰块设备加密的问题。看看这个 AskUbuntu 查询