SELinux是指安全強化的Linux,是Linux的一個安全子系統(tǒng),旨在增強傳統(tǒng)Linux操作系統(tǒng)的安全性,解決傳統(tǒng)Linux系統(tǒng)中自主訪問控制(DAC)系統(tǒng)中的各種權(quán)限問題(如root權(quán)限過高等)。SELinux中采用的是強制訪問控制(MAC)系統(tǒng),也就是控制一個進程對具體文件系統(tǒng)上面的文件或目錄是否擁有訪問權(quán)限。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
SELinux是什么
SELinux,Security Enhanced Linux 的縮寫,也就是安全強化的 Linux,是由美國國家安全局(NSA)聯(lián)合其他安全機構(gòu)(比如 SCC 公司)共同開發(fā)的一個Linux安全子系統(tǒng),旨在增強傳統(tǒng) Linux 操作系統(tǒng)的安全性,解決傳統(tǒng) Linux 系統(tǒng)中自主訪問控制(DAC)系統(tǒng)中的各種權(quán)限問題(如 root 權(quán)限過高等)。
SELinux 項目在 2000 年以 GPL 協(xié)議的形式開源,當 Red Hat 在其 Linux 發(fā)行版本中包括了 SELinux 之后,SELinux 才逐步變得流行起來?,F(xiàn)在,SELinux 已經(jīng)被許多組織廣泛使用,幾乎所有的 Linux 內(nèi)核 2.6 以上版本,都集成了 SELinux 功能。
對于 SELinux,初學(xué)者可以這么理解,它是部署在 Linux 上用于增強系統(tǒng)安全的功能模塊。
我們知道,傳統(tǒng)的 Linux 系統(tǒng)中,默認權(quán)限是對文件或目錄的所有者、所屬組和其他人的讀、寫和執(zhí)行權(quán)限進行控制,這種控制方式稱為自主訪問控制(DAC)方式;而在 SELinux 中,采用的是強制訪問控制(MAC)系統(tǒng),也就是控制一個進程對具體文件系統(tǒng)上面的文件或目錄是否擁有訪問權(quán)限,而判斷進程是否可以訪問文件或目錄的依據(jù),取決于 SELinux 中設(shè)定的很多策略規(guī)則。
說到這里,讀者有必要詳細地了解一下這兩個訪問控制系統(tǒng)的特點:
- 自主訪問控制系統(tǒng)(Discretionary Access Control,DAC)是 Linux 的默認訪問控制方式,也就是依據(jù)用戶的身份和該身份對文件及目錄的 rwx 權(quán)限來判斷是否可以訪問。不過,在 DAC 訪問控制的實際使用中我們也發(fā)現(xiàn)了一些問題:
-
root 權(quán)限過高,rwx 權(quán)限對 root 用戶并不生效,一旦 root 用戶被竊取或者 root 用戶本身的誤操作,都是對 Linux 系統(tǒng)的致命威脅。
-
Linux 默認權(quán)限過于簡單,只有所有者、所屬組和其他人的身份,權(quán)限也只有讀、寫和執(zhí)行權(quán)限,并不利于權(quán)限細分與設(shè)定。
-
不合理權(quán)限的分配會導(dǎo)致嚴重后果,比如給系統(tǒng)敏感文件或目錄設(shè)定 777 權(quán)限,或給敏感文件設(shè)定特殊權(quán)限——SetUID 權(quán)限等。
-
- 強制訪問控制(Mandatory Access Control,MAC)是通過 SELinux 的默認策略規(guī)則來控制特定的進程對系統(tǒng)的文件資源的訪問。也就是說,即使你是 root 用戶,但是當你訪問文件資源時,如果使用了不正確的進程,那么也是不能訪問這個文件資源的。
這樣一來,SELinux 控制的就不單單只是用戶及權(quán)限,還有進程。每個進程能夠訪問哪個文件資源,以及每個文件資源可以被哪些進程訪問,都靠 SELinux 的規(guī)則策略來確定。
注意,在 SELinux 中,Linux 的默認權(quán)限還是有作用的,也就是說,一個用戶要能訪問一個文件,既要求這個用戶的權(quán)限符合 rwx 權(quán)限,也要求這個用戶的進程符合 SELinux 的規(guī)定。
不過,系統(tǒng)中有這么多的進程,也有這么多的文件,如果手工來進行分配和指定,那么工作量過大。所以 SELinux 提供了很多的默認策略規(guī)則,這些策略規(guī)則已經(jīng)設(shè)定得比較完善,我們稍后再來學(xué)習(xí)如何查看和管理這些策略規(guī)則。
為了使讀者清楚地了解 SELinux 所扮演的角色,這里舉一個例子,假設(shè) apache 上發(fā)現(xiàn)了一個漏洞,使得某個遠程用戶可以訪問系統(tǒng)的敏感文件(如 /etc/shadow)。如果我們的 Linux 中啟用了 SELinux,那么,因為 apache 服務(wù)的進程并不具備訪問 /etc/shadow 的權(quán)限,所以這個遠程用戶通過 apache 訪問 /etc/shadow文件就會被 SELinux 所阻擋,起到保護 Linux 系統(tǒng)的作用。
Selinux如何關(guān)閉
#查看selinux狀態(tài) [root@vm01]# getenforce #臨時關(guān)閉selinux [root@vm01]# setenforce 0 #永久關(guān)閉 [root@vm01]# vi /etc/selinux/config # SELINUX=enforcing改為SELINUX=disabled