| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android 11 selinux 权限设置 -> 正文阅读 |
|
[移动开发]Android 11 selinux 权限设置 |
快速阅读 框架 SELinux介绍 看Android怎么写? 如何确认是SELinux 约束引起? 怎么抓取SELinux Log? 修改之后,怎么快速验证? 怎么从log中提取有效信息? 重点介绍 参考文档 架构 从上层到驱动层的调用流程,但是我们重点关注sContext: 注: file_contexts //系统中所有file_contexts安全上下文 seapp_contexts //app安全上下文 property_contexts //属性的安全上下文 service_contexts ? ?//service文件安全上下文 genfs_contexts //虚拟文件系统安全上下文 以上文件system/sepolicy中都有对应的内容 例如:通过adb shell ls –Z指令查看文本的sContext 通过adb shell ps -Z指令可以查看进程的sContext SELinux介绍 SELinux的背景 1.SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统 2.SELinux 按照默认拒绝的原则运行:任何未经明确允许的行为都会被拒绝 3.SELinux的两种模式。 宽容模式:权限拒绝事件会被记录下来,但不会被强制执行。 强制模式:权限拒绝事件会被记录下来并强制执行。 4.Android 4.3(宽容模式)和 Android 4.4(部分强制模式),之后就全面强制执行SELinux SeLinux作用 提高Android安全性。非法操作会被阻止,并且尝试进行的所有违规行为都会被内核记录到?dmesg?和?logcat?中。例如,app访问文件:/proc/sys/kernel/printk,app设置属性:persist.qiku.log.level等 看Android怎么写? 具体源码路径: system/sepolicy 注: 1)system/sepolicy/public/te_macros----这是定义方法的地方。eg:init_daemon_domain(adbd) 2)system/sepolicy/Android.mk中有对private、public、vendor目录的说明,具体如下: 详细说明: 在Android8.0以上,SELinux策略分离成平台(platform)和非平台(non-platform)两部分,而平台策略为了给非平台作者导出特定的类型和属性,又分为平台私有(platform private)和平台公有(platform public)部分。 1.平台公有策略(platform public seoplicy) 平台共有策略全部定义在/system/sepolicy/public下,public下的type和attribute可以被non-platform中的策略所使用,也就是说,设备制造商的sepolicy作者在non-platform下可以对platform public sepolicy的策略进行扩展。 2.平台私有策略(platform private seoplicy) 与公有策略相反,被声明为私有策略的type或attribute对non-platform的策略作者是不可见的。 举例,以8.0版本的aosp源代码中的/system/sepolicy/private/目录下的atrace.te文件为例。 1)system/sepolicy/private/file_contexts有定义“/system/bin/atrace????u:object_r:atrace_exec:s0” 2)system/sepolicy/private/atrace.te有定义atrace相关的规则 3)我们在device/qcom/sepolicy/common目录下新增一个atrace.te文件,并添加规则 "allow atrace sdcardfs:file read;" 当我们make sepolicy进行编译时会在校验的时候失败,提示我们“device/qcom/sepolicy/common/atrace.te:2:ERROR 'unknown type atrace' at token ';' on line 23355”,那么也就是说private策略中的type和attribute对我们是不可见的。 注: 自我认知说明,scontext只有平台和非平台之分,也就是说,定义在平台private下面file_contexts属性,public和非平台的也可以共享它。 如何确认是Selinux 约束引起? userdebug版本: adb root adb shell setenforce 0 eng版本: adb shell setenforce 0 详细介绍: adb shell setenforce 0 0--代表Permissive 1--代表Enforcing adb shell getenforce---查看状态 如果设置成permissive mode 后问题依旧,说明还有其他的权限问题约束,否则就是SELinux 方面的问题 怎么抓取SELinux Log? 1.adb shell dmesg----抓kernel log (特别说明:adb shell "cat /proc/kmsg | grep avc" > avc_log.txt ?可以直接提出avc的log) 2.adb logcat –b events 关键字: avc: denied 修改之后,怎么快速验证? 方法一: mmm system/sepolicy 生成out目录下,注意有两个目录: system/etc/sepolicy---Android 原生的,建议不动。如果修改,会影响CTS vendor/etc/sepolicy---第三方厂家修改。 特别说明: system/sepolicy/Android.mk中定义了一些属性 BOARD_SEPOLICY_DIRS ?##此宏涉及到的目录,会编译到vendor/etc/sepolicy下 PLAT_PUBLIC_POLICY?##此宏涉及到的目录,会当成system/sepolicy/public PLAT_PRIVATE_POLICY##此宏涉及到的目录,会当成system/sepolicy/private 另外,单独编译后,会发现都会有对应的生成目录 方法二: make sepolicy 怎么从log中提取有效信息? 举例1
普通提取: allow radio proc:file read; avc: denied?{ read } ?scontext=u:r:radio:s0?tcontext=u:object_r:proc:s0 ?tclass=file 格式: allow scontext tcontext:tclass {read} 深入提取: 1.观察原生: 2.自建: 1)定义路径 新建文件 genfscon_contexts 输入 genfscon proc /sys/kernel/printk u:object_r:proc_printk:s0 注:proc_printk是自定义的名字 2)定义type type proc_printk, fs_type, proc_type; 注: 可以新建一个proc_printk.te,或者直接在file.te中导入 3)重新封装 allow radio proc_printk:file read; 目的: 防止与原生中的neverallow发生冲突 举例2
普通提取 allow shell system_data_file:dir open; 深入提取 1.观察原生: 2.自建: 1)定义路径 新建文件 file_contexts 输入: /data/misc/qiku(/.*)? ?u:object_r:qiku_data_file:s0 2)定义type type qiku_data_file, file_type, data_file_type; 注: 可以新建一个qiku_data_file.te,或者直接在file.te中导入 3)重新封装 allow shell qiku_data_file:dir open; 重点介绍 1)Android权限必须显示声明,没有声明的话默认就没有权限。 2)neverallow语句的作用 在生成安全策略文件时进行检查,判断是否有违反neverallow语句。也就是说编译过程中,发现neverallow中有注明不能allow的权限,而你又allow了一条,就会编译不过。 参考文档 https://blog.csdn.net/Innost/article/details/19299937 https://blog.csdn.net/Innost/article/details/19641487 https://blog.csdn.net/Innost/article/details/19767621 https://blog.csdn.net/huangyabin001/article/details/79290382 后续继续更新------------------------------------ |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:21:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |