虚拟机技术
在SELinux中,可信基包括:内核、对象管理器、安全服务器及相关工具。这是相当大的一个可信基,特别是Linux内核并非微内核设计,是个庞大的部分。在这个大的可信基中,难免不出现导致保护措施失败的Bug。
因此,基于纵深防御原则,引入虚拟机技术。
虚拟机技术有各种实现方式。比如操作系统级的虚拟化,通过引入IPC命名空间1、对进程调度器引入调度实体2实现二级调度及内存容器3等,把一组相关的进程放入一个容器,构成一个虚拟环境,共享硬件资源。每个虚拟环境有一个虚拟的IP,从而虚拟环境之间构成虚拟网络进行通信。当某个虚拟环境崩溃时,其他虚拟环境不受影响。
关于虚拟机技术的总览,参见http://www.ibm.com/developerworks/cn/linux/l-linuxvirt/。下面回顾下Xen虚拟技术。
Xen有两种工作模式:全虚拟化(full virtualization)和泛虚拟化(paravirtualization)模式。前者不需要操作系统修改,借助CPU支持实现同一时刻运行多个操作系统。后者需要修改操作系统驱动,及其他相关代码,来实现同一时刻运行多操作系统。
Hypervisor提供对客户机的页表进行修改(泛虚拟化),或者使用影子页表(全虚拟化),来把客户机的虚拟地址到客户机物理地址的映像(客户机页表)进行重新映射。
Hypervisor本身并不负责I/O,而是把设备专有地配给某个虚拟域或者转发来自其他虚拟域的(前端驱动的)请求到虚拟域0,由虚拟域0的后端驱动接收请求后,交由其自生的原生驱动处理后应答。
每个客户机可以配置成拥有任意数量的虚拟CPU,Hypervisor以虚拟CPU为调度单位进行调度。
Hypervisor和各个虚拟域之间的内部通信:
通过事件通道进行通知
通过环形缓冲区放置请求和应答
通过授权表来允许别的虚拟域访问本虚拟域的内存页。比如可以交换内存页来实现内存零拷贝。
在外存上的隔离,每个虚拟机使用各自镜像文件。不过,可以通过使用写时拷贝(Copy On Write:COW)特性文件系统,比如ZFS5或者Btrfs6,来使得各个虚拟机共享某些文件。当某一虚拟机写共享文件时,该文件被拷贝并被改写。
在Xen虚拟机技术中,某一虚拟域上的客户操作系统的失败不会影响其他虚拟域上的操作系统。Xen虚拟技术的可信基只有Hypervisor本身,比较容易确保其正确性。
Xen虚拟机技术的应用中,如在同一服务器硬件上一个虚拟机上中运行web服务器,一个虚拟机上运行邮件服务器。使得之一服务器的崩溃对另一服务器无影响,同时也提高了硬件的利用率。
4Intel® 64 and IA-32 Architectures Software Developer's Manual,Volume 3B: System Programming Guide, Part 2,CHAPTER 20 VIRTUAL-MACHINE CONTROL STRUCTURES
0 评论:
发表评论