分类: 网络与安全
2008-06-22 00:19:29
一、Xen背景知识
为了帮助计算机更加合理地分配资源,Xen会把一个物理的计算机虚拟成若干个独立的逻辑计算机,使用户可以在这些看起来相互独立的虚拟计算机上运行 不同的操作系统和应用程序,这时,我们将这些独立的虚拟计算机称为分区(domain),将运行在虚拟计算机上的操作系统称为客户操作系统(guest OS),将把一个物理的计算机虚拟成若干个独立的逻辑计算机的软件称为虚拟机监控器(VMM)。
很明显,Xen这里所担任的角色正是管理虚拟机的软件层:虚拟机监控器。另外,Xen在其上运行的操作系统称为虚拟平台。
因此,我们既可以对存放虚拟平台(即宿主机)的根文件系统的磁盘分区进行加密,也可以在虚拟机中对分区所使用的文件系统进行加密。加密能有效地防止 信息泄露,即使硬盘被偷走,只要加密算法足够强壮,对于没有密钥的人来说,其中的文件和数据不过是一堆乱码罢了,没有任何的实际意义。
在本文中,我们将使用两种基于Device mapper的加密方案对文件系统进行加密,所以我们先来介绍一下Device mapper。
二、关于Device mapper
Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,整个 device mapper 机制由两部分组成:内核空间的 device mapper 驱动、用户空间的device mapper 库以及提供的 dmsetup 工具。见下图:
图1 Device mapper体系结构示意图
在内核中,可以为device mapper添加许多模块化插件,通常称它们为 target driver 。利用这些插件,我们可以实现对 IO 请求的过滤或者重新定向之类的工作,当前已经实现的 target driver 插件包括软 raid、软加密、快照等,图中 linear、mirror等插件就是这些 target driver。Device mapper 用户空间部分主要负责逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等配置工作,而 IO 请求的具体过滤和重定向工作由内核中相关代码完成。
对于Device mapper,还有三个重要的对象概念需要说明,它们是mapped device、映射表和target device。Mapped device 是一个逻辑抽象,它是Device mapper向外提供的逻辑设备。映射表用以描述 Mapped device和target device 之间的对应关系。
Target device 表示的是 mapped device 所映射的物理空间段,对 mapped device 所表示的逻辑设备来说,就是该逻辑设备映射到的一个物理设备。Mapped device通过映射表描述的映射关系和 target device 建立映射。Device mapper 中这三个对象和 target driver 插件的关系如下图所示:
图2 Device mapper体系结构示意图
上图说明,对于逻辑设备Mapped device 6的 IO 请求最终被重定向到物理设备Target device a、Target device b和Target device c上。当 IO 请求流经 target driver 插件时,我们可以对它们进行某些处理,比如进行加密等。需要注意的是,这些处理是在内核中进行的,所以对于顶层的使用逻辑设备Mapped device 6的应用程序来说,这些处理是透明的。
三、使用Dm-crypt进行硬盘加密
本文所用的Dm-crypt这个程序包,正是通过Device mapper机制实现了块设备的透明式的加密。现在我们开始详细介绍如何使用dm-crypt程序包对文件系统实施基于Device mapper的加密。需要注意的是,Dm-crypt用Linux 2.6系列内核提供的cryptoAPI进行加密,所以对低于Linux 2.6内核的发行版本是不支持的。
在进行加密之前,必须先为内核提供相应的模块和选项,并建立用于存放虚拟机和客户操作系统的文件。具体步骤,如下所示:
⒈ 在内核配置画面中,选择“Device Drivers ”项,如下图所示:
图3 配置设备驱动
⒉ 在“Device Drivers”画面中,选择“the Multi-device support (RAID and LVM )”项,如下图所示:
⒊ 接下来,选中“Device mapper support”和“Crypt target support ”这两项,以将他们编译进内核。此外,我们还可以将他们编译成模块,如果这样的话,不要忘了将它们包含在initrd 映像中。如图