selinux許可權問題
阿新 • • 發佈:2018-12-28
adb修改selinux
Enforcing(表示已開啟),Permissive(表示已關閉)
getenforce; //獲取當前selinux狀態
setenforce 1; //開啟selinux
setenforce 0; //關閉selinux
從kernel中徹底關閉
修改/linux/android/kernel/arch/arm64/configs/xxx_defconfig檔案(xxx一般為產品名),去掉CONFIG_SECURITY_SELINUX = y的設定項
sepolicy中新增許可權
- 修改依據,通過指令cat /proc/kmsg | grep denied,或Kernel 的log中定位到的標誌性log
- 修改步驟
- 找相應的源型別.te檔案,此檔案可能存放的路徑:
- linux/android/external/sepolicy
- linux/android/device/qcom/sepolicy/common
- device/xxx/sepolicy(與device相關)
- 標誌性log
- 找相應的源型別.te檔案,此檔案可能存放的路徑:
avc: denied { 操作許可權 } for pid=7201 comm=“程序名” scontext=u:r:源型別:s0 tcontext=u:r:目標型別:s0 tclass=訪問型別 permissive=0
·在相應源型別.te檔案,新增如下格式的一行語句(結尾有分號)
格式:allow 源型別 目標型別:訪問型別 {操作許可權};
例項
kernel log:
avc: denied {getattr read} for pid=7201 comm="xxx.xxx" scontext=u:r:system_app:s0 tcontext=u:r:shell_data_file:s0 tclass=dir permissive=0
修改方案:
在system_app.te檔案中,新增下面語句: allow system_app shell_data_file:dir{getattr read};
修改Sepolicy後出現“Error While Expanding policy”
在系統新增某個*.te或在te檔案中新增某個selinux許可權後,build會出現如下error:
genfscon proc /driver/thermal u:object_r:proc_thermal:s0
libsepol.report_failure: neverallow on line 429 of system/sepolicy/private/app.te (or line 21317 of policy.conf) violated by allow system_app system_file:file { write };
libsepol.report_failure: neverallow on line 406 of system/sepolicy/public/domain.te (or line 8484 of policy.conf) violated by allow system_app system_file:file { write };
libsepol.check_assertions: 2 neverallow failures occurred
Error while expanding policy
這是因為在/system/sepolicy/private/app.te和system/sepolicy/public/domain.te檔案中添加了一些neverallow rules,導致編譯檢查的時候出現錯誤。
neverallow appdomain system_file:dir_file_class_set {create write setattr relabelfrom relabelto append unlink link rename};
只需要在上面的規則中去掉新增的allow xx system_file:file { write };中的xx,具體方式是在nerverallow中用{}裡用-xx排除某個,即不需要有此規則:
neverallow {appdomain -system_app} system_file:dir_file_class_set {create write setattr relabelfrom relabelto append unlink link rename};