天天看點

Android系統10 RK3399 init程序啟動(二十四) Selinux三種模式

說明

系統:Android10.0

裝置: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

本章節介紹Selinux工作的三種模式,并知道如何切換三種模式。

一, Selinux三種模式介紹

selinux一般有三種模式, Disabled、Permissive 和 Enforcing, SEAndroid是基于SElinux, 是以也是一樣有這三種模式。

 1, Disable工作模式(關閉模式)

     SELinux 被關閉,預設的DAC通路控制方式被使用。對于那些不需要增強安全性的環境來說,該模式是非常有用的。比如你的系統不太考慮安全控制, 隻想簡單快速啟動一個程序, 那麼可以嘗試選這種模式,

2, Permissive工作模式(寬容模式)

      SELinux被啟用,但安全政策規則并沒有被強制執行。隻列印audit 異常LOG,不拒絕請求,即當安全政策規則應該拒絕通路時,通路仍然被允許。同時會向日志檔案發送一條消息,表示該通路應該被拒絕。 SELinux Permissive 模式主要用于以下幾種情況:

     A,  測試目前的 SELinux 政策規則;

     B,測試新應用程式,看看将 SELinux 政策規則應用到這些程式時會有什麼效果;

     C, 解決某一特定服務或應用程式在 SELinux 下不再正常工作的故障。

    可使用 audit2allow 指令來讀取 SELinux 稽核日志并生成新的 SELinux 規則,進而有選擇性地允許被拒絕的行為,而這也是一種在不禁用 SELinux 的情況下,讓應用程式在 Linux 系統上工作的快速方法。

3, Enforcing工作模式(強制模式)

   SELinux 被啟動,并強制執行所有的安全政策規則。

二, Selinux的工作模式切換

修改SEAndroid的模式可以通過如下方式完成:

1,通過getenforce指令擷取系統的selinux模式, 通過setenfore臨時修改模式。臨時修改

setenforce 0   ##設定SELinux 成為permissive模

setenforce 1   ##設定SELinux 成為enforcing模式

2,在kernel 關閉 selinux

    在核心中配置SECURITY_SELINUX設定為 false,重新編譯kernel刷機。可以永久關閉seandroid。

    以下是測試的核心編譯中.config檔案中關閉selinux之後的配置資訊:

CONFIG_SECURITY_SELINUX=n

3,在init程序啟動的時候關閉selinux

     安卓系統啟動過程中,init程序會進行selinux的初始化。通過讀取/proc/cmdline檔案,判斷androidboot.selinux的值是否需要開啟selinux。是以,我們可以init程序初始化selinux的時候強制執行關閉操作。

androidboot.selinux=permissive

androidboot.selinux=enforcing

androidboot.selinux=disable  

在rk3399中可以搜尋

在rk3399的android源碼device/rockchip目錄下中搜尋”androidboot.selinux”, 然後就可以看到cmdline是可以在BOARD_KERNEL_CMDLINE變量中追加的, 同時也可以看到将cmdline相關内容加入了boot.img鏡像了。

./common/BoardConfig.mk:86:BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive

./common/mkimage.sh:92:    mkbootimg --kernel $KERNEL_DEBUG --ramdisk $OUT/ramdisk.img --second kernel/resource.img --os_version $PLATFORM_VERSION --header_version $BOARD_BOOTIMG_HEADER_VERSION --os_patch_level $PLATFORM_SECURITY_PATCH --cmdline "$BOARD_KERNEL_CMDLINE" --output $OUT/boot.img && \

注: 在Ubuntu這些linux系統,徹底關閉SeLinux請使用下面方法, 然後重新開機機器。

#vim /etc/selinux/config

将 SELINUX=enforcing 改為 SELINUX=disabled

繼續閱讀