用例
我有一个 Ubuntu 服务器机器,它包裹在一个包含 Web 应用程序的 VM(vmdk 文件)中。我想将此 VM 发送给某人并阻止他访问 VM 的内部文件系统——我不想让他从 vmdk 文件中提取机器的文件系统。
用户可以直接启动机器或关闭电源(当机器启动时 - 它会自动加载应用程序后端服务)。
解决方案?
我虽然关于使用硬盘加密(使用 LUKS 的全盘加密或其他解决方案,如 VeraCrypt),但我主要关心的是如何在基于服务器的环境中使用它。
我不想让用户输入任何解密密钥或类似的东西 - 我看到有一些解决方案可以在开始时自动解密文件系统,就像这里和这里一样,似乎我需要将解密密钥存储在里面虚拟机。
有没有办法通过使用远程用户登录来解密机器?(我不太担心旁道攻击或热 VM 克隆等更复杂的问题)。或者任何其他可以满足用例的解决方案?
更新
在@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
/boot
您可以使用 unencrypted和 LUKS 密钥文件设置解决方案:修改
/etc/crypttab
以适应:这不是万无一失的。任何远程熟练的攻击者都会找到未加密
/boot
的和密钥文件。您可以将其隐藏以使其更难,但最终您的问题是无法解决的。您希望此人能够执行虚拟机,但无法访问它。执行需要访问权限。最坏的情况下?暂停 VM,并检查 VM 的内存。任何可以控制虚拟机管理程序的人都可以完全控制虚拟机,几乎无论您做什么。