Android SELinux 驗證(轉(zhuǎn)自官網(wǎng))

<devsite-heading text="驗證 SELinux" for="%E9%AA%8C%E8%AF%81-selinux" level="h1" class="devsite-page-title"># 驗證 SELinux</devsite-heading>

Android 強烈建議 OEM 全面測試其 SELinux 實現(xiàn)。制造商在實現(xiàn) SELinux 時,應(yīng)先在一組測試設(shè)備上實施新政策。

實施新政策后澎蛛,您可以通過執(zhí)行 getenforce 命令來確認(rèn) SELinux 在設(shè)備上的運行模式是否正確。

該命令會輸出全局 SELinux 模式:強制或?qū)捜荨R_定每個域的 SELinux 模式杆煞,您必須檢查相應(yīng)的文件,或運行帶有相應(yīng) (-p) 標(biāo)記的最新版 sepolicy-analyze(位于 /platform/system/sepolicy/tools/ 中)腐泻。

<devsite-heading text="閱讀拒絕事件" for="reading_denials" level="h2" link="" toc="" class="" back-to-top="">## 閱讀拒絕事件</devsite-heading>

<devsite-heading text="閱讀拒絕事件" for="reading_denials" level="h2" link="" toc="" class="" back-to-top=""></devsite-heading>

檢查是否有錯誤决乎,錯誤會以事件日志的形式傳給 dmesglogcat,并可在設(shè)備上從本地查看派桩。制造商應(yīng)先檢查這些設(shè)備上傳給 dmesg 的 SELinux 輸出并優(yōu)化設(shè)置构诚,然后再在寬容模式下公開發(fā)布,最后切換到強制模式铆惑。SELinux 日志消息中包含“avc:”字樣范嘱,因此可使用 grep 輕松找到。您可以通過運行 cat /proc/kmsg 來獲取當(dāng)前的拒絕事件日志员魏,也可以通過運行 cat /sys/fs/pstore/console-ramoops 來獲取上次啟動時的拒絕事件日志丑蛤。

根據(jù)這些輸出內(nèi)容,制造商可以輕松發(fā)現(xiàn)系統(tǒng)用戶或組件違反 SELinux 政策的行為撕阎。然后受裹,制造商便可更改相應(yīng)軟件和/或 SELinux 政策,以防范此類惡意行為虏束。

具體來說名斟,這些日志消息會指明在強制模式下哪些進(jìn)程會失敗以及失敗原因。示例如下:

<devsite-code><pre is-upgraded="">avc: denied { connectto } for pid=2671 comm="ping" path="/dev/socket/dnsproxyd"
scontext=u:r:shell:s0 tcontext=u:r:netd:s0 tclass=unix_stream_socket
</pre></devsite-code>

該輸出的解讀如下:

  • 上方的 { connectto } 表示執(zhí)行的操作魄眉。根據(jù)它和末尾的 tclass (unix_stream_socket)砰盐,您可以大致了解是對什么對象執(zhí)行什么操作。在此例中坑律,是操作方正在試圖連接到 UNIX 信息流套接字岩梳。
  • scontext (u:r:shell:s0) 表示發(fā)起相應(yīng)操作的環(huán)境囊骤,在此例中是 shell 中運行的某個程序。
  • tcontext (u:r:netd:s0) 表示操作目標(biāo)的環(huán)境冀值,在此例中是歸 netd 所有的某個 unix_stream_socket也物。
  • 頂部的 comm="ping" 可幫助您了解拒絕事件發(fā)生時正在運行的程序。在此示例中列疗,給出的信息非常清晰明了滑蚯。

我們再看看另一個示例:

<devsite-code><pre class="devsite-terminal" is-upgraded="">adb shell su root dmesg | grep 'avc: '</pre></devsite-code>

輸出:

<devsite-code><pre is-upgraded=""><5> type=1400 audit: avc: denied { read write } for pid=177
comm="rmt_storage" name="mem" dev="tmpfs" ino=6004 scontext=u:r:rmt:s0
tcontext=u:object_r:kmem_device:s0 tclass=chr_file
</pre></devsite-code>

以下是此拒絕事件的關(guān)鍵元素:

  • 操作 - 試圖進(jìn)行的操作會使用括號突出顯示:read writesetenforce
  • 操作方 - scontext(來源上下文)條目表示操作方抵栈;在此例中為 rmt_storage 守護(hù)進(jìn)程告材。
  • 對象 - tcontext(目標(biāo)上下文)條目表示對哪個對象執(zhí)行操作;在此例中為 kmem古劲。
  • 結(jié)果 - tclass(目標(biāo)類別)條目表示操作對象的類型斥赋;在此例中為 chr_file(字符設(shè)備)。

<devsite-heading text="切換到寬容模式" for="switching_to_permissive" level="h2" link="" toc="" class="" back-to-top="">## 切換到寬容模式</devsite-heading> <devsite-heading text="切換到寬容模式" for="switching_to_permissive" level="h2" link="" toc="" class="" back-to-top=""></devsite-heading>

