使用Debian Lenny创建一个完全加密的虚拟化Xen客户系统

使用Debian Lenny创建一个完全加密的Para-Virtualized Xen Guest系统

本文档介绍如何设置完全加密的对虚拟化XEN实例。 在这个howto中,主机系统正在运行Debian Etch,而要安装的guest虚拟机系统将使用Debian Lenny。

介绍

如果您担心您的隐私,您可能需要考虑使用硬盘加密来保护您的宝贵的私人数据免遭窥视。 通常,最简单的方法是使用发行版的安装程序来设置完全加密的系统; 我认为最新的Linux发行版支持这一点。 但是,当您使用XEN提供虚拟化时,有时您可能不希望使用所有访客实例对整个计算机进行加密,而只能加密一个OS实例。 这个方法将会正好处理这种情况。 它假定XEN主机系统已经启动并运行。

准备XEN实例

首先,我们需要为新的访客实例创建XEN配置。 这可以从包xen-tools中的脚本xen-create-image轻松完成:

xen:~# aptitude install xen-tools

现在,我们需要“教” xen工具 Lenny的存在(因为,记住,我们使用Etch作为主机系统):

xen:~# ln -s /usr/lib/xen-tools/debian.d /usr/lib/xen-tools/lenny.d

现在,我们可以创建XEN实例:

xen:~# xen-create-image --memory 150M --size 1G --noswap --ip 10.0.0.1 --hostname crypto.example.com --dist lenny

最后一步安装了一个非常基本的Debian Lenny guest系统。 我们将使用该系统配置加密文件系统,并最终将其内容复制到这些加密的文件系统。

新系统的加密文件系统将全部使用LVM存储。 所以基本上是LVM里面的一个LVM,我们需要在主机系统上创建一个逻辑卷,这个逻辑卷将作为/ dev / sdX提供给guest虚拟机系统,而在加密的客户系统里面,我们将安装LVM使用这个/ dev / sdX作为物理卷来存储我们的卷组:

xen:~# lvcreate -L24G -n crypto.example.com_crypt vg0

这里我们假设XEN服务器上保存所有XEN实例的逻辑卷的卷组称为vg0

默认情况下, xen-create-image创建一个配置文件/etc/xen/crypto_unencrypted.cfg 。 我们需要修改它以包括额外的逻辑卷,使其读取如下:

