分类: 网络与安全
2008-06-22 00:24:12
三、用LUKS 进行虚拟磁盘加密
LUKS(Linux Unified Key Setup)为Linux硬盘加密提供了一种标准,它不仅能通用于不同的Linux发行版本,还支持多用户/口令。因为它的加密密钥独立于口令,所以如果 口令失密,我们可以迅速改变口令而无需重新加密真个硬盘。在本节,我们将再次使用一个基于设备映射程序的加密方案,但是通过LUKS来增强其安全性。
与前面介绍的dm-crypt相似,LUKS也是一种基于device mapper 机制的加密方案,下面开始介绍其具体的使用方法。
⒈ 与dm-crypt相似,一定确保编译的内核中包含了所需的全部模块。此外,还要安装dmsetup 和cryptsetup 程序包。并且,LUKS还需要内核支持SHA-256算法,对于它,既可以将其编译为一个模块,把这个模块插入正在运行的内核;也可以将其包含在内核中, 但这需要重新引导系统。
⒉ 我们使用一个回送文件来存放加密文件系统。创建一个文件,用它存放将要安装的Ubuntu的根文件系统,命令如下所示:
# dd if=/dev/urandom of=/home/pchaganti/xen-images/ ubuntu_feisty_domU.img bs=1G count=6 |
⒊ 用以下命令将上面建立的回送文件设为环路设备:
# losetup –f /home/pchaganti/xen-images/ubuntu_feisty_domU.img |
⒋ 利用环路设备创建一个逻辑卷。这时,会要求你输入口令。需要注意,该口令在将来每次挂载此加密文件时都要用到。如下图所示:
# cryptsetup luksFormat /dev/loop0 |
图13 设置口令
⒌ 现在,用下面的命令为环路设备创建一个设备映射程序:
# cryptsetup luksOpen /dev/loop0 encrypted_feisty_luks |
图14 创建一个设备映射程序
⒍ 在加密文件上创建一个ext3文件系统,具体如下所示:
# mkfs.ext3 /dev/mapper/encrypted_feisty_luks |
图15 创建ext3文件系统
⒎ 挂载这个新的虚拟设备,命令如下:
# mount /dev/mapper/Ubuntu_feisty_luks /mnt/feisty_luks |
⒏ 我们已经分配了一个口令用于访问这个加密文件系统。LUKS最多支持八个不同口令用于访问该文件系统。这样,当多个用户都需要访问该文件系统时,可以让他们使用不同的口令。为此,我们可以通过luksAddKey 选项来添加新口令,如下所示:
# cryptsetup luksAddKey /dev/loop0 |
图16 添加新口令
⒐ 我们还可以通过以下命令来查看LUKS 头部中的信息,如加密算法等统计信息:
# cryptsetup luksDump /dev/loop0 |
图17 查看统计信息
⒑ 我们可以随时删除或者撤消密钥。我们用下列命令来删除1号密钥槽的密钥:
# cryptsetup luksDelKey /dev/loop0 1 |
图18 删除密钥
⒒ 现在,我们可以着手将Ubuntu安装到刚才挂载的文件系统中了。具体安装步骤在此略过,安装Ubuntu 后,卸下该文件系统。
⒓ 在/etc/crypttab 文件中添加加密文件系统的定义,其中参数retry 用于规定当输入的是错误或无效口令时的最多重试次数。参数check 用于规定所挂载文件系统的类型:
encrypted_feisty /dev/mapper/encrypted_feisty_luks none luks, check=ext3,retry=5 |
⒔ 在/etc/fstab 文件中为在引导期间挂载的文件系统添加设备:
/dev/mapper/encrypted_feisty_luks /mnt/feisty_luks ext3 defaults 0 2 |
⒕ 重新引导系统期间,当挂载文件系统时会要求您输入口令。正确输入口令后,文件系统才能被挂载。现在,我们可以象平常那样通过分区配置文件来启动我们的Ubuntu 虚拟机了。
LUKS 对dm-crypt 的功能进行了重大的改进,它允许我们使用多个用户/口令对(多达8个)。作为一项标准,它还促进了不同软件之间的互操作性。它使用了一个磁盘分区头部来存 放加密配置信息,使得我们不仅能够修改加密卷的口令而无需对该卷上存储的数据重新加密,而且能够为同一逻辑卷上的数据提供多个口令,这使得多个用户都能访 问该卷,还能方便地将数据迁移到不同的系统。
四、结束语
在本文中,我们详细介绍了两种基于device mapper 机制的加密方案,来保护Xen 虚拟机分区的根文件系统:前一种dm-crypt利用Linux 内核提供的加密API对块设备进行加密;后者LUKS 是一种硬盘加密的标准格式,它是对dm-crypt 的有效扩展。两者都能对硬盘上的数据提供很好的保护。
需要注意的是,这两种加密方案对于授权的应用程序而言都是透明的,所以,如果攻击者有权访问这些运行中的应用程序的话,那么加密逻辑卷上的文件是处于解密状态的。所以保证运行中的应用的安全就成了安全之战的重中之重。