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元素用于標記跳過硬盤上的活動域。