kernel  = '/boot/vmlinuz-2.6.18-6-xen-amd64'
ramdisk = '/boot/initrd.img-2.6.18-6-xen-amd64'
memory  = '150'
root    = '/dev/sda1'
disk    = [ 'phy:vg0/crypto.example.com_disk,sda1,w', 'phy:vg0/crypto.example.com_crypt,sda2,w' ]
name    = 'crypto.example.com'
vif  = [ 'ip=10.0.0.1' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

所以现在我们准备首先进入新创建的系统:

xen:~# xm create -c /etc/xen/crypto_unencrypted.cfg

临时XEN客人准备步骤

登录后,我们需要安装必要的组件:

crypto:~# aptitude install lvm2 cryptsetup

接下来,我们使用随机数据填充目标分区:

crypto:~# dd if=/dev/urandom of=/dev/sda2

创建cryptodisk:

crypto:~# cryptsetup -c aes-cbc-essiv:sha256 -y -s256 luksFormat /dev/sda2

启用LVM来处理cryptsetup设备。 为此,请将以下内容添加到/etc/lvm/lvm.conf的设备部分:

types = [ "device-mapper", 16 ]

打开加密设备:

crypto:~# cryptsetup luksOpen /dev/sda2 crypt

为LVM创建物理卷和卷组:

crypto:~# pvcreate /dev/mapper/crypt
crypto:~# vgcreate vg-crypt /dev/mapper/crypt

创建逻辑卷:

crypto:~# lvcreate -L1G -nroot vg-crypt
crypto:~# lvcreate -L2G -ntmp vg-crypt
crypto:~# lvcreate -L12G -nvar vg-crypt
crypto:~# lvcreate -L1G -nswap vg-crypt
crypto:~# lvcreate -L3G -nusr vg-crypt

现在,当创建逻辑卷时,设备上没有完全1G的空间,但稍微多了一点。 我们使用vgdisplay来确定剩下多少空间,然后创建最后一个卷:

crypto:~# lvcreate -l255 -nusrlocal vg-crypt

并创建文件系统:

crypto:~# mkfs.ext3 /dev/vg-crypt/root
crypto:~# mkfs.ext3 /dev/vg-crypt/tmp
crypto:~# mkfs.ext3 /dev/vg-crypt/usr
crypto:~# mkfs.ext3 /dev/vg-crypt/usrlocal
crypto:~# mkfs.ext3 /dev/vg-crypt/var
crypto:~# mkswap /dev/vg-crypt/swap

你可能会问自己为什么要创建这么多文件系统? 那么这应该是一个非常安全的系统(毕竟,如果我的系统遭到黑客攻击,所有的加密都不会有帮助),所以稍后我会遵循安全的Debian手册http:// www。 debian.org/doc/manuals/securing-debian-howto/ ),但是这个方法没有涵盖。

安装新创建的文件系统:

crypto:~# mkdir /mnt/target
crypto:~# mount /dev/vg-crypt/root /mnt/target/

crypto:~# mkdir /mnt/target/usr/local -p
crypto:~# mkdir /mnt/target/var
crypto:~# mkdir /mnt/target/tmp
crypto:~# mount /dev/vg-crypt/usr /mnt/target/usr
crypto:~# mount /dev/vg-crypt/usrlocal /mnt/target/usr/local
crypto:~# mount /dev/vg-crypt/var /mnt/target/var
crypto:~# mount /dev/vg-crypt/tmp /mnt/target/tmp

并将当前正在运行的文件系统复制到加密文件系统:

crypto:~# init s
crypto:~# cp -apx / /target/

由于我们从正在运行的系统复制数据,我们需要清理一下:

crypto:~# /bin/rm -fr /target/tmp/*
crypto:~# /bin/rm -fr /target/proc/*
crypto:~# /bin/rm -fr /target/sys/*
crypto:~# /bin/rm /target/etc/mtab

创建/ target / etc / fstab

proc                   /proc      proc     rw,nodev,nosuid,noexec 0     0
/dev/vg-crypt/root     /          ext3     errors=remount-ro      0     1
/dev/vg-crypt/usr      /usr       ext3     errors=remount-ro      0     1
/dev/vg-crypt/usrlocal /usr/local ext3     errors=remount-ro      0     1
/dev/vg-crypt/var      /var       ext3     errors=remount-ro      0     1
/dev/vg-crypt/tmp      /tmp       ext3     errors=remount-ro      0     1
/dev/vg-crypt/swap     none       swap     sw                     0     0

如上所述,您可能需要考虑“ 安全Debian手册” ,并应用一些额外的安全调整。

现在,停止客系统:

crypto:~# halt

回到XEN主机系统...

我们需要安装一些必要的工具:

xen:~# aptitude install cryptsetup initramfs-tools

现在我们为加密系统创建一个XEN配置文件/etc/xen/crypto_encrypted.cfg

kernel  = '/boot/vmlinuz-2.6.18-6-xen-amd64'
ramdisk = '/boot/initrd.img-2.6.18-6-xen-amd64_crypt'
memory  = '150'
root    = '/dev/mapper/vg--crypt-root'
disk    = [ 'phy:vg0/crypto.example.com_crypt,sda1,w' ]
name    = 'crypto.example.com'
vif  = [ 'ip=10.0.0.1' ]
on_poweroff = 'destroy'
on_reboot   = 'restart'
on_crash    = 'restart'

现在,这是一个非常棘手的部分。 我们需要创建一个新的initrd映像,以便加密的系统实际上要求磁盘Key。

首先,我们创建一个文件/etc/initramfs-tools/conf.d/cryptroot

CRYPTROOT=target=crypt,source=/dev/sda1,key=none,lvm=vg--crypt-root

请注意,即使保存加密文件系统的卷组称为vg-crypt ,因此我们需要使用第二个破折号来“转义”“ - ”。

然后,我们将以下行添加到/ etc / initramfs-tools / modules文件中

aes-x86_64
dm-crypt
dm-mod
sha256

接下来,我们备份我们现有的initrd映像,创建一个新的,并进行一些重命名:

xen:~# mv /boot/initrd.img-2.6.18-6-xen-amd64 /boot/initrd.img-2.6.18-6-xen-amd64_orig
xen:~# update-initramfs -k 2.6.18-6-xen-amd64 -v -c
xen:~# mv /boot/initrd.img-2.6.18-6-xen-amd64 /boot/initrd.img-2.6.18-6-xen-amd64_crypt
xen:~# mv /boot/initrd.img-2.6.18-6-xen-amd64_orig /boot/initrd.img-2.6.18-6-xen-amd64

所以现在我们准备开始加密的XEN客人:

xen:~# xm create -c /etc/xen/crypto_encrypted.cfg

如果一切顺利,系统将提示您输入加密卷的密钥,并引导整个系统。 请享用 :)

现在你还可以清理一下:

xen:~# /bin/rm /etc/xen/crypto_unencrypted.cfg
xen:~# lvremove /dev/vg0/crypto.example.com_disk

一件重要的事情:你需要信任主机系统! 如果主机系统受到威胁,当您进入解锁cryptsetup设备的密钥时,它可能会记录控制台输入,从而学习密码,加密所有数据!

来源

在设置加密的XEN guest实例时,以下网站对我来说是有用的:

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

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

支付宝扫一扫打赏

微信扫一扫打赏