国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解Android Selinux 權限及問題

2019-10-22 18:23:20
字體:
來源:轉載
供稿:網友

由于現做的是MTK平臺,源碼路徑基于MTK, 不過高通大同小異

說明

Android 5.0以后完全引入了 SEAndroid/SELinux 安全機制,這樣即使擁有 root 權限或 chmod 777 ,仍然無法再JNI以上訪問內核節點。

其實在 Android 4.4 就有限制的啟用此安全機制了。后面內容都按照 5.0 以后介紹,4.4 會有些許差異。

SELinux Mode

SELinux 分為兩種模式,Android 5.0 后所有進程都使用 enforcing mode。

enforcing mode: 限制訪問permissive mode: 只審查權限,不限制

SELinux Policy文件路徑

# Google 原生目錄 external/sepolicy# 廠家目錄,高通將 mediatek 換為 qcomalps/device/mediatek/common/sepolicyalps/device/mediatek/<platform>/sepolicy

編譯時將以合并的方式將廠家policy追加到Google原生。

Log

沒有權限時可以在內核找到如下 log :

# avc: denied { 操作權限 } for pid=7201 comm=“進程名” scontext=u:r:源類型:s0 tcontext=u:r:目標類型:s0 tclass=訪問類型 permissive=0avc: 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``` ## 權限修改主要有三種方式,前兩種只能用來測試,第三種是推薦的正式處理方式。### adb在線修改seLinux```bash# Enforcing - 表示已打開 ,Permissive - 表示已關閉getenforce;  //獲取當前seLinux狀態setenforce 1; //打開seLinuxsetenforce 0; //關閉seLinux

kernel中關閉

# alps/kernel-3.18/arch/arm64/configs/xxx_defconfigCONFIG_SECURITY_SELINUX=y // 屏蔽此配置項

SELinux Sepolicy中添加權限

修改相應源類型.te文件(基本以源進程名命名),添加如下一行語句:

# 格式allow 源類型 目標類型:訪問類型 {操作權限}; // 注意分號# 實例,具體寫法參考源碼allow system_app shell_data_file:dir{getattr read write};allow mediaserver tfa9897_device:chr_file { open read write }; allow system_server tfa9897_device:chr_file rw_file_perms; chr_file - 字符設備 file - 普通文件 dir - 目錄

通常很少修改Google default 的policy, 推薦更新mediatek 下面的相關的policy.

新建節點

如果是自己新建的節點,需要在 sepolicy 路徑下的 file_contexts 文件中做如下添加:

# 參考已有的格式/dev/goodix_fp     u:object_r:goodixfp_device:s0

Android 5.0 修改的文件為device.te 和 file_contexts.be,而且device/mediatek/common/BoardConfig.mk 中的 BROAD_SEPOLICY_UNION 增加對應的xxxx.te。

編譯

# 模塊編譯mmm external/sepolicymake -j24 ramdisk-nodeps & make -j24 bootimage-nodeps# 整編make -j24

ps添加權限后的neverallowed沖突

編譯報錯:

libsepol.check_assertion_helper: neverallow on line xxx ofexternal/sepolicy/domain.te ……

 原因:

新添加的sepolicy項目違反了domain.te 中規定的的總策略原則。所以該條權限策略不能添加,如果強行添加的話有CTS測試失敗的風險。

解決方法:

1.從運行log中找到要訪問的目標名稱,一般是name字段后的名稱
avc: denied { read write } for pid=303 comm="mediaserver" name="tfa9890"dev="tmpfs" ino=3880 scontext=u:r:mediaserver:s0tcontext=u:object_r:device:s0tclass=chr_file permissive=0

2.找到相應的*_contexts文件。

  一般有file_contexts, genfs_contexts,  property_contexts,  service_contexts 等文件

在contexts文件中指定要訪問的目標為一個“源類型 ”有權限訪問的“目標類型”

如:在file_contexts中添加: /dev/tfa9890     u:object_r:audio_device:s0

 舉例

添加權限:

在mediaserver.te中添加allow mediaserver device:chr_file { read write open};

編譯報錯:
libsepol.check_assertion_helper: neverallow on line 258 ofexternal/sepolicy/domain.te (or line 5252 of policy.conf) violated byallow mediaserver device:chr_file { read write open};

違反了domain.te 258的:
neverallow {domain –unconfineddomain –ueventd } device:chr_file { open read write}

運行Log:
avc: denied { read write } for pid=303 comm="mediaserver"name="tfa9890" dev="tmpfs" ino=3880 scontext=u:r:mediaserver:s0 tcontext=u:object_r:device:s0tclass=chr_file permissive=0

修改步驟:

1.目標名稱是: tfa9890, 其在系統中的路徑是: /dev/tfa9890,  是audio相關的設備文件
2.源類型是mediaserver, 在mediaserver.te 文件中發現其具有 audio_device 目標類型的權限
3.所以在file_contexts 中添加 “/dev/tfa9890        u:object_r:audio_device:s0” 可以解決問題

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。

 

注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 大姚县| 留坝县| 达州市| 和政县| 合肥市| 建德市| 察雅县| 分宜县| 永昌县| 文安县| 讷河市| 永宁县| 库伦旗| 随州市| 贵港市| 江达县| 岫岩| 新泰市| 溧阳市| 清水县| 滨州市| 黎城县| 德昌县| 巴里| 澄城县| 天台县| 吐鲁番市| 巧家县| 鸡泽县| 靖边县| 云浮市| 德安县| 二连浩特市| 孟津县| 汶上县| 西昌市| 福海县| 梁河县| 夏津县| 公主岭市| 岳池县|