重要提示:生產(chǎn)設(shè)備不支持寬容模式产艾。CTS 測試會確認(rèn)是否已啟用強制模式疤剑。

SELinux 強制模式可以在 userdebug 或 eng 版本中通過 ADB 停用。為此闷堡,請先運行 adb root 以將 ADB 切換為 root 權(quán)限隘膘。然后,要停用 SELinux 強制模式杠览,請運行以下命令:

<devsite-code><pre class="devsite-terminal" is-upgraded="">adb shell setenforce 0
</pre></devsite-code>

或在內(nèi)核命令行中輸入以下命令(適用于設(shè)備開發(fā)初期):

<devsite-code>```
androidboot.selinux=permissive


`selinux/policycoreutils/audit2allow` 工具可以獲取 `dmesg` 拒絕事件并將其轉(zhuǎn)換成相應(yīng)的 SELinux 政策聲明弯菊。因此,該工具有助于大幅加快 SELinux 開發(fā)速度倦零。 `audit2allow` 包含在 Android 源代碼樹中,會在您基于源代碼編譯 Android 時自動編譯吨悍。

要使用該工具扫茅,請運行以下命令:

 <devsite-code>```
adb pull /sys/fs/selinux/policy
```</devsite-code> 

**注意**:運行這些命令不會更改 bugreport.txt,因為所有日志都已經(jīng)存在育瓜,包括上次重新啟動之前存在的日志葫隙。在設(shè)備進(jìn)行 OTA 更新或向設(shè)備刷入開發(fā)版系統(tǒng)時,新舊違規(guī)行為會混雜在一起躏仇,直到下一次重新啟動為止恋脚。要解決此問題,請重新啟動設(shè)備焰手,或者從您的錯誤報告中濾除 console-ramoops 和 LAST_LOGCAT糟描。

不過,請務(wù)必仔細(xì)審核要添加到政策中的條目书妻,以免出現(xiàn)權(quán)限過寬的情況船响。例如,如果將上面的 `rmt_storage` 拒絕事件輸入到 audit2allow 中,會生成以下 SELinux 政策聲明建議:

 <devsite-code><pre is-upgraded="">#============= shell ==============
allow shell kernel:security setenforce;
#============= rmt ==============
allow rmt kmem_device:chr_file { read write };
</pre></devsite-code> 

這會授予 `rmt` 向內(nèi)核內(nèi)存寫入內(nèi)容的權(quán)限见间,從而形成明顯的安全漏洞聊闯。通常情況下,`audit2allow` 給出的聲明建議只是一個大致的基礎(chǔ)米诉。在添加這些聲明后菱蔬,您可能需要更改來源域和目標(biāo)標(biāo)簽,并納入適當(dāng)?shù)暮晔仿拢拍軐崿F(xiàn)良好的政策配置拴泌。有時,應(yīng)對拒絕事件的合理方式不是更改政策抵窒,而是更改違規(guī)的應(yīng)用弛针。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市李皇,隨后出現(xiàn)的幾起案子削茁,更是在濱河造成了極大的恐慌,老刑警劉巖掉房,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧跋,死亡現(xiàn)場離奇詭異,居然都是意外死亡卓囚,警方通過查閱死者的電腦和手機瘾杭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哪亿,“玉大人粥烁,你說我怎么就攤上這事∮蓿” “怎么了讨阻?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長篡殷。 經(jīng)常有香客問我钝吮,道長,這世上最難降的妖魔是什么板辽? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任奇瘦,我火速辦了婚禮,結(jié)果婚禮上劲弦,老公的妹妹穿的比我還像新娘耳标。我一直安慰自己,他們只是感情好邑跪,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布麻捻。 她就那樣靜靜地躺著纲仍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贸毕。 梳的紋絲不亂的頭發(fā)上郑叠,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音明棍,去河邊找鬼乡革。 笑死,一個胖子當(dāng)著我的面吹牛摊腋,可吹牛的內(nèi)容都是我干的沸版。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼兴蒸,長吁一口氣:“原來是場噩夢啊……” “哼视粮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橙凳,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蕾殴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后岛啸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钓觉,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年坚踩,在試婚紗的時候發(fā)現(xiàn)自己被綠了荡灾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞬铸,死狀恐怖批幌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗓节,我是刑警寧澤荧缘,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站赦政,受9級特大地震影響胜宇,放射性物質(zhì)發(fā)生泄漏耀怜。R本人自食惡果不足惜恢着,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望财破。 院中可真熱鬧掰派,春花似錦庄萎、人聲如沸傀顾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至略步,卻和暖如春描扯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背趟薄。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工绽诚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杭煎。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓恩够,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羡铲。 傳聞我的和親對象是個殘疾皇子蜂桶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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