Android5.X即以上系统权限解决方法
### Android5.X及以上的系统权限解决方法 #### 引言 自Android 5.0(Lollipop)以来,Google为了增强系统的安全性与稳定性,引入了一种更为严格的SELinux(Security Enhanced Linux)权限管理机制。这一机制的核心在于通过严格的访问控制策略来限制应用程序和其他系统组件的权限,从而降低潜在的安全风险。然而,对于开发者而言,这一改变也带来了新的挑战——如何有效地管理和解决由SELinux引发的权限问题。本文将基于实际案例,详细探讨如何根据日志中的提示信息来快速定位并解决常见的权限问题。 #### SELinux权限管理机制 在了解具体的解决方案之前,首先需要对SELinux的基本概念有所了解。SELinux是一种强制访问控制(MAC)系统,它基于Linux内核,并提供了一种细粒度的访问控制方式。当应用程序尝试执行超出其权限的操作时,SELinux会拦截这些操作,并在日志中记录下来,通常表现为`AVC denied`这样的错误消息。 #### 解决原则 解决SELinux权限问题的基本原则是“缺什么补什么”,即根据日志中提供的信息,逐步添加或调整相应的权限,直到不再出现`AVC denied`的提示为止。以下是一些具体的步骤: 1. **查看日志**:通过命令`cat /proc/kmsg | grep avc` 或者 `dmesg | grep avc` 来查看日志中有关权限拒绝的信息。 2. **解析日志**:从日志中提取关键信息,包括缺失的权限类型、请求该权限的实体(即主体SContext)、目标文件或路径(即客体TContext)以及文件类型(TClass)。 3. **添加权限**:在对应的`.te`(Type Enforcement Policy)文件中,添加允许主体对客体进行特定操作的规则。 #### 案例分析 下面通过四个具体案例来进一步说明这一过程: **案例1**: ``` audit(0.0:67): avc: denied { write } for path="/dev/block/vold/93:96" dev="tmpfs" ino=1263 scontext=u:r:kernel:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=0 ``` - 缺少权限:写权限(write) - 请求权限的主体:`u:r:kernel:s0` - 目标对象:`u:object_r:block_device:s0` - 文件类型:`blk_file` **解决方法**:在`kernel.te`文件中添加以下规则: ``` allow kernel block_device:blk_file write; ``` **案例2**: ``` audit(0.0:53): avc: denied { execute } for path="/data/data/com.mofing/qt-reserved-files/plugins/platforms/libgnustl_shared.so" dev="nandl" ino=115502 scontext=u:r:platform_app:s0 tcontext=u:object_r:app_data_file:s0 tclass=file permissive=0 ``` - 缺少权限:执行权限(execute) - 请求权限的主体:`u:r:platform_app:s0` - 目标对象:`u:object_r:app_data_file:s0` - 文件类型:`file` **解决方法**:在`platform_app.te`文件中添加以下规则: ``` allow platform_app app_data_file:file execute; ``` **案例3**: ``` audit(1444651438.800:8): avc: denied { search } for pid=158 comm="setmacaddr" name="/" dev="nandi" ino=1 scontext=u:r:engsetmacaddr:s0 tcontext=u:object_r:vfat:s0 tclass=dir permissive=0 ``` - 缺少权限:搜索权限(search) - 请求权限的主体:`u:r:engsetmacaddr:s0` - 目标对象:`u:object_r:vfat:s0` - 文件类型:`dir` **解决方法**:在`engsetmacaddr.te`文件中添加以下规则: ``` allow engsetmacaddr vfat:dir { search write add_name create }; ``` **案例4**: ``` audit(1441759284.810:5): avc: denied { read } for pid=1494 comm="sdcard" name="0" dev="nandk" ino=245281 scontext=u:r:sdcardd:s0 tcontext=u:object_r:system_data_file:s0 tclass=dir permissive=0 ``` - 缺少权限:读取权限(read) - 请求权限的主体:`u:r:sdcardd:s0` - 目标对象:`u:object_r:system_data_file:s0` - 文件类型:`dir` **解决方法**:在`sdcardd.te`文件中添加以下规则: ``` allow sdcardd system_data_file:dir read; ``` #### 总结与扩展 通过对以上案例的分析,我们可以总结出解决SELinux权限问题的一般流程: 1. **查看日志**:获取权限被拒绝的具体信息。 2. **解析日志**:识别出缺失的权限、请求权限的主体、目标对象以及文件类型。 3. **添加权限**:在相应的`.te`文件中添加允许主体访问客体的规则。 值得注意的是,有时候一次日志提示可能不会展示所有的问题,需要逐步解决已知的权限问题后,才能暴露出其他潜在的权限缺失情况。此外,修改`.te`文件后,需要重新编译并刷新`boot.img`才能使更改生效。 通过上述方法,开发者能够更有效地解决Android 5.X及以上版本中由SELinux引发的各种权限问题,确保应用程序能够正常运行。
































- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 微信小程序:今天吃什么.zip
- 文海苑住宅小区监理规划.doc
- 基于Gulp 的微信小程序前端开发工作流 .zip
- 百度地图微信小程序jsapi.zip
- 一份安全监理规划.doc
- 行业标准招标文件第01章招标公告(投标邀请书).ppt
- 基于QUIC协议实现的高性能安全隧道代理工具-提供TCP和UNIX域套接字的双向协议转换-通过QUIC传输层优化解决网络丢包和高延迟问题-支持多路复用减少端口暴露-内置TLS加密保.zip
- 综合办公楼中央空调系统安装调试施工组织设计.doc
- 天津大学结构力学历年试题.doc
- 微信小程序-打飞机游戏.zip
- 第12章-压力钢管制作安装.docx
- 造价员入门--油漆、涂料、裱糊工程.ppt
- 桩与地基基础工程工程计量与计价.ppt
- PHC管桩的设计及施工.ppt
- wxSortPickerView-微信小程序首字母排序选择表.zip
- Check-Point-解决方案及案例-—-电信行业.doc


