SELinux是指安全強(qiáng)化的Linux,是Linux的一個(gè)安全子系統(tǒng),旨在增強(qiáng)傳統(tǒng)Linux操作系統(tǒng)的安全性,解決傳統(tǒng)Linux系統(tǒng)中自主訪問(wèn)控制(DAC)系統(tǒng)中的各種權(quán)限問(wèn)題(如root權(quán)限過(guò)高等)。SELinux中采用的是強(qiáng)制訪問(wèn)控制(MAC)系統(tǒng),也就是控制一個(gè)進(jìn)程對(duì)具體文件系統(tǒng)上面的文件或目錄是否擁有訪問(wèn)權(quán)限。
本教程操作環(huán)境:linux7.3系統(tǒng)、Dell G3電腦。
SELinux是什么
SELinux,Security Enhanced Linux 的縮寫,也就是安全強(qiáng)化的 Linux,是由美國(guó)國(guó)家安全局(NSA)聯(lián)合其他安全機(jī)構(gòu)(比如 SCC 公司)共同開(kāi)發(fā)的一個(gè)Linux安全子系統(tǒng),旨在增強(qiáng)傳統(tǒng) Linux 操作系統(tǒng)的安全性,解決傳統(tǒng) Linux 系統(tǒng)中自主訪問(wèn)控制(DAC)系統(tǒng)中的各種權(quán)限問(wèn)題(如 root 權(quán)限過(guò)高等)。
SELinux 項(xiàng)目在 2000 年以 GPL 協(xié)議的形式開(kāi)源,當(dāng) Red Hat 在其 Linux 發(fā)行版本中包括了 SELinux 之后,SELinux 才逐步變得流行起來(lái)。現(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)行控制,這種控制方式稱為自主訪問(wèn)控制(DAC)方式;而在 SELinux 中,采用的是強(qiáng)制訪問(wèn)控制(MAC)系統(tǒng),也就是控制一個(gè)進(jìn)程對(duì)具體文件系統(tǒng)上面的文件或目錄是否擁有訪問(wèn)權(quán)限,而判斷進(jìn)程是否可以訪問(wèn)文件或目錄的依據(jù),取決于 SELinux 中設(shè)定的很多策略規(guī)則。
說(shuō)到這里,讀者有必要詳細(xì)地了解一下這兩個(gè)訪問(wèn)控制系統(tǒng)的特點(diǎn):
- 自主訪問(wèn)控制系統(tǒng)(Discretionary Access Control,DAC)是 Linux 的默認(rèn)訪問(wèn)控制方式,也就是依據(jù)用戶的身份和該身份對(duì)文件及目錄的 rwx 權(quán)限來(lái)判斷是否可以訪問(wèn)。不過(guò),在 DAC 訪問(wèn)控制的實(shí)際使用中我們也發(fā)現(xiàn)了一些問(wèn)題:
-
root 權(quán)限過(guò)高,rwx 權(quán)限對(duì) root 用戶并不生效,一旦 root 用戶被竊取或者 root 用戶本身的誤操作,都是對(duì) Linux 系統(tǒng)的致命威脅。
-
Linux 默認(rèn)權(quán)限過(guò)于簡(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)制訪問(wèn)控制(Mandatory Access Control,MAC)是通過(guò) SELinux 的默認(rèn)策略規(guī)則來(lái)控制特定的進(jìn)程對(duì)系統(tǒng)的文件資源的訪問(wèn)。也就是說(shuō),即使你是 root 用戶,但是當(dāng)你訪問(wèn)文件資源時(shí),如果使用了不正確的進(jìn)程,那么也是不能訪問(wèn)這個(gè)文件資源的。
這樣一來(lái),SELinux 控制的就不單單只是用戶及權(quán)限,還有進(jìn)程。每個(gè)進(jìn)程能夠訪問(wèn)哪個(gè)文件資源,以及每個(gè)文件資源可以被哪些進(jìn)程訪問(wèn),都靠 SELinux 的規(guī)則策略來(lái)確定。
注意,在 SELinux 中,Linux 的默認(rèn)權(quán)限還是有作用的,也就是說(shuō),一個(gè)用戶要能訪問(wèn)一個(gè)文件,既要求這個(gè)用戶的權(quán)限符合 rwx 權(quán)限,也要求這個(gè)用戶的進(jìn)程符合 SELinux 的規(guī)定。
不過(guò),系統(tǒng)中有這么多的進(jìn)程,也有這么多的文件,如果手工來(lái)進(jìn)行分配和指定,那么工作量過(guò)大。所以 SELinux 提供了很多的默認(rèn)策略規(guī)則,這些策略規(guī)則已經(jīng)設(shè)定得比較完善,我們稍后再來(lái)學(xué)習(xí)如何查看和管理這些策略規(guī)則。
為了使讀者清楚地了解 SELinux 所扮演的角色,這里舉一個(gè)例子,假設(shè) apache 上發(fā)現(xiàn)了一個(gè)漏洞,使得某個(gè)遠(yuǎn)程用戶可以訪問(wèn)系統(tǒng)的敏感文件(如 /etc/shadow)。如果我們的 Linux 中啟用了 SELinux,那么,因?yàn)?apache 服務(wù)的進(jìn)程并不具備訪問(wèn) /etc/shadow 的權(quán)限,所以這個(gè)遠(yuǎn)程用戶通過(guò) apache 訪問(wèn) /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