加密 Linux 服务器以进行远程访问 VM

加密 Linux 服务器以进行远程访问 VM

用例

我有一台 Ubuntu 服务器计算机,它被封装在包含 Web 应用程序的 VM(vmdk 文件)中。我想将此 VM 发送给某人,然后阻止他访问虚拟机的内部文件系统- 我不想让他从vmdk文件中提取机器的文件系统。

用户可以直接启动机器或者关闭机器(机器启动时会自动加载应用程序后端服务)。

解决方案?

我虽然考虑过使用硬盘加密(使用 LUKS 或 VeraCrypt 等其他解决方案的全盘加密),但我主要关心的是如何将它在基于服务器的环境中使用。

我不想让用户输入任何解密密钥或类似的东西——我看到有解决方案可以在启动时自动解密文件系统,例如这里这里而且我似乎需要将解密密钥存储在虚拟机内部。

有没有办法通过使用远程用户登录来解密机器?(我不太担心更复杂的问题,如侧信道攻击或热虚拟机克隆)。或者任何其他可以满足用例的解决方案?

更新

在@vidarlo 回答之后,我决定采用 FDE 解决方案并了解其权衡利弊。

以下是我使用的配置说明(假设 /boot 位于 /dev/sda1 未加密分区上,而加密分区位于 /dev/sdaX 分区上)。

创建一个新的随机密码并将其存储在 luks 密钥库中:

sudo dd if=/dev/urandom of=/boot/keyfile bs=1024 count=4
sudo chmod 0400 /boot/keyfile
sudo cryptsetup luksAddKey /dev/sdaX /boot/keyfile

运行以下命令获取 /dev/sda1 分区的 UUID:

sudo ls -l /dev/disk/by-uuid/

/etc/crypttab使用以下内容更新文件:

sdaX_crypt UUID=<UUID_OF_SDAX> /dev/disk/by-uuid/<UUID_OF_SDA1>:/keyfile luks,keyscript=/lib/cryptsetup/scripts/passdev

更新 initramfs

sudo update-initramfs -u

重启

sudo reboot

答案1

/boot您可以使用未加密的和 LUKS 密钥文件设置解决方案:

sudo cryptsetup luksAddKey /dev/sdx1 /boot/random_data_keyfile1

修改/etc/crypttab以适应:

sda5_crypt UUID=DEVICE_UUID /dev/disk/by-uuid/devicewithkey:/random_data_keyfile1 luks,keyscript=/lib/cryptsetup/scripts/passdev

这并不是万无一失的。任何远程熟练的攻击者都会找到未加密的/boot和密钥文件。你可以隐藏它以使其更难,但最终你的问题是无法解决

您希望此人能够执行虚拟机,但无法访问它。执行需要访问。最坏的情况是什么?暂停虚拟机,并检查虚拟机的内存。任何可以控制虚拟机管理程序的人都可以完全控制虚拟机,几乎无论您做什么。

相关内容