Linux LUKS 加密和克隆机

Linux LUKS 加密和克隆机

我正在制作一个基于 Mint 的原型。 Mint 安装 + 安装和配置的软件包。该原型是在一台类似锉刀的计算机上构建的。

我打算:

  1. 在其他几台类似锉刀的机器上克隆磁盘。

  2. 加密(dm-crypt,LUKS)磁盘以隐藏系统和文件。

我注意到,人们无法轻松地对已安装的系统进行 LUSK 加密。有没有一种方法可以让这个过程“自动”?我的意思是:一种在同一运行中加密和复制系统的方法。

答案1

可以执行就地加密,但我强烈建议您进行备份第一的。我写了一个实验性的我称之为的工具地穴中它可以在原始(未加密)、普通(dm-crypt)和 LUKS 格式之间进行转换。

将未加密的设备转换为 LUKS 需要移动设备上任何预先存在的数据,以便在开头留出大约 2MiB 的空间,以便可以在那里安装标头。或者,您可以分离标头并将其存储在单独的设备(例如 USB 密钥)上。

如果您使用分离的 LUKS 标头或选择普通模式 dm-crypt,则无需移动数据,它可以就地转换。

我用例子写下了理论这里您还可以阅读有关右移及其固有问题的内容这个问题

dd总而言之,您可以使用从底层原始设备复制到 dm-crypt 设备映射器来执行就地加密:

$ cryptsetup open "${raw_device}" crypt_device --type plain ${cryptsetup_args}
$ dd if="${raw_device}" conv=notrunc of=/dev/mapper/crypt_device
$ cryptsetup close crypt_device

(变量是占位符,供您为您的环境提供相关参数;上面的脚本和链接页面对此进行了更完整的解释)

这是一个有风险的操作- 如果中途失败(断电、手指肥胖或任何其他原因),那么你就吃饱了。先备份一下

请注意,我使用了这些词备份,实验性的理论买者自负,等等!

答案2

也许最直接的方法是创建并配置启用 LUKS 加密的主映像。

当然,如果您只是克隆此主磁盘,则所有设备都共享相同的加密密钥 - 这很糟糕。

但是你可以重新加密已加密的 LUKS 分区。

因此,您可以编写以下工作流程的脚本:

  1. dd将主映像复制到新驱动器/dev/sdX
  2. 获取现有设备的UUID:cryptsetup luksUUID /dev/sdXY
  3. 重新加密:cryptsetup reencrypt /dev/sdXY
  4. 将 UUID 重置为旧的:cryptsetup luksUUID --uuid $olduuid /dev/sdXY

UUID 的重置是必要的,因为 grub 配置和/或 initramfs(即通过 dracut)已将其嵌入,以便在引导期间解锁。

或者,您必须更新这些位置的 UUID。


根据您想要克隆主映像的频率,也许您想要使用另一个进程 - 因为 cryptsetup 重新加密方法不一定是最快的方法。

您可以从再次完全配置 LUKS 加密的主映像开始。

从该图像中,您可以使用 转储分区表sfdisk -d。接下来,将所有未加密的图像转储到单独的文件中(通常这只是启动分区)。最后,您cryptsetup open从主映像中进行系统分区(例如通过循环设备)并将其内容转储到另一个映像文件(例如root.img)。

有了这些片段,克隆过程将如下所示:

  1. 对设备进行分区< part.dump sfdisk /dev/sX
  2. dd未加密的分区 - 例如 -/dev/sX1
  3. 格式化系统分区:cryptsetup luksFormat --uuid $olduuid /dev/sXY
  4. 打开新的 LUKS 设备
  5. ddroot.img新的 LUKS 设备

答案3

除非是 LVM,否则所有数据都必须移动,以便在开头为 LUKS 标头 (2MiB) 腾出空间。所以这不是一个简单/无风险的过程。

相关内容