如何在 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集合权限_
相关推荐
limingade13 分钟前
手机实时提取SIM卡打电话的信令声音-整体解决方案规划
android·智能手机·usb蓝牙·手机拦截电话通话声音
Harry技术21 分钟前
Trae搭建Android开发:项目中Ktor的引入与使用实践
android·kotlin·trae
猪哥帅过吴彦祖37 分钟前
Flutter 插件工作原理深度解析:从 Dart 到 Native 的完整调用链路
android·flutter·ios
AI工具测评与分析1 小时前
EhViewer安卓ios全版本类下载安装工具的完整路径解析
android·ios
非凡ghost2 小时前
Control Center 安卓版:个性化手机控制中心
android·智能手机·生活·软件需求
撩得Android一次心动3 小时前
Android 项目:画图白板APP开发(一)——曲线优化、颜色、粗细、透明度
android
月夜风雨磊11 小时前
Android NDK从r10c版本到r29版本的下载链接
android·gitee·android ndk
louisgeek11 小时前
Android MIUI 开启 Google Play 服务
android
独行soc12 小时前
2025年大模型安全岗的面试汇总(题目+回答)
android·人工智能·安全·面试·职场和发展·渗透测试
前行的小黑炭13 小时前
Android App:每次想写新项目锻炼一下,但苦于没有UI,那么这篇文章适合你~(适合基础小白锻炼)
android·kotlin