天天看點

3.2.使用者空間客體管理器

版權聲明:您好,轉載請留下本人部落格的位址,謝謝 https://blog.csdn.net/hongbochen1223/article/details/47100285

SELinux體系結構的一個非常強大的特征就是,它不僅能應用到使用者空間資源也能應用到核心資源。的确,他來源于對微核心的研究,在微核心中,大多數資源都是被使用者空間伺服器管理的。在Linux中能夠對資源進行強制通路控制的使用者空間伺服器的例子有X服務和資料庫服務。這些伺服器都提供強制安全所能提供的抽象資源。這一節提到了兩種SELinux體系結構支援的使用者空間伺服器。

3.2.1 核心對使用者空間客體管理器的支援

SELinux對使用者空間客體支援的一個簡單的方式就是直接通過核心安全伺服器,正如下面這個圖表展示的:

在這種方法下,使用者空間客體管理器和核心客體管理的行為是非常像的。核心安全服務包含整個安全政策,并且使用者空間客體管理器一定要咨詢核心來擷取通路控制決定,兩者主要的不同就是使用者空間客體管理器不能使用核心的AVC(access vector cache)。每一個伺服器都要有他們自己的,分離的AVC來存儲他過去從核心請求來的決定。對于使用者空間伺服器來說,AVC的功能就是被包含在庫libselinux中。

另外一個不同就是使用者空間客體管理器沒有LSM鈎子,LSM鈎子是核心空間的概念。然而,客體管理器在libselinux中的AVC有核心接口。AVC操縱緩存未命中并且代表客體管理器查詢核心。

直白的說,這種支援使用者空間客體管理器的方式有一些缺點。首先,為了使用類型強制政策,客體管理器必須要定義能夠代表他們資源的客體類。例如,一個資料庫伺服器一定要定義包含資料庫,表格,模式,實體等的客體類。對于核心資源,客體類是複雜的,并且和定義在SELinux的LSM子產品頭檔案的寫死類相符合。在政策中類定義的關系加上你這些核心編碼導緻了在使用者空間政策和編碼上不行的依賴關系。特别的,兩個使用者空間伺服器一定要注意不要是用核心中的同一個客體類。核心沒有為這種沖突提供解決辦法。

這種方式的第二個缺點就是核心安全伺服器為那些不在核心中的客體管理器中的客體類管理政策。這就增長了核心中和核心無關的抽象體的存儲開銷,并且會影響在AVC未命中的情況下,核心政策驗證的開銷。

3.2.2 政策伺服器架構

為了解決使用者空間客體伺服器使用使用核心安全伺服器的缺點和提高SELinux的安全性,一個正在進行的努力就是為使用者空間客體管理器提供使用者空間支援。這個項目有兩個主要目标和一些第二目标。主要目标是:

  • 1:通過提供一個使用者空間安全伺服器來為使用者空間客體管理器提供更好的支援,該安全伺服器為使用者的政策部分做出通路決定。
  • 2:通過建構一個政策管理伺服器來為政策提供細粒度的通路控制,該政策管理伺服器是一個使用者空間客體管理器,他的客體類代表着政策部分。

全體上,這兩個伺服器和政策伺服器是相關的。下面的這個圖顯示了政策伺服器的架構。

在政策伺服器架構中,整個系統政策的所有的操作和管理都是通過政策管理伺服器(PMS)控制的。PMS是一個使用者空間客體管理器,在PMS中,他建立了代表政策資源的客體類,并且對這些資源強制執行了一個更加細粒度的通路控制政策。這種特征為SELinux提供提供了非常重要的安全增強。在此之前,對政策的通路控制是一個要麼有要麼全無的議題。你要麼可以寫政策檔案要麼完全不能。伴随着PMS,你先在能夠允許通路粗略部分并且限制對其他的通路。例如,SELinux政策能夠允許使用者管理工具添加使用者和進行角色配置設定,但是,不能改變類型強制type規則。更好的是,你可以允許一個資料庫伺服器來改變和他的客體類和類型相關的TE政策,但不是核心中的那些。在内部,PMS被設計來使用SELinux最新的一個特征,可加載政策子產品,這個會在後面的章節中描述。

PMS第二個主要的功能就是分離系統政策到核心和使用者部分,并且分别将它們加載到核心安全伺服器和使用者空間安全伺服器(USSS)。以這種方式,核心并不了解規則和客體類,僅僅對使用者空間客體管理器具有重大意義。使用者空間客體管理器咨詢USSS而不是核心。為了政策更新和緩存相關性功能,在不同的使用者空間客體管理器中的AVC向USSS注冊(并不是核心)。

除了核心對使用者空間資源的責任的去除和對政策管理更加細粒度的通路,政策伺服器架構有更多優勢。因為PMS是一個運作中的伺服器,我們可以擴充他的接口來對分布式的政策管理允許遠端的網絡通路。PMS和USSS被設計來允許運作時客體類注冊,打破了存在于核心中的使用者空間客體管理器的編碼依賴。兩種方式的不同被libselinux對目前存在的工作提供向後相容遮掩起來了。最終,PMS和USSS被設計成單獨的服務,在沒有另外一個的時候,運作一個或兩個都被使用。例如,在一個細粒度政策通路控制是無用的系統中,USSS能夠被單獨使用來支援其他使用者空間客體伺服器。