【android系统】chomd 777都解决不了的——SElinux权限问题解决方法

本文主要是介绍【android系统】chomd 777都解决不了的——SElinux权限问题解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

在mediaservice中读取设备节点/dev/sst_storage失败,通过log发现没有权限。尝试chomd 777设置设备节点权限,发现在代码中还是无法获取到权限打开和读取。通过网上资料查询获知可能是SELinux策略导致的。
在这里插入图片描述

了解权限管理机制

权限管理机制介绍

SEAndroid 是SELinux 在Android 上面的一个移植。SELinux 是Linux上系统保护机制,SELinux 全称 Security Enhanced Linux (安全强化 Linux),是MAC (Mandatory Access Control,强制访问控制系统)的一个实现。 其目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。

Android系统基于Linux实现。针对传统Linux系统,NSA开发了一套安全机制SELinux,用来加强安全性。然而,由于Android系统有着独特的用户空间运行时,因此SELinux不能完全适用于Android系统。为此,NSA同Google一起针对Android系统,在SELinux基础上开发了 SEAndroid。 遇到这类问题的解决方法 在Android

7.0上,因为采取了SEAndroid/SElinux的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。Google 默认禁止app , 包括system app, radio app 等直接写/sys 下面的文件, 认为这个是有安全风险的。如果直接放开SELinux 权限, 会导致CTS 无法通过.

通常遇到此类情况,你有两种做法:

(1). 通过system_server 或者 init 启动的service 读写, 然后app 通过binder/socket 等方式连接APP 访问. 此类安全可靠, 并且可以在service 中做相关的安全审查, 推崇这种方法.

(2). 修改对应节点的SELinux Security Label, 为特定的APP, 如system app, radio,bluetooth 等内置APP开启权限, 但严禁为untrsted app 开启权限. 具体的做法下面以 system app 控制/sys/class/leds/lcd-backlight/brightness 来说明.本文主要采用这个做法来解决。

解决方案

两个命令确定问题是否与SELinux相关

  • 1、命令:setenforce 0
  • 2、命令:getenforce确认SELinux 是否正确关闭,如下图则说明关闭了。

在这里插入图片描述
如下图,则说明没有关闭
在这里插入图片描述
关闭手机的 SELINUX 机制,如果问题还能复现,那么此问题就与 SELinux 不相关,或者相关 但是还与别的机制相关,比如还与 Linux 自主访问控制(DAC)有关。

修改对应的策略文件

1、分解log

重点log:

avc: denied { read } for name=“mmcblk0p12” dev=“tmpfs” ino=7011
scontext=u:r:mediaserver:s0 tcontext=u:object_r:block_device:s0
tclass=blk_file permissive=0

对应的分解:

avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0
tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0

2、添加对应的权限

在相应源类型.te 文件,添加如下格式的一行语句:(结尾别忘了分号) 格式:allow 源类型 目标类型:访问类型 {操作权限};

如上log:

在system/sepolicy目录下找到对应 mediaserver.te 文件添加权限语句:allow mediaserver
block_device:blk_file { read };

在这里插入图片描述
添加权限后还是报错。如上图,open权限不够导致失败,又将open权限加上。
文件添加权限语句:

allow mediaserver block_device:blk_file { open read };

在这里插入图片描述
问题就解决了。
注意,如果你的*.te文件跟我目录不一致,可以尝试用find命令查找一下。

总结

在这里插入图片描述

是时候总结一波了。解决这种问题三个步骤。

  • 1、确定是否跟SELinux策略有关,如果没有关系直接进入3步骤。有关系往下走2步骤。
  • 2、修改SELinux相关文件。
  • 3、最后关键的一步,是时候 来一波关注 了,搞定。

如果还有什么不懂的。可以关注小编的公众号,里面有很多大牛,以及往期精彩文章替你答疑。
在这里插入图片描述

这篇关于【android系统】chomd 777都解决不了的——SElinux权限问题解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/772969

相关文章

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

java导出pdf文件的详细实现方法

《java导出pdf文件的详细实现方法》:本文主要介绍java导出pdf文件的详细实现方法,包括制作模板、获取中文字体文件、实现后端服务以及前端发起请求并生成下载链接,需要的朋友可以参考下... 目录使用注意点包含内容1、制作pdf模板2、获取pdf导出中文需要的文件3、实现4、前端发起请求并生成下载链接使

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

Java捕获ThreadPoolExecutor内部线程异常的四种方法

《Java捕获ThreadPoolExecutor内部线程异常的四种方法》这篇文章主要为大家详细介绍了Java捕获ThreadPoolExecutor内部线程异常的四种方法,文中的示例代码讲解详细,感... 目录方案 1方案 2方案 3方案 4结论方案 1使用 execute + try-catch 记录

mysql关联查询速度慢的问题及解决

《mysql关联查询速度慢的问题及解决》:本文主要介绍mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql关联查询速度慢1. 记录原因1.1 在一次线上的服务中1.2 最终发现2. 解决方案3. 具体操作总结mysql