如何在 Debian 上创建一个随机键控的加密交换分区,将其称为“by-uuid”?

Gee*_*eeb 10 linux debian encryption swap uuid

如果您在 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 查询

小智 6

每次 cryptsetup 在启动时重新创建加密交换分区时,它都会为它生成一个新的 UUID!哦!

在 /etc/crypttab 中,使用/dev/disk/by-id而不是/dev/disk/by-UUID来引用您的交换分区。例如,用于交换的/etc/fstab条目可能是

#<file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/cswap none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)

然后 /etc/crypttab 中正确的相应条目将类似于

# <name> <device> <password> <options>
cswap /dev/disk/by-id/ata-SAMSUNG_SSD_830_Series_S0XYNEAC762041-part5 /dev/urandom swap,cipher=aes-cbc-essiv:sha256,size=256
Run Code Online (Sandbox Code Playgroud)

请注意,上面的设备由 /dev/disk/by-id 引用,您可以通过在 CLI 中键入以下内容来查找驱动器:

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


idu*_*ree 0

尝试实施解决方案的其余部分,忽略 init 文件。看起来那段初始化脚本只是为了保护你。要么 Debian 不会以这种方式保护您,要么当您尝试使用它启动时它会给您一条错误消息,希望能引导您到正确的位置。

我还要小心的是,IIRC Debian 和 ArchLinux 对 /etc/crypttab 有不同的格式(我知道这很疯狂,但几年前我从 Ubuntu 迁移到 Arch,最终决定使用直接 bash 而不是干预 crypttab)。