如何在 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集合权限_
相关推荐
小蜜蜂嗡嗡1 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi001 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体
zhangphil3 小时前
Android理解onTrimMemory中ComponentCallbacks2的内存警戒水位线值
android
你过来啊你3 小时前
Android View的绘制原理详解
android
移动开发者1号6 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号6 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
ii_best11 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk11 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭16 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin
aqi0016 小时前
FFmpeg开发笔记(七十七)Android的开源音视频剪辑框架RxFFmpeg
android·ffmpeg·音视频·流媒体