如何在 Android 上增加 SELinux 权限

SELinux(Security-Enhanced Linux)是一种强制访问控制(MAC)机制,它为 Android 系统提供了额外的安全层。通过 SELinux,系统管理员可以定义细粒度的安全策略,限制进程对文件、网络和其他资源的访问。本文将详细介绍如何在 Android 上增加 SELinux 权限。

1. 了解 SELinux 模式

在开始之前,了解 SELinux 的不同模式是很重要的:

  1. Enforcing 模式:SELinux 策略被强制执行,违反策略的行为会被阻止。
  2. Permissive 模式:SELinux 策略被记录但不强制执行,违反策略的行为会被记录但不会阻止。
  3. Disabled 模式:SELinux 被禁用,不执行任何策略。

注意: Android 里面临时关闭selinux命令:setenforce 0

2.识别需要增加权限的地方

2.1 查看日志

在 Permissive 模式下,SELinux 会记录所有违反策略的行为。你可以通过查看日志来识别需要增加权限的地方。

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

2.2 编写 SELinux 策略

分析过程:
缺少什么权限: { excute } 权限
谁缺少该权限: scontext = u:r:platform_app:s0
对哪个文件缺少权限: tcontext = u:object_r:app_data_file
什么类型的文件:tclass = file
完整意思:platform_app进程对app_data_file类型的file缺少excute权限。
解决办法:
在SEpolicy目录下,找到platform_app.te这个文件,加入以下内容:
allow platform_app app_data_file:file excute;
如果存在大量报错,可以用如下方法(某些语句会识别不出来,可用根据上面的方法,自己写)
1、日志中搜索 "avc",存在类似如下的报错


2、将所有报错保存到一个文件中,例如avc.txt,并放到源码根目录
3、在源码目录先source lunch
4、利用原生自带功能生成 avc.te 权限文件
audit2allow -i avc.txt -o avc.te

2.3 增加权限过程

这个需要通过先type定义,但大多数情况是已经存在了,只需要增加权限就好了

1、device.te里面添加一个标签(以下为举例,具体根据报错添加)
type demura_spi_device, dev_type;
2、file_contexts里面添加节点
/dev/spidev0.0 u:object_r:demura_spi_device:s0
3、XXXXXX.te添加允许规则(一般只需要这个步骤,除非是未定义的标签和节点)
allow XXXXX demura_spi_device:chr_file { ioctl read write open map getattr }

2.4 特殊情况

(1)增加 ioctl 权限
增加ioctl权限规则的时候,若代码中已经存在allow语句,且avc log中包含 ioctlcmd = xxxx 字段的时候,则需要使用allowxperm。
查找对应的16进制代码,在te文件中增加
allowxperm A B:class ioctl ioctlcmd;
(2)ioctl cmd集合
若是需要很多ictol cmd,可以参考以下两个文件,定义一个ictol cmd集合,一次性加多个io权限

/system/sepolicy/public/ioctl_defines

/>system/sepolicy/public/ioctl_macros

  • _ ioctl_macros中定义ictol cmd集合,集合中的ictol cmd权限可以在ioctl_defines中找到
  • 在te文件中增加ictol cmd集合权限_
相关推荐
running up that hill19 分钟前
Android的线性布局
android
m0_7482299921 分钟前
Laravel9.x核心特性全解析
android
2603_949462102 小时前
Flutter for OpenHarmony社团管理App实战:意见反馈实现
android·flutter
错把套路当深情3 小时前
android两种渠道支持一键打包 + 随意组合各种渠道
android
彬sir哥4 小时前
android studio如何把.gradle从C盘移到D盘
android·gradle·maven·android studio
、BeYourself5 小时前
TabLayout 与 ViewPager2 的基本使用
android·android-studio
南村群童欺我老无力.5 小时前
Flutter 框架跨平台鸿蒙开发 - 城市文创打卡:探索城市文化创意之旅
android·flutter·华为·harmonyos
Madison-No76 小时前
【Linux】文件操作&&重定向原理
android·linux·运维
2603_949462106 小时前
Flutter for OpenHarmony社团管理App实战:消息中心实现
android·javascript·flutter
andr_gale7 小时前
08_flutter中如何优雅的提前获取child的宽高
android·flutter