S006SELinux(SEAndroid)是個(gè)什么呀

本節(jié)的問題

  1. SELinux 是什么
  2. 在android系統(tǒng)中的歷史
  3. 特點(diǎn)

SELinux 是什么

SEAndroid 是一套安全機(jī)制,實(shí)現(xiàn)的主要目的是為了是Android系統(tǒng)更安全。
SELinux是被設(shè)計(jì)為一個(gè)靈活的可配置的MAC機(jī)制。
SEAndroid 是將SELinux 移植到Android 上的產(chǎn)物,可以看成SELinux 輔以一套適用于Android 的策略。

PS: SELinux是「Security-Enhanced Linux」的簡稱,是美國國家安全局「NSA=The National Security Agency」 和SCC(Secure Computing Corporation)開發(fā)的 Linux的一個(gè)擴(kuò)張強(qiáng)制訪問控制安全模塊。原先是在Fluke上開發(fā)的,2000年以 GNU GPL 發(fā)布。 而NSA江湖名聲不咋地,有不老實(shí)和不厚道的前科

所以咋android系統(tǒng)中名詞 SEAndroid 和SElinux在android中可以基本等價(jià)。

從Android 4.4 開始增加的一套強(qiáng)制訪問控制(Mandatory Access Control, MAC),在Android 本身的任意訪問控制(Discretionary Access Control,DAC)之上,通過為對(duì)象增加安全上下文的方式,對(duì)訪問的權(quán)限進(jìn)行了精確的控制。

歷史

所謂知往鑒來也,看看SEAndroid 在android系統(tǒng)中的前世今生。
Android的安全模型是基于應(yīng)用程序沙箱(sandbox)的概念, 每個(gè)應(yīng)用程序都運(yùn)行在自己的沙箱之中。

在Android 4.3之前的版本

系統(tǒng)在應(yīng)用程序安裝時(shí)為每一個(gè)應(yīng)用程序創(chuàng)建一個(gè)獨(dú)立的uid,基于uid來控制訪問進(jìn)程來訪問資源,這種安全模型是基于Linux傳統(tǒng) 的安全模型DAC(Discretionary Access Control,翻譯為自主訪問控制)來實(shí)現(xiàn)的。

從Android 4.3開始

安全增強(qiáng)型Linux (SElinux)用于進(jìn)一步定義應(yīng)用程序沙箱的界限。作為Android安全模型的一部分,Android使用SELinux的強(qiáng)制訪問控制(MAC) 來管理所有的進(jìn)程,即使是進(jìn)程具有root(超級(jí)用戶權(quán)限)的能力,SELinux通過創(chuàng)建自動(dòng)話的安全策略(sepolicy)來限制特權(quán)進(jìn)程來增強(qiáng) Android的安全性。

從Android 4.4開始

Android打開了SELinux的Enforcing模式,使其工作在默認(rèn)的AOSP代碼庫定義的安全策略(sepolicy)下。在 Enforcing模式下,違反SELinux安全策略的的行為都會(huì)被阻止,所有不合法的訪問都會(huì)記錄在dmesg和logcat中。因此,我們通過查看dmesg或者logcat, 可以收集有關(guān)違背SELinux策略的錯(cuò)誤信息,來完善我們自己的軟件和SELinux策略。

從Android 5.0(L)開始

android從寬松的4.3版本和部分的enforcement 4.4版本變?yōu)橥暾膃nforcement模式。簡短的說就從從前僅對(duì)幾個(gè)關(guān)鍵的域(installed,netd,vold,zygote)進(jìn)行保護(hù)到對(duì)所有的域(多于60個(gè))。

  1. 在5.0 rlease版本中,所有的一切都在enforcing模式中;
  2. 除了init進(jìn)程,其他進(jìn)程都不應(yīng)該在init 域中;
  3. 所有的通用設(shè)備(for a block_device, socket_device, default_service, etc.)都應(yīng)該聲明為一個(gè)獨(dú)特的域。

特點(diǎn)

linux 原來的權(quán)限管理機(jī)制

任意訪問控制(Discretionary Access Control,DAC)
linux 原來的權(quán)限管理機(jī)制是基于用戶和分組的,root用戶作為超級(jí)用戶擁有最高的權(quán)限。進(jìn)程的權(quán)限取決于調(diào)起這個(gè)進(jìn)程的用戶的權(quán)限。
權(quán)限所控制的資源主要是:文件
按照 “所有者 所在組 ,其他” 對(duì)訪問該資源的進(jìn)程的權(quán)限進(jìn)行定義。
主要的操作類型是: 讀寫執(zhí)行

SEAndroid權(quán)限機(jī)制

它被分類為強(qiáng)制訪問控制(Mandatory Access Control, MAC)

我的理解。相比于linux原來的權(quán)限機(jī)制,SElinux做的更細(xì)化。
SELinux 中的主體和客體可以按照死和活來區(qū)別, 主體主要是指 進(jìn)程;
客體是指:文件 設(shè)備 套接字 管道 消息隊(duì)列 等一切資源
主要的操作類型: 不再僅局限于 讀寫和執(zhí)行,而擴(kuò)展到一切的系統(tǒng)調(diào)用。

SELinux 為了解決某個(gè)主體能不能對(duì)客體進(jìn)行某項(xiàng)操作,引入了 角色,類型,SELinux用戶 安全級(jí)別 等等概念,給主客體分別打上標(biāo)簽,(這個(gè)標(biāo)簽主要的內(nèi)容就是 selinux用戶,角色,類型,安全級(jí)別),再制定一套可定制的規(guī)則。 在主體要對(duì)客體進(jìn)行訪問時(shí),根據(jù)規(guī)則來判斷是否有相應(yīng)的權(quán)限。

SElinux相比于linux原來的權(quán)限機(jī)制 更細(xì)膩,但也更負(fù)責(zé)。

在打開SELinux的系統(tǒng)中,先執(zhí)行l(wèi)inux基于用戶的權(quán)限檢查后,再執(zhí)行SELinux的檢查。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容