歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用 SELinux 和 Smack 增強輕量級容器

使用 SELinux 和 Smack 增強輕量級容器

日期:2017/2/28 16:49:10   编辑:Linux教程

安全 Linux 容器實現指南

輕量級容器 又稱作 Virtual Private Servers (VPS) 或 Jails,它們是經常用於限制不可信應用程序或用戶的工具。但是最近構造的輕量級容器沒有提供充分的安全保證。使用 SELinux 或 Smack 策略增強這些容器之後,就可以在 Linux? 中實現更加安全的容器。本文介紹如何創建受 Linux 安全模塊保護的更加安全的容器。SELinux 和 Smack 策略的開發都在進行當中,並且在各自社區的幫助下不斷得到改善。

人們聽到容器時的第一反應是 “如何才能創建安全的容器?”。本文通過使用 Linux 安全模塊(Linux Security Modules,LSM)增強容器的安全性來解決這個問題。本文特別演示了如何設定安全目標,並通過 Smack 和 SELinux 安全模塊實現目標。

要了解 Linux 容器的背景知識,請閱讀 “linux.chinaitlab.com/administer/777960_2.html" target=_blank>LXC:Linux 容器工具”(developerWorks,2009 年 2 月)。

Linux 容器是根據幾種 Linux 技術構建的概念性工件:

資源名稱空間 允許在容器內部查找進程、文件、SYSV IPC 資源、網絡接口等等。

控制組(Control groups)允許限制放置到容器中的資源。

功能綁定(Capability bounding)設置 限制容器的訪問特權。

必須協調使用這些技術,以實現符合設想的容器。目前已有兩個項目提供這個功能:

Libvirt 是能夠使用 Xen 管理程序、qemu 模擬器、kvmis 甚至是輕量級容器創建虛擬機的大型項目。

Liblxc 是一個較小的庫和用戶空間命令集合,它們的目的之一是幫助內核開發人員快速輕松地測試容器的功能。

因為 “LXC:Linux 容器工具” 是基於 liblxc 編寫的,所以我在這裡繼續使用 liblxc;不過這裡完成的操作也能夠使用 libvirt 的容器支持輕松完成。

主要元素 1:LSM

在開始之前,如果不太了解 LSM,現在可以快速浏覽一下。根據 Wikipedia 中的定義:Linux Security Modules (LSM) 是一個允許 Linux 內核支持各種計算機安全模型的框架,同時也避免依賴於特定安全實現。這個框架由 GNU General Public License 條款授權使用,並且是 Linux 2.6 之後的 Linux 內核的標准部分。設計 LSM 的目的是為成功實現強制訪問控制模塊提供一切必要元素,同時最小化對 Linux 內核的更改。LSM 避免了 Systrace 中的系統調用插入,因為它不支持多處理器內核,並且容易受 TOCTTOU (race) 攻擊。相反,當某個用戶級別的系統將要訪問重要的內部內核對象(比如 inode 和任務控制塊)時,LSM 將在內核中插入 “鉤子(hook)”(向上調用模塊)。這個項目專門用於解決訪問控制問題,以避免對主流內核進行大量的復雜修改。該項目並不打算成為通用的 “鉤子” 或 “向上調用” 機制,也不支持虛擬化。LSM 訪問控制的目標與解決系統審計問題密切相關,但又有所區別。審計要求記錄每次訪問嘗試。LSM 不能解決這個問題,因為這需要大量的鉤子,以檢測內核 “短路” 故障系統在什麼地方發出調用,並在接近重要對象時返回錯誤代碼。

系統安全包括兩個有些沖突的目標。第一個目標是實現完整的細粒度訪問控制。必須對有可能洩露或損壞信息的位置實施控制。過於粗粒度的控制和不進行控制沒有區別。例如,如果必須將所有文件歸為一種類型,並且有任何一個文件是公開的,則所有文件都是公開的。

另一方面,配置必須簡單,否則管理員就需要管理很多訪問(但是再次強調,這和不進行控制是一樣的)。例如,如果使程序正常工作需要大量訪問規則,那麼管理員就會為程序添加許多訪問權限,而不是測試這些訪問規則是否有必要。

Linux 中的兩個基本安全模塊使用不同的方法來平衡這個矛盾。

SELinux 首先對所有東西實施控制,同時使用強大的策略語言簡化策略的管理。

Smack 主要提供簡單的訪問控制。

主要元素 2:SELinux

到目前為止,SELinux 是針對 Linux 的最有名的 MAC 系統(強制訪問控制)。盡管仍然有人反對它,但流行的 Fedora? 發行版從幾年前開始就和 SELinux 一起部署,這是它取得成功的有力證明。

SELinux 使用模塊化策略語言配置,因此用戶可以輕松更新已安裝的策略。這種語言還提供一些接口,允許使用更高級的語句表達一組低級的語句。

在本文中,我們將使用一個新的接口來定義容器。雖然為容器添加許多訪問權限使接口本身變得非常大,但是使用接口創建新的容器卻很簡單。這個接口很有希望成為核心發布策略的一部分。

主要元素 3:Smack

Smack 是簡化的強制訪問控制內核(Simplified Mandatory Access Control Kernel)的縮寫。它首先使用簡單的文本標簽標記所有進程、文件和網絡流量。使用創建進程的標簽創建最新的文件。通常存在一些帶有明確定義的訪問規則的默認類型。進程常常可以對具有同一標簽的對象進行讀寫。繞過 Smack 訪問規則的特權由 POSIX 功能控制,因此帶有 CAP_MAC_OVERRIDE 的任務可以覆蓋規則;帶有 CAP_MAC_ADMIN 的任務可以更改規則和標簽。“POSIX file capabilities: Parceling the power of root”(參考資料)演示了這些特權。

Copyright © Linux教程網 All Rights Reserved