加密根LVM

加密根LVM

我假设你已经知道如何用luks(或其他东西)使用cryptsetup设置一个加密的文件系统。 有几个howtos。 我也假设你熟悉LVM2。

本教程仅涉及如何向包含其他加密物理卷的卷组池添加额外的加密物理卷。 这是典型的情况,如果您首先在物理分区级别(/ dev / sdaX,其中X是您的分区数)中设置加密,则在加密分区之上设置LVM。 如果在稍后的某个时间您想要在卷组中添加另一个分区,那么还需要加密它以保持相同的安全级别。 为了让您的机器启动,initramfs需要能够解锁两个PV,以便重建根lv所在的整个卷组。

几个星期前,我在ThinkPad T60上安装了Ubuntu(Hardy Heron 8.04)。 我的老板建议我用加密的LVM设置(至少对于家庭逻辑卷)。 我在https://help.ubuntu.com/community/EncryptedFilesystemLVMHowto中使用了一个教程。

完成之后,我结束了这样的事情:

如上图所示,除了/ boot分区之外,所有内容都被加密。 此设置工作正常。 当我启动initramfs加载我的内核映像后,它继续提示密码解锁pvcrypt。 没有这个步骤,它将无法解密和装载根逻辑卷。

一旦我以为是时候将/ dev / sda3中的剩余20GB添加到我的卷组中,就出现了问题。 问题是pvcrypt(/ dev / sda2)是加密的,如果我刚刚从/ dev / sda3创建了一个物理卷,然后将其添加到卷组,它将破坏整个安全性。 为什么? 因为它不会被加密,并且从逻辑卷到最终的数据将不被加密。 处理此问题的最快方法是将其加密为pvcrypt0,然后将其添加到我的卷组,最后得到如下图所示的内容。

上图显示了将卷组中的20GB分区添加为加密pv(pvcrypt0)后的lvm设置。

这样做的问题是initramfs需要被要求第二个密码才能解锁pvcrypt0并重建卷组。 如果不这样做,initramfs将仅提示输入pvcrypt的密码,但最终无法启动,因为它将无法解锁pvcrypt0。

首先检查你的内核镜像中的文件cryptroot 。 要做到这一点解压缩您的内核映像在目录中:

mkdir /tmp/foo 
cd /tmp/foo
zcat /boot/initrd.img-$(uname -r) | cpio -iv
cat conf/conf.d/cryptroot

您的cryproot文件应如下所示:

target=pvcrypt,source=/dev/sda2,key=none,lvm=vg0-root,lvm=vg0

显然,不会提示您输入pvcrypt0密码。 要在启动时告诉initramfs请求第二个密码,您需要将其添加到/etc/initramfs-tools/conf.d中的cryptroot(最终创建)文件

cd /etc/initramfs-tools/conf.d
vim cryptroot

添加此行并保存文件。

target=pvcrypt0,source=/dev/sda3,key=none,lvm=vg0-root,lvm=vg0

现在运行update-initramfs(更新内核引导映像):

update-initramfs -k all -u

完成后,您现在可以检查更新的内核映像是否知道pvcrypt0:

cd /tmp/foo
zcat /boot/initrd.img-$(uname -r) | cpio -iv
cat conf/conf.d/cryptroot

这次你应该得到两行:

target=pvcrypt,source=/dev/sda2,key=none,lvm=vg0-root,lvm=vg0
target=pvcrypt0,source=/dev/sda3,key=none,lvm=vg0-root,lvm=vg0

Etvoilà。 当你重新启动 Initramfs将要求两个密码。 如果有一种方法告诉initramfs尝试使用相同的密码,这将是很好的。 一个简单的方式,不必键入第二个密码将是一个真正的密钥文件。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