SELinux TE 添加权限不生效的解决方法
==============================================
selinux security level引起的denied u:r:untrusted_app:s0:c512,c768问题,可以查看:https://blog.csdn.net/nuanhua209/article/details/56481783
如果报错中有c512,c768 错误提示,可采用本方法

avc: denied { read } for name="ttyHSL1" dev="tmpfs" ino=5215 scontext=u:r:priv_app:s0:c512,c768 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0
avc: denied { getattr } for path="/dev/ttyHSL0" dev="tmpfs" ino=8322 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:console_device:s0 tclass=chr_file permissive=0
全局搜索 目标类型,找到对应设备的te文件
如tcontext=u:object_r:console_device:s0 报错:grep -nR console_device
system/sepolicy/device.te:17:type console_device, dev_type;

添加 MSL权限,如:
- type console_device, dev_type;
+ type console_device, dev_type, mlstrustedobject;

有时候应用程序是内置的app,输入private权限,这时可能无法在private目录下面找到对应的.te文件。
但是不要慌,private的type类型声明会与public共用,只需要在public目录下面的.te文件里添加即可。如果遇到编译报错,需要按照报错提示进行修改,
如果遇到重复声明的提示,那么应该是配置共用导致。

SELinux 添加TE权限
===============================
avc: denied { getattr } for path="/dev/ttyHSL0" dev="tmpfs" ino=8322 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:console_device:s0 tclass=chr_file permissive=0

内容分析:
avc: denied { getattr } 文件权限:getattr
scontext=u:r:untrusted_app:s0:c512,c768 源类型: untrusted_app
tcontext=u:object_r:console_device:s0 目标类型:console_device
tclass=chr_file permissive=0 访问类型:chr_file

因此需要修改文件untrusted_app.te,添加以下内容:
allow untrusted_app 目标类型:访问类型 文件权限;

当需要多个文件权限时可以用花括号括起来。
allow untrusted_app 目标类型:访问类型 { 文件权限1 文件权限2 文件权限3 };

allow untrusted_app console_device:chr_file { write open ioctl };

根据logcat日志快速生成权限配置:
安装分析工具:sudo apt install policycoreutils

avc.txt
-----------------
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { create } for name="hsdi_tmp" scontext=u:r:system_app:s0 tcontext=u:object_r:protect_f_data_file:s0 tclass=dir permissive=0
avc: denied { write } for pid=1 comm="init" name="export" dev="sysfs" ino=3486 scontext=u:r:init:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0

allow system_app protect_f_data_file:dir
audit2allow -i avc.txt > avc.te

运行audit2allow工具(external/selinux/prebuilts/bin/audit2allow)之后得到的avc.te文件

avc.te
-------------------
#============= system_app ==============
allow system_app protect_f_data_file:dir create;

avc: denied { open } for path="/dev" dev="tmpfs" ino=15567 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:device:s0 tclass=dir permissive=0
allow platform_app device:dir open;

前面的#============= system_app ==============
就是在告诉你在那个文件里面,你可以找到你们系统真正起作用的system_app.te文件是那个目录的。然后在文件的末尾处添加里面的那句话

allow system_app protect_f_data_file:dir create;

注意 这个权限问题是要一个个慢慢来的,也就是说你这个权限加了 等会你运行进去还有可能出现其他的权限问题。这就需要大家要有耐心慢慢的去一个个加好。
有的时候权限明明加进去了却还是报相同的错误 这个时候你就得检查你是否加对地方了。另外,解析工具可能会漏权限,所以当解析工具没有解析出来时,需要手动添加。

把你编译的这个文件拷贝出来
out/target/product/angler/obj/ETC/sepolicy.recovery_intermediates/policy_recovery.conf

