在介紹SELinux之前,讀者需要了解兩個基本的系統(tǒng)訪問控制機制:
☆ DAC(Discretionary access control,自主訪問控制):DAC機制就是指對象(比如程序、文件或進程等)的的擁有者可以任意的修改或授予此對象相應的權限。例如傳統(tǒng)Linux,Windows等。
☆ MAC(Mandatory Access Control,強制訪問控制):MAC機制是指系統(tǒng)不再允許對象(比如程序、文件或文件夾等)的擁有者隨意修改或授予此對象相應的權限,而是透過強制的方式為每個對象統(tǒng)一授予權限,例如SELinux。
圖1 DAC與MAC的不同(引自 Security Features in Red Hat Enterprise Linux 4)
三.SELinux的出身
National Security Agency(美國國家安全局,以下簡稱為NSA)一直非常關注計算機操作系統(tǒng)的安全領域。畢竟他們的工作任務之一就是要確保美國政府使用的計算機的安全,保證在其面臨沒完沒了的攻擊時仍能安全可靠的運行。NSA發(fā)現大部分操作系統(tǒng)的安全機制,包括Windows和大部分UNIX以及Linux系統(tǒng),都是以DAC機制為安全認證基礎的。由于DAC機制的設計很不利于系統(tǒng)安全,NSA便一直致力于開發(fā)出一套好的MAC安全認證機制。
MAC 并不是由NSA發(fā)明的,它很早就出現了,但由于MAC的諸多問題,使得大型系統(tǒng)提供商對于將MAC集成到自己的系統(tǒng)中始終沒有興趣。即使是那些集成了 MAC 的提供商也通常是將其做為可選件提供,而沒有默認安裝使用。原因很多,一是因為MAC還不夠靈活,二是對于像Windows客戶系統(tǒng)這種面向普通用戶的系統(tǒng)來說,MAC加大了系統(tǒng)管理和使用的復雜性,得不償失。于是NSA的為了推廣MAC,確立了MAC下一步的研究方向,為使MAC更靈活并且并更容易被嵌入到操作系統(tǒng)。
起初,NSA的MAC系統(tǒng)是在LOCK系統(tǒng)上基于類型增強而且策略靈活的強制訪問控制體系,并且隨后發(fā)展為兩個基于Mach的系統(tǒng):DTMach和DTOS,后來在猶他大學的微內核操作系統(tǒng)Fluke上實現出來,并命名為Flask安全體系。NSA希望有操作系統(tǒng)商能支持其開發(fā)的MAC機制,但由于所有的這些工作都是基于實驗室,極少可以在實驗室之外來進行嘗試,以查看這些思想在真實的應用程序的可行性,加之為保密項目,因此很難說服某個系統(tǒng)商采用,誰也不敢頭一個吃這個螃蟹。于是,NSA決定選擇開源代碼的Linux系統(tǒng)為實際市場試驗系統(tǒng)。NSA把Flask安全體系集成到Linux操作系統(tǒng)中,SELinux便孕育而生,為了真正配合SELinux在Linux系統(tǒng)上的應用實施, NSA將SELinux作為一個開放源碼項目發(fā)布出來,從而能獲得更加廣泛的開發(fā)者和用戶支持。
毫無意外,使用真正的系統(tǒng)讓 NSA 研究人員可以更好的理解SELinux在實際中的應用,而其中體現出的問題是在試驗系統(tǒng)中無法找到的。NSA的這一開源措施,在開源界猶如一顆原子彈,業(yè)界普遍對此是歡迎的,但也不能說NSA是為此作出了犧牲,因為這是個雙贏的舉措,因為沒有Linux這個試驗田,NSA的SELinux很難修得正果。另外選擇Linux不是毫無理由的:首先,Linux系統(tǒng)擁有著眾多的使用用戶,而且很多用戶本身具有很高的技術水平;其次,Linux基于開源,這樣使得 SELinux不屬用任何商業(yè)組織或公司,防止依此來牟利,也不利于SELinux的發(fā)展;最后,對于Linux,它作為新興的操作系統(tǒng),在桌面領域很難打敗Windows,因此它主要面對服務器領域,而安全就顯得至關重要,SELinux正好是它所迫切需要的。RedHat 是個很聰明的公司,Fedora是其領導的Linux開源組織。其實說穿了,Fedora就是其企業(yè)發(fā)行版的實驗田。RedHat首先選擇了Fedora Core 2作為第一個SELinux實驗操作系統(tǒng),但是預設為不開啟,但SELinux在其平臺上的表現還是取得了成功。到了Fedora Core3,SELinux已經默認為開啟,然后經過修改,我們便在RHEL4上也看到SELinux。
另外需要補充說明的是,讀者不要以為僅僅存在SELinux這一個MAC項目,還有很多其他的MAC實現項目,用于其他不同的系統(tǒng)中。
四.SELinux原理
在SELinux 中,每個對象(程序、檔案、進程等)都擁有一個Security Context(安全上下文),它就像標簽一樣,貼在每個對象身上,上面記載著這個對象所具有的權限。而我們可以通過制定Security Policy(安全策略)來定義這些Security Context,從而定義哪種對象具有哪些權限。當一個對象需要執(zhí)行某個動作時,系統(tǒng)會依照Security Policy所制定的內容來檢查相對應的權限,如果全部權限都符合的話,系統(tǒng)就會允許這個操作的執(zhí)行,否則都將遭到拒絕或失敗。這些過程不會影響到其它正常運行的對象,系統(tǒng)會保證它們的安全系統(tǒng)結構以及穩(wěn)定運行。這里還要說明的是,到目前為止,SELinux系統(tǒng)中的某個對象需要執(zhí)行某個動作的時,系統(tǒng)權限認證不僅僅單獨根據Security Policy所制定的內容來檢查,同時還要根據傳統(tǒng)DAC來檢測,只有DAC以及SELinux全部認證通過了才能進行正常操作。
如果讀者了解chroot,那么就能很好的理解SELinux。 chroot 就是把某程序置于文件系統(tǒng)下的某一處,而當運行的時候,就不會離開這個文件系統(tǒng)的部份,也就是不會影響整個的文件系統(tǒng)。就好比如果把所有的對象都分配到不同的domain(域)中。而不同的 domain 卻彼此獨立,而且如果沒有經過授權的對象就不可以在domain之間傳遞數據,也就是說對象不能沒有授權就由domain A 跳到 domain B中,情況就如 chroot 一樣。
在傳統(tǒng)的類Unix中,root擁有著所有權限,有些用戶使用采用SELinux的Linux時發(fā)現自己就是root,但為何有些事情卻不允許執(zhí)行。其實說穿了就是因為 root 所屬的 domain 沒有授權可以跳到所需要執(zhí)行某程序的domain下,也就無法做希望的工作了。
在 SELinux系統(tǒng)啟動的時候,會加載一個叫做 policy,* 的安全策略權限文件,這文件內中就定義了相關權限。如果你之前設定了 SELinux 是不能在開機后轉回 permissive 模式的話,那你的 root 則可能無法修改當中的設定!也就是說root在SELinux中已經不具有默認的所有權限。那到底這有什么好處呢?其實好處就如 chroot 一樣把系統(tǒng)內任何東西都加上一層保護層。那就算是入侵進入了你的計算機,也只能在他破壞他入侵的這個domain環(huán)境!
對于RHEL4系統(tǒng),如何檢測是否已經安裝了SELinux呢。首先檢查你的Linux系統(tǒng)的核心是否有支持ACL的功能。因為Linux系統(tǒng)并不是每一個版本的核心都有支持ACL的功能,而最簡單的方法就是檢查系統(tǒng)目前的核心能否支持:此時如果能看到上面的幾項則表示已經編譯到核心中,ext3文件系統(tǒng)已支持ACL功能,這些功能在編譯核心選項中也可以找到。
傳統(tǒng)Linux的安全認證基于內核的DAC機制,這種機制在遇到一個有缺陷或是惡意編寫的程序時就會導致很大的問題出現,尤其是對于 setuid/setgid這種權限的設計。有些程序員在程序設計時,當需要設置執(zhí)行權限的時候,為了省事就直接用 setuid root,這樣的好處是給予程序最大的用戶權限root來運行,避免了因權限引起的問題,大大簡化程序的設計,但是這種方式是極其危險的。本文已經提及過,類Unix系統(tǒng)中的root擁有絕對的權限,如果某個有缺陷的程序以root用戶運行,可能會破壞系統(tǒng)文件甚至系統(tǒng)核心部分。如果是網絡服務程序,其漏洞很容易被黑客利用并發(fā)起攻擊,造成不可預知的后果。
SELinux的安全認證基于內核外的MAC機制,這種機制使得系統(tǒng)管理員可以定義整個系統(tǒng)的安全策略,這個策略可以基于其他因素,例如用戶的角色、程序的可信性及預期使用、程序將要使用的數據的類型等等,來限制對象所具有的權限。當你正確配置了SELinux系統(tǒng),不正常的應用程序只會影響自己權限內的domain,而對其它domain中的對象沒有絲毫影響。其它用戶程序的安全性和他們的后臺程序仍然可以正常運行,并保持著它們的安全系統(tǒng)結構。例如你某個服務是以 root 的權限執(zhí)行的。而此服務存在著一個極嚴重的 bug ,而使得入侵者可以通過這個服務的漏洞進入系統(tǒng)。但如果你的 Linux 系統(tǒng)有SELinux 保護的話,那么入侵者仍沒有辦法破壞整個系統(tǒng),因為它被這個服務所屬的 domain 所限制。但是沒有 SELinux 保護的系統(tǒng),它就可能因此而入侵整個系統(tǒng),而產生不可預料的后果。
但是前提是要有好的安全原則,SELinux 最麻煩的就是需要配置一個好的Policy 才可以讓 SELinux 發(fā)揮效果。制定的太寬松會使 SELinux 毫無用武之地,而太嚴格又會讓使用者連日常工作都變的麻煩至極。NSA讓制定安全原則的工作由系統(tǒng)地發(fā)行者來做,而像Fedora、Redhat、 Novell SUSE 、Debian、Gentoo 等都制定了一套基本的安全原則用于自己的系統(tǒng)。
憑借著SELinux在Linux 上這一個十分重要技術的應用,使其在加強了安全級別,傳統(tǒng)的Linux 安全級別一直是 C1 級或 C2 級,和 Windows 服務器的安全級別相同,而 SELinux 把 Linux 的安全級別提升至 B1 級,達到了基本的軍事級別。在RHEL4 中,SELinux 與一系列因特網服務加以整合,包括 BIND、Network Time Protocol (NTP)、Apache等,使得其優(yōu)點能夠更輕易地拓展。其要求極度安全環(huán)境的組織,可以于更多的應用程序上實作更廣泛的SELinux 功能,甚至為
每一服務制定嚴格的SELinux 原則。。比如,傳統(tǒng)的Linux 系統(tǒng)若遭黑客侵入Web Server,可能導致整個系統(tǒng)的癱瘓;但有了SELinux 的保護,我們可以很容易的建立一個只能在特定程序及特定的安全系絡中才能執(zhí)行的 Web 服務器,盡管Web Server被入侵,那么他也只能破壞這個Web Server,無法影響到其它的系統(tǒng)區(qū)域,將受害范圍減至最少。
六.SELinux在RHEL4上的安裝
下面對SELinux在RHEL 4上的安裝過程中加以介紹。在安裝過程中,會出現如圖3 的畫面,詢問是否啟用SELinux,默認安裝選項「Active」。
圖2 安裝時SELinux 的選項
這3個選項的不同之處在于:
□ 已禁用:停用SELinux 功能
□ 警告:僅顯示警告訊息
□ 活躍(默認值):啟動SELinux 功能
系統(tǒng)是否啟用SELinux 的設定,記錄在/etc/selinux/config文件中(/etc/sysconfig/selinux為此文件的鏈接),安裝完成后,可檢查其中的內容,便可得知系統(tǒng)SELinux現在的狀態(tài)。文件內容如下:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted
SELINUX 參數值:有「enforcing、permissive、disabled」分別對應安裝時的
選項「活躍、警告、已禁用」。
SELINUXTYPE 參數值:有「targeted、strict」兩種
SELINUXTYPE=targeted:保護網絡相關服務。
SELINUXTYPE=strict:完整的保護功能,包含網絡服務、一般指令及應用程序
注:RHEL 4 目前尚未支持strict policy,只提供targeted policy,如果您強行的將SELINUXTYPE=targeted改為strict,系統(tǒng)啟動時將會出現以下的提示而無法啟動。
圖3 強行修改機制導致無法啟動
在/etc/selinux/targeted文件夾中定義的就是targeted屬性,它是RHEL 4 巳定義好的policy,這個targeted policy 的用途可為保護下列的網絡服務:
歡迎光臨 WDlinux官方論壇 (http://www.fsowen.com/bbs/) | Powered by Discuz! 7.2 |