首页 > 系统相关 >Android SELinux 权限问题总结

Android SELinux 权限问题总结

时间:2023-02-18 21:47:33浏览次数:42  
标签:object SELinux app s0 file denied Android 权限 tcontext

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

标签:object,SELinux,app,s0,file,denied,Android,权限,tcontext
From: https://www.cnblogs.com/pypyn/p/17133687.html

相关文章

  • Android 高德地图绘制虚线线条
    1.获得绘制虚线的坐标点集合//绘制虚线的gps坐标点privateList<LatLng>convesLngs=newArrayList<LatLng>();/***扇形区域折线存储*/privateMap<Stri......
  • Android Native Code 手动调试
    调试启动过程中的AndroidNativeCodeCrash记录一下,最后成功使用的工具是lldb+lldb-server,不需要root权限。我最先尝试使用的是,gdb+gdb-server在attach后总是......
  • 【Android逆向】frida hook so 函数
    1.apk来自52pojie链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ密码:u1an2.apktool反编译apk,拿到so文件java-jar../apktool_2.2.4.jardapp-debug.apk3.......
  • Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?
    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。前言大家好,我是小彭。SharedPreferences是Android平台上轻量级的K-V存储框架,亦是初代......
  • win系统下AndroidStudio环境配置
    一,配置java环境1.安装JDK,可以到官网进行下载:输入下载地址:SoftwareDownload|Oracle选择java,java(JDK)fordevelopse 选择JavaSE18.03版本下载bin安装文件......
  • Unity Android端操作-显示/影藏+旋转+放大缩小+截图的脚步代码
    显示/影藏//获取操作对象publicGameObjecttext;//初始旋转角度publicfloatxspeed=120;voidStart(){}//Update......
  • Android 高德地图自定义Marker覆盖物
    直接贴代码:privatevoidquernResCircle(LatLnglatLng,Stringtitle,Stringaddress){ViewmarkerView=ViewGroup.inflate(LocationActivity.this,R.layout.......
  • Android Studio相关配置说明
    介绍:AndroidSdutio是谷歌推出的一个Android集成开发工具。现已将SDK(softwaredevelopmentkit)集成到 AndroidStudio中。可以直接集成安装。 PS:如果部分用户先......
  • win系统下eclipse开发android环境配置
    一.安装java环境1.下载JDK并安装在java官方网站下载jdk安装软件,下载网址:https://www.oracle.com/java/technologies/downloads/此时oracle发布的java已......
  • Android笔记--动态申请权限
    动态申请权限在动态申请权限这里,一共分为两种不同的模式,分别是Lazy模式(懒汉式)和Hungry模式(饿汉式),这两种模式区分的话,可以通俗地解释一下就是,对于懒汉来说,只有在我们点击某......