Android SELinux 权限问题总结的更多相关文章

  1. Android安全机制(2) Android Permission权限控制机制

    http://blog.csdn.net/vshuang/article/details/44001661 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 1.概述 Andro ...

  2. selinux权限问题【转】

    本文转载自:https://blog.csdn.net/u011386173/article/details/83339770 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...

  3. Android : SELinux 简析&修改

    一 SELinux背景知识 SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制.DAC的核心思想很简单,就是: ...

  4. Android的权限检查

    Application的权限: 可以在AndroidManifest.xml中用<permission>定义运行Application需要的权限. 用<uses-permission ...

  5. Android PermissionChecker 权限全面详细分析和解决方案

    原文: http://www.2cto.com/kf/201512/455888.html http://blog.csdn.net/yangqingqo/article/details/483711 ...

  6. Android 访问权限设置

    Android开发应用程序时,有时我们要用到很多权限, 今天我就收集了一些开发时可能用到的开启权限设置. 这些权限都是在 AndroidManifest.xml设置. 设置方法 <uses-pe ...

  7. 大约Android 了解权限管理

    如Android应用程序开发人员.为android权限机制一直觉得很奇怪.为什么要这个东西权限?为什么要AndroidManifest里面写的uses-permission 这样的事情?我一直搞不清楚 ...

  8. Android系统权限及签名

    Android系统权限及签名   2015-03-23 19:13:33CSDN-chen52671-点击数:50     Android权限及签名 引子 现象:系统中的一个定制Service,服务是 ...

  9. checkSelfPermission 找不到 Android 动态权限问题

    checkSelfPermission 找不到 Android 动态权限问题  最近写了一个Demo,以前好好地.后来手机更新了新系统以后,不能用总是闪退.而且我的小伙伴的是android 7.0系统 ...

  10. 对Android系统权限的认识

    Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制 Android系统权限相关的内容 (一)linux文件系统上的权限 -rwxr-x--x ...

随机推荐

  1. docker存储配置与管理--项目三

    一.Docker存储概念 1.容器本地存储与Docke存储驱动 容器本地存储:每个容器都被自动分配了内部存储,即容器本地存储.采用的是联合文件系统.通过存 储驱动进行管理. 容器本地存储空间:分层结构 ...

  2. 用文字“画出”时序图:用 AI+Mermaid.js 解决交互过程中的问题

    什么是时序图 序列图是一种用于描述对象之间在时间上的交互顺序的图表. 它可以展示对象之间是如何相互作用的,以及这些交互的顺序. 什么是Mermaid Mermaid.js是一个开源项目,它允许你通过简 ...

  3. 24/10/13 ABC375补题笔记

    A 典,属于显而易见的水题,这数据范围直接暴力做就行了. # include <bits/stdc++.h> using namespace std; int main (){ int n ...

  4. PXI板卡的封装和接口形式

    PXI模块 PXI标准同时定义了3U和6U模块适用的机械尺寸与连接器形式.3U模块在模块底部安装有一个助拔手柄.在顶部和底部通过螺钉固定,底部的固定螺钉部分隐藏在助拔手柄中.占用超过一个槽位的模块可以 ...

  5. 鸿蒙NEXT开发案例:光强仪

    [引言] 本文将介绍如何使用鸿蒙NEXT框架开发一个简单的光强仪应用,该应用能够实时监测环境光强度,并给出相应的场景描述和活动建议. [环境准备] 电脑系统:windows 10 开发工具:DevEc ...

  6. cmu15545笔记-Join算法(Join Algorithms)

    目录 Overview Nested Loop Join Naïve Block Index Sort-Merge Join Hash Join Simple Hash Join Partition ...

  7. golang之copier

    今天我们要介绍的copier库就能处理不同类型之间的赋值.除此之外,copier还能: 调用同名方法为字段赋值: 以源对象字段为参数调用目标对象的方法,从而为目标对象赋值(当然也可以做其它的任何事情) ...

  8. Linux之命令提示神器tldr

    github:tldr-pages/tldr: Collaborative cheatsheets for console commands (github.com) 一款很好用的命令帮助工具, 之前 ...

  9. JPEG格式研究——(1)压缩原理及流程

    之前一直很好奇图片和视频是如何压缩的,由于视频格式会更复杂,所以先从JPEG下手 因为网上资料太难找太分散,有些又看不太懂,所以根据自己的理解整理了一下 JPEG简介 JPEG(Joint Photo ...

  10. Echarts 坐标轴

    1.坐标轴组件配置项总览 坐标轴分为x轴和y轴,操作这两个轴的字段分别为xAxis和yAxis var option = { xAxis:{ name:"月份", axisTick ...