說明
系統: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