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