Security label对一个数据库对象应用一个安全标签。可以把任意数量的安全标签(每个标签提供者对应一个)关联到一个给定的数据库对象。标签提供者是使用函数register_label_provider 注册自己的可装载模块。
安全标签在虚拟化中的如何应用,本章以下内容进行详细描述。安全标签作用控制虚拟机资源的访问权限以及虚拟机对主机的访问权限。常用安全驱动程序有SELinux、AppArmor(mandatory access control system,MAC强制访问控制)、DAC(Discretionary Access Control,自主访问控制)。
<seclabel> 元素允许控制安全驱动程序的运行。有三种基本操作模式: "dynamic" libvirt 会自动生成唯一的安全标签,"static"应用程序/管理员选择一个标签,"none"( 禁用限制)。使用动态标签生成时,libvirt 将始终自动重新标记与虚拟机关联的任何资源。使用静态标签分配时,管理员或应用程序必须确保在任何资源上正确设置标签,但在需要时,可以启用自动重新标记。
如果libvirt使用了多个安全驱动程序,可以使用多个seclabel标签,每个驱动程序和每个标记引用的安全驱动程序可以使用model属性,
安全标签的有效输入XML配置如下:
<seclabel type='dynamic' model='selinux'/>
<seclabel type='dynamic' model='selinux'>
<baselabel>system_u:system_r:my_svirt_t:s0</baselabel>
</seclabel>
<seclabel type='static' model='selinux' relabel='no'>
<label>system_u:system_r:svirt_t:s0:c392,c662</label>
</seclabel>
<seclabel type='static' model='selinux' relabel='yes'>
<label>system_u:system_r:svirt_t:s0:c392,c662</label>
</seclabel>
<seclabel type='none'/>
如果在输入XML中没有提供type属性,那么将使用安全驱动程序的默认设置,可能是none或dynamic。
如果设置了baselabel但没有设置type,那么类型被假定为dynamic。
当使用自动资源重新标记活动查看运行中的客户机的XML时,将包含一个额外的XML元素imagelabel。这是一个只输出的元素,因此在用户提供的XML文档中将被忽略。
type:
静态、动态或none,以确定libvirt是否自动生成唯一的安全标签。
model:
一个有效的安全模型名称,与当前激活的安全模型匹配。当guest由非特权用户运行时,模型dac不可用。
relabel:
yes或no。如果使用动态标签分配,则必须始终为yes。使用静态标签分配时,它将默认为no。
label:
如果使用静态标记,则必须指定分配给虚拟域的完整安全标签,内容的格式取决于使用的安全驱动程序:
- SELinux: a SELinux 上下文.
- AppArmor: AppArmor 文件.
- DAC:所i有者和组之间用冒号分隔。它们既可以定义为用户/组名,也可以定义为uid/gid。驱动程序首先尝试将这些值解析为名称,但可以使用前导加号强制驱动程序将它们解析为uid或gid。
baselabel:
如果使用动态标记,则可以选择使用它来指定用于生成实际标签的基本安全标签。内容的格式取决于使用的安全驱动程序。SELinux驱动程序只使用生成的标签中的baselabel的type字段。在使用SELinux basellabels时,其他字段从父进程继承。上面的示例使用my_svirt_t作为type字段的值。
imagelabel:
这是一个output only元素,它显示了与虚拟域关联的资源上使用的安全标签。内容的格式取决于使用的安全驱动程序。
当重新标记生效时,还可以对特定源文件名进行微调,如果文件存在于NFS或其他缺乏安全标记的文件系统上,可以通过禁用标签微调,当管理应用程序创建一个特殊的标签,以允许在域之间共享一些资源时(但不是全部),可以请求替代标签;
当将seclabel元素附加到特定路径而不是顶级域分配时,只支持属性relabel或子元素label。
此外,由于文件系统的镜像缺乏安全标签,仅输出labelskip元素用于标记跳过硬盘上的活动域。