SELinux(Security-Enhanced Linux) 是美國(guó)國(guó)家安全局(NSA)對(duì)于強(qiáng)制訪問(wèn)控制的實(shí)現(xiàn),是 Linux歷史上最杰出的新安全子系統(tǒng)。NSA是在Linux社區(qū)的幫助下開發(fā)了一種訪問(wèn)控制體系,在這種訪問(wèn)控制體系的限制下,進(jìn)程只能訪問(wèn)那些在他的任務(wù)中所需要文件。SELinux 默認(rèn)安裝在 Fedora 和 Red Hat Enterprise Linux 上,也可以作為其他發(fā)行版上容易安裝的包得到。
SELinux 是 2.6 版本的 Linux 內(nèi)核中提供的強(qiáng)制訪問(wèn)控制(MAC)系統(tǒng)。對(duì)于目前可用的 Linux安全模塊來(lái)說(shuō),SELinux 是功能最全面,而且測(cè)試最充分的,它是在 20 年的 MAC 研究基礎(chǔ)上建立的。SELinux 在類型強(qiáng)制服務(wù)器中合并了多級(jí)安全性或一種可選的多類策略,并采用了基于角色的訪問(wèn)控制概念。[1]
大部分使用 SELinux 的人使用的都是 SELinux 就緒的發(fā)行版,例如 Fedora、Red Hat Enterprise Linux (RHEL)、Debian或 Centos。它們都是在內(nèi)核中啟用 SELinux 的,并且提供一個(gè)可定制的安全策略,還提供很多用戶層的庫(kù)和工具,它們都可以使用 SELinux 的功能。
SELinux是一種基于 域-類型 模型(domain-type)的強(qiáng)制訪問(wèn)控制(MAC)安全系統(tǒng),它由NSA編寫并設(shè)計(jì)成內(nèi)核模塊包含到內(nèi)核中,相應(yīng)的某些安全相關(guān)的應(yīng)用也被打了SELinux的補(bǔ)丁,最后還有一個(gè)相應(yīng)的安全策略。任何程序?qū)ζ滟Y源享有完全的控制權(quán)。假設(shè)某個(gè)程序打算把含有潛在重要信息的文件扔到/tmp目錄下,那么在DAC情況下沒人能阻止他。SELinux提供了比傳統(tǒng)的UNⅨ權(quán)限更好的訪問(wèn)控制。
1. 簡(jiǎn)介
SELinux帶給Linux的主要價(jià)值是:提供了一個(gè)靈活的,可配置的MAC機(jī)制。
Security-Enhanced Linux (SELinux)由以下兩部分組成:
1) Kernel SELinux模塊(/kernel/security/selinux)
2) 用戶態(tài)工具
SELinux是一個(gè)安全體系結(jié)構(gòu),它通過(guò)LSM(Linux Security Modules)框架被集成到Linux Kernel 2.6.x中。它是NSA (United States National Security Agency)和SELinux社區(qū)的聯(lián)合項(xiàng)目。
SELinux提供了一種靈活的強(qiáng)制訪問(wèn)控制(MAC)系統(tǒng),且內(nèi)嵌于Linux Kernel中。SELinux定義了系統(tǒng)中每個(gè)【用戶】、【進(jìn)程】、【應(yīng)用】和【文件】的訪問(wèn)和轉(zhuǎn)變的權(quán)限,然后它使用一個(gè)安全策略來(lái)控制這些實(shí)體(用戶、進(jìn)程、應(yīng)用和文件)之間的交互,安全策略指定如何嚴(yán)格或?qū)捤傻剡M(jìn)行檢查。
SELinux對(duì)系統(tǒng)用戶(system users)是透明的,只有系統(tǒng)管理員需要考慮在他的服務(wù)器中如何制定嚴(yán)格的策略。策略可以根據(jù)需要是嚴(yán)格的或?qū)捤傻摹?/p>
只有同時(shí)滿足了【標(biāo)準(zhǔn)Linux訪問(wèn)控制】和【SELinux訪問(wèn)控制】時(shí),主體才能訪問(wèn)客體。
1.1 DAC與MAC的關(guān)鍵區(qū)別(root用戶)
安 全增強(qiáng)型Linux(SELinux)開始是由NSA(國(guó)家安全局)啟動(dòng)并加入到Linux系統(tǒng)中的一套核心組件及用戶工具,可以讓應(yīng)用程序運(yùn)行在其所需的最低權(quán)限上。未 經(jīng)修改過(guò)的Linux系統(tǒng)是使用自主訪問(wèn)控制的,用戶可以自己請(qǐng)求更高的權(quán)限,由此惡意軟件幾乎可以訪問(wèn)任何它想訪問(wèn)的文件,而如果你授予其root權(quán) 限,那它就無(wú)所不能了。
在SELinux中沒有root這個(gè)概念,安全策略是由管理員來(lái)定義的,任何軟件都無(wú)法取代它。這意味著那些潛在的惡意軟件所能造成的損害可以被控制在最小。一般情況下只有非常注重?cái)?shù)據(jù)安全的企業(yè)級(jí)用戶才會(huì)使用SELinux。
操作系統(tǒng)有兩類訪問(wèn)控制:自主訪問(wèn)控制(DAC)和強(qiáng)制訪問(wèn)控制(MAC)。標(biāo)準(zhǔn)Linux安全是一種DAC,SELinux為L(zhǎng)inux增加了一個(gè)靈活的和可配置的的MAC。
所有DAC機(jī)制都有一個(gè)共同的弱點(diǎn),就是它們不能識(shí)別自然人與計(jì)算機(jī)程序之間最基本的區(qū)別。簡(jiǎn)單點(diǎn)說(shuō)就是,如果一個(gè)用戶被授權(quán)允許訪問(wèn),意味著程序也被授權(quán)訪問(wèn),如果程序被授權(quán)訪問(wèn),那么惡意程序也將有同樣的訪問(wèn)權(quán)。 DAC最根本的弱點(diǎn)是主體容易受到多種多樣的惡意軟件的攻擊,MAC就是避免這些攻擊的出路,大多數(shù)MAC特性組成了多層安全模型。
SELinux實(shí)現(xiàn)了一個(gè)更靈活的MAC形式,叫做類型強(qiáng)制(Type Enforcement)和一個(gè)非強(qiáng)制的多層安全形式(Multi-Level Security)。
在Android4.2中,SELinux是個(gè)可選項(xiàng),谷歌并沒有直接取消root權(quán)限或其他功能。這是一個(gè)為企業(yè)級(jí)用戶或是對(duì)隱私數(shù)據(jù)極為重視的用戶提供的選項(xiàng),普通消費(fèi)者則完全可以關(guān)閉它。
2. SELinux的運(yùn)行機(jī)制
SELinux決策過(guò)程如下圖所示:
當(dāng)一個(gè)subject(如: 一個(gè)應(yīng)用)試圖訪問(wèn)一個(gè)object(如:一個(gè)文件),Kernel中的策略執(zhí)行服務(wù)器將檢查AVC (Access Vector Cache), 在AVC中,subject和object的權(quán)限被緩存(cached)。如果基于AVC中的數(shù)據(jù)不能做出決定,則請(qǐng)求安全服務(wù)器,安全服務(wù)器在一個(gè)矩陣中查找“應(yīng)用+文件”的安全環(huán)境。然后根據(jù)查詢結(jié)果允許或拒絕訪問(wèn),拒絕消息細(xì)節(jié)位于/var/log/messages中。
3. SELinux偽文件系統(tǒng)
/selinux/偽文件系統(tǒng)kernel子系統(tǒng)通常使用的命令,它類似于/proc/偽文件系統(tǒng)。系統(tǒng)管理員和用戶不需要操作這部分。/selinux/目錄舉例如下:
代碼如下:
-rw-rw-rw- 1 root root 0 Sep 22 13:14 access
dr-xr-xr-x 1 root root 0 Sep 22 13:14 booleans
--w------- 1 root root 0 Sep 22 13:14 commit_pending_bools
-rw-rw-rw- 1 root root 0 Sep 22 13:14 context
-rw-rw-rw- 1 root root 0 Sep 22 13:14 create
--w------- 1 root root 0 Sep 22 13:14 disable
-rw-r--r-- 1 root root 0 Sep 22 13:14 enforce
-rw------- 1 root root 0 Sep 22 13:14 load
-r--r--r-- 1 root root 0 Sep 22 13:14 mls
-r--r--r-- 1 root root 0 Sep 22 13:14 policyvers
-rw-rw-rw- 1 root root 0 Sep 22 13:14 relabel
-rw-rw-rw- 1 root root 0 Sep 22 13:14 user
如cat enforce其值可能如下:
1: enforcing mode
0: permissive mode
4. SELinux配置文件
SELinux配置文件(configuration)或策略文件(policy)位于/etc/目錄下。
4.1 /etc/sysconfig/selinux配置文件
/etc/sysconfig/selinux是一個(gè)符號(hào)鏈接,真正的配置文件為:/etc/selinux/config
配置SELinux有如下兩種方式:
1) 使用配置工具:Security Level Configuration Tool (system-config-selinux)
2) 編輯配置文件 (/etc/sysconfig/selinux).
/etc/sysconfig/selinux中包含如下配置選項(xiàng):
1) 打開或關(guān)閉SELinux
2) 設(shè)置系統(tǒng)執(zhí)行哪一個(gè)策略(policy)
3) 設(shè)置系統(tǒng)如何執(zhí)行策略(policy)
4.2 配置文件選項(xiàng)
4.2.1 SELINUX
SELINUX=enforcing|permissive|disabled —定義SELinux的高級(jí)狀態(tài)
• enforcing — The SELinux security policy is enforced.
• permissive — The SELinux system prints warnings but does not enforce policy.
• disabled — SELinux is fully disabled. SELinux hooks are disengaged from the kernel and the pseudo-file system is unregistered.
4.2.2 SELINUXTYPE(安全策略)
SELINUXTYPE=targeted|strict — 指定SELinux執(zhí)行哪一個(gè)策略