8.3. Selinux
强制访问控制通过将 QEMU 进程的权限限制为仅需要什么来限制尝试攻击的影响。在 Red Hat OpenStack Platform 上,SELinux 配置为在单独的安全上下文下运行每个 QEMU 进程。为 Red Hat OpenStack Platform 服务预先配置了 SELinux 策略。
OpenStack 的 SELinux 策略旨在帮助保护 hypervisor 主机和虚拟机免受两个主要威胁向量:
- 管理程序威胁 - 虚拟机内运行的应用程序会攻击虚拟机监控程序访问底层资源。例如,当虚拟机能够访问虚拟机监控程序操作系统、物理设备或其他应用程序时。这个威胁向量代表了一些风险,因为虚拟机监控程序上的破坏可能会破坏物理硬件,并公开其他虚拟机和网络段。
- 虚拟机(多项目)威胁 - 虚拟机内运行的应用程序会攻击虚拟机监控程序访问或控制另一个虚拟机及其资源。这是虚拟化独有威胁向量,并代表因为单个应用程序中漏洞导致虚拟机文件镜像的多形风险可能会被破坏。这种虚拟网络攻击是一个主要关注,因为保护实际网络的管理技术不会直接应用到虚拟环境。每个基于 KVM 的虚拟机都是一个进程,由 SELinux 标记,有效建立每个虚拟机的安全边界。此安全边界由 Linux 内核监控和强制实施,限制虚拟机对边界外资源的访问,如主机机器数据文件或其他虚拟机。
无论虚拟机中运行的客户机操作系统是什么,红帽都会提供基于 SELinux 的隔离功能。可以使用 Linux 或 Windows 虚拟机。
8.3.1. 标签和类别 复制链接链接已复制到粘贴板!
基于 KVM 的虚拟机实例使用自己的 SELinux 数据类型标记,称为 svirt_image_t
。内核级别保护可防止未经授权的系统进程(如恶意软件)操作磁盘上的虚拟机镜像文件。当虚拟机关闭时,镜像将存储为 svirt_image_t
,如下所示:
system_u:object_r:svirt_image_t:SystemLow image1 system_u:object_r:svirt_image_t:SystemLow image2 system_u:object_r:svirt_image_t:SystemLow image3 system_u:object_r:svirt_image_t:SystemLow image4
system_u:object_r:svirt_image_t:SystemLow image1
system_u:object_r:svirt_image_t:SystemLow image2
system_u:object_r:svirt_image_t:SystemLow image3
system_u:object_r:svirt_image_t:SystemLow image4
svirt_image_t 标签
唯一标识磁盘上的镜像文件,允许 SELinux 策略限制访问。当基于 KVM 的计算镜像开机时,SELinux 会将随机数字标识符附加到镜像。SELinux 能够为每个虚拟机监控程序节点最多 524,288 虚拟机分配数字标识符,但大多数 OpenStack 部署不太可能遇到这一限制。这个示例显示 SELinux 类别标识符:
system_u:object_r:svirt_image_t:s0:c87,c520 image1 system_u:object_r:svirt_image_t:s0:419,c172 image2
system_u:object_r:svirt_image_t:s0:c87,c520 image1
system_u:object_r:svirt_image_t:s0:419,c172 image2
8.3.2. SELinux 用户和角色 复制链接链接已复制到粘贴板!
SELinux 管理用户角色。它们可以通过 -Z
标志查看,也可以使用 semanage
命令查看。在虚拟机监控程序上,只有管理员才能访问系统,并且应该拥有有关管理用户以及系统上任何其他用户的适当上下文。