2024-11-6----Android 11(全志713m)----- 关于添加 Selinux 权限

需求

节点:

/sys/devices/platform/motor0/motor_ctrl

上层 APP 使用 JNI 需要对该节点进行 echo 的操作,操作失败。

添加前的验证工作

adb 进去验证下,如下图所示:
在这里插入图片描述
发现权限不够。su 以后再操作是OK的,如下图:
在这里插入图片描述

添加前的修改

为防止报权限错误,直接给777,因为该节点是驱动生成的,所以在代码中修改

--- a/H713-v1.3/longan/kernel/linux-5.4/drivers/misc/gpio-motor/motor-control.c
+++ b/H713-v1.3/longan/kernel/linux-5.4/drivers/misc/gpio-motor/motor-control.c
@@ -268,7 +268,7 @@ static ssize_t motor_ctrl_store(struct device *dev, struct device_attribute *attstatic struct device_attribute motor_ctrl_attr = {.attr = {.name = "motor_ctrl",
-               .mode = 0664,
+               .mode = 0777,},.show = motor_ctrl_show,.store = motor_ctrl_store,

从之前的验证工作可以知道,adb shell 进去 su 以后才可以成功echo节点,所以把APP进行系统签名,这样便会有系统级别的权限,也就是su权限

LOCAL_CERTIFICATE := platform

完整文件如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := FloatService
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(LOCAL_MODULE).apkLOCAL_PREBUILT_JNI_LIBS := \lib/libcptp_float_motor.soinclude $(BUILD_PREBUILT)

这样子结点有777权限,然后APP又具有系统权限,如果还发现APP无法echo成功,adb shell进去

setenforce 0

再用APP操作一次!发现成功了!所以就是 Selinux 权限 不够的问题。

抓AVC权限log

APP 进行操作前

adb logcat -c

清除多余的log,然后进行 APP 操作,发现抓到的log报:

 type=1400 audit(0.0:111): avc: denied { read write } for name="motor_ctrl" dev="sysfs" ino=27911 scontext=u:r:system_app:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0

一般都是缺什么加什么,网上也有根据报的log,添加权限的办法,我这里就不具体述说,我直接在system.te里边加

allow system_app sysfs:file { read write };

报谷歌违反权限,如果不需要CTS直接修改neverallow,但是本人有强迫症,所以按照比较高阶的方法


--- a/H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te
+++ b/H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te
@@ -12,3 +12,4 @@ type sysfs_fan, fs_type, sysfs_type, mlstrustedobject;# Incremental file system drivertype vendor_incremental_module, vendor_file_type, file_type;
+type sysfs_motor_ctrl, sysfs_type, fs_type;--- a/H713-v1.3/device/softwinner/common/sepolicy/vendor/file_contexts
+++ b/H713-v1.3/device/softwinner/common/sepolicy/vendor/file_contexts/dev/motor0  u:object_r:motor:s0/dev/motor_limiter  u:object_r:motor:s0
+/sys/devices/platform/motor0/motor_ctrl  u:object_r:sysfs_motor_ctrl:s0--- a/H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te
+++ b/H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te
@@ -28,3 +28,4 @@ allow system_app selinuxfs:file read;allow system_app mnt_sdcard_file:lnk_file { read };allow system_app motor:chr_file { read write open ioctl };allow system_app sysfs_fan:file { open read write getattr };
+allow system_app sysfs_motor_ctrl:file { open read write };

以为成功的时候却还是不行!!!报的log依旧和之前一样,这非常不对!
因为我已经在file_contexts中

/sys/devices/platform/motor0/motor_ctrl  u:object_r:sysfs_motor_ctrl:s0

将 motor_ctrl 映射成了sysfs_motor_ctrl,就算报错的log应该是如图
在这里插入图片描述
所以肯定是file_contexts加的不对,这不应该啊,在MTK9.0就是这样弄的。

碰到的问题

就在我郁闷的时候,想到了个办法就是看system_app.te别的节点怎么弄的,打算照抄一下
在这里插入图片描述
这个sysfs_fan和我要加的权限很相似,也许可以仿照他。所以


fungo@fungo-PowerEdge-R730xd:/mnt/data2/fungo/H713_11/H713-v1.3$ grep sysfs_fan device/ -nir
device/softwinner/common/sepolicy/vendor/genfs_contexts:30:genfscon sysfs /devices/platform/fan0/hwmon/hwmon2/pwm1 u:object_r:sysfs_fan:s0
device/softwinner/common/sepolicy/vendor/genfs_contexts:31:genfscon sysfs /devices/platform/fan1/hwmon/hwmon3/pwm1 u:object_r:sysfs_fan:s0
device/softwinner/common/sepolicy/vendor/genfs_contexts:32:genfscon sysfs /devices/platform/fan0/hwmon/hwmon2/fan1_input u:object_r:sysfs_fan:s0
device/softwinner/common/sepolicy/vendor/genfs_contexts:33:genfscon sysfs /devices/platform/fan1/hwmon/hwmon3/fan1_input u:object_r:sysfs_fan:s0
device/softwinner/common/sepolicy/vendor/file.te:11:type sysfs_fan, fs_type, sysfs_type, mlstrustedobject;
device/softwinner/common/sepolicy/vendor/system_app.te:30:allow system_app sysfs_fan:file { open read write getattr };
fungo@fungo-PowerEdge-R730xd:/mnt/data2/fungo/H713_11/H713-v1.3$

在这里插入图片描述
看到他在genfs_contexts将结点进行映射,我也照抄它的在里边进行映射

genfscon sysfs /devices/platform/fan0/hwmon/hwmon2/fan1_input u:object_r:sysfs_fan:s0
genfscon sysfs /devices/platform/fan1/hwmon/hwmon3/fan1_input u:object_r:sysfs_fan:s0
+genfscon sysfs /sys/devices/platform/motor0/motor_ctrl                       u:object_r:sysfs_motor_ctrl:s0

结果还是不行啊!!log还是一样的,说明还是映射不对。
我就adb shell进去看下 fan1_input这个节点路径,如图所示
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6db67ea884b648269ceade65c98493c6.png在这里插入图片描述

这个时候我就知道了哪里出错了,映射路径多了个 /sys/

完整修改

diff --git a/H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te b/H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te
index 5f72c0fd9a..a2b8adabf8 100644
--- a/H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te
+++ b/H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te
@@ -12,3 +12,4 @@ type sysfs_fan, fs_type, sysfs_type, mlstrustedobject;# Incremental file system drivertype vendor_incremental_module, vendor_file_type, file_type;
+type sysfs_motor_ctrl, sysfs_type, fs_type;
diff --git a/H713-v1.3/device/softwinner/common/sepolicy/vendor/genfs_contexts b/H713-v1.3/device/softwinner/common/sepolicy/vendor/genfs_contexts
index 052c98f3d7..70fe5efe29 100644
--- a/H713-v1.3/device/softwinner/common/sepolicy/vendor/genfs_contexts
+++ b/H713-v1.3/device/softwinner/common/sepolicy/vendor/genfs_contexts
@@ -31,3 +31,4 @@ genfscon sysfs /devices/platform/fan0/hwmon/hwmon2/pwm1 u:object_r:sysfs_fan:s0genfscon sysfs /devices/platform/fan1/hwmon/hwmon3/pwm1 u:object_r:sysfs_fan:s0genfscon sysfs /devices/platform/fan0/hwmon/hwmon2/fan1_input u:object_r:sysfs_fan:s0genfscon sysfs /devices/platform/fan1/hwmon/hwmon3/fan1_input u:object_r:sysfs_fan:s0
+genfscon sysfs /devices/platform/motor0/motor_ctrl                       u:object_r:sysfs_motor_ctrl:s0
\ No newline at end of file
diff --git a/H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te b/H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te
index de408cdc2c..b78cc97f54 100644
--- a/H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te
+++ b/H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te
@@ -28,3 +28,4 @@ allow system_app selinuxfs:file read;allow system_app mnt_sdcard_file:lnk_file { read };allow system_app motor:chr_file { read write open ioctl };allow system_app sysfs_fan:file { open read write getattr };
+allow system_app sysfs_motor_ctrl:file { open read write };
diff --git a/H713-v1.3/longan/kernel/linux-5.4/drivers/misc/gpio-motor/motor-control.c b/H713-v1.3/longan/kernel/linux-5.4/drivers/misc/gpio-motor/motor-control.c
index 8d6846e8f7..e5cbe8d887 100644
--- a/H713-v1.3/longan/kernel/linux-5.4/drivers/misc/gpio-motor/motor-control.c
+++ b/H713-v1.3/longan/kernel/linux-5.4/drivers/misc/gpio-motor/motor-control.c
@@ -268,7 +268,7 @@ static ssize_t motor_ctrl_store(struct device *dev, struct device_attribute *attstatic struct device_attribute motor_ctrl_attr = {.attr = {.name = "motor_ctrl",
-               .mode = 0664,
+               .mode = 0777,},.show = motor_ctrl_show,.store = motor_ctrl_store,

将节点进行映射

 H713-v1.3/device/softwinner/common/sepolicy/vendor/genfs_contexts
+genfscon sysfs /devices/platform/motor0/motor_ctrl            u:object_r:sysfs_motor_ctrl:s0

声明该结点类型

H713-v1.3/device/softwinner/common/sepolicy/vendor/file.te
type sysfs_motor_ctrl, sysfs_type, fs_type;

最后授予权限

H713-v1.3/device/softwinner/common/sepolicy/vendor/system_app.te
allow system_app sysfs_motor_ctrl:file { read write };

验证OK

总结

之前在MTK9.0上加过,所以还是知道一些具体的流程,但是每个平台和版本不太一样,一些细节也不一样,比如这次的映射,之前是在mtk的file_context可以加的,但在全志是在genfs_contexts上,而且路径什么的还不能多 /sys/

所以以后遇到映射不成功的,可以仿照一个相似的节点,看看这个节点在哪个文件映射,然后声明,然后allow权限

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/4680.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝队技能】【溯源反制】反打红队-CS反打其他

蓝队技能 CS反打&其他 蓝队技能总结前言一、CS批量上线二、利用漏洞(CVE-2022-39197)三、CS的Server端破解四、旁站反制五、蜜罐反制六、邮件钓鱼反制七、其他反制技术 总结 前言 本文深入探讨了溯源反制中针对远程控制工具CobaltStrike的多种策略与…

linux下一个应用是如何被执行的

Linux系统下,一个应用从启动到执行main函数经历了什么: 加载器(loader):用户在终端启动一个程序时候,shell调用execve,执行程序的启动。内核态操作:execve做了以下几个事情&#xf…

cv.dnn.blobFromImage参数详解

例如: image cv.imread(imgs/img.png) blob cv.dnn.blobFromImage(image, scalefactor1.0, size(224, 224), mean(0, 0, 0), swapRBTrue, cropFalse) print("原始图像形状:", image.shape) print("Blob数据形状:", blob.shape)1. image 含义…

vscode 使用prettier格式化代码 在项目中增加.prettierrc文件,代码结尾不加分号,缩进使用两个空格

.prettierrc: {"tabWidth": 2,"useTabs": true,"semi": false,"singleQuote": false,"printWidth": 100,"trailingComma": "none" }

基于Spring Boot和Vue的电子商城系统功能设计

基于Spring Boot和Vue的电子商城系统功能设计 该系统是一个基于Spring Boot和Vue框架的电子商城平台,包含前台商城和后台管理系统。系统功能设计包括用户购物体验和管理员管理功能,支持商品的分类展示、收藏、购物车和订单管理等模块。以下是系统功能的简…

SpringBoot健身房管理系统:用户体验至上

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 图4-1系统工作原理…

ride安装后桌面没有快捷方式/打不开闪退?

我们在使用ride之前需要先使用pip命令下载安装python的一些必须库: pip install robotframework //或者使用豆瓣源下载: pip install i https://pypi.douban.com/simple robotframework //以上二选一,之后再下载ride: pip insta…

Hive操作库、操作表及数据仓库的简单介绍

数据仓库和数据库 数据库和数仓区别 数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别 操作型处理(数据库),叫联机事务处理OLTP(On-Line Transaction Processing),也可以称面向用户交易的处理系统,它是针对具体业务…

【C++】继承和多态常见的面试问题

文章目录 继承笔试面试题1. 什么是菱形继承?菱形继承的问题是什么?2. 什么是菱形虚拟继承?如何解决数据冗余和二义性?3. 继承和组合的区别?什么时候用继承?什么时候用组合? 选择题 多态概念考察…

Unity 6 来袭

这里写自定义目录标题 1.提升渲染性能1.1 降低CPU开销 Lower CPU overhead1.2.减少内存带宽1.3.高档低分辨率帧2.多人游戏创作3.扩大多平台覆盖范围3.1.增进Android平台开发4.使用Runtime AI解锁各种可能性4.1.Unity Muse4.2.Unity Sentis5.实现更具吸引力的视觉效果5.1.自适应…

高职院校大数据专业群实训平台建设方案

一、高职大数据专业群实训平台建设的重要性 高职教育的核心在于培养学生的实际应用能力,因此实践教学在整个教育体系中占据极其重要的地位。构建一个综合性的大数据专业群实训平台,旨在支持大数据项目开发、专业课程实训及模拟真实工作场景,…

EPS出现时间错误,对象无法选中?

问题描述 eps在使用过程中,选择等高线突然弹出“时间错误,对象无法选中”的问题。 解决办法 关闭eps,重新启动并打开文件,即可解决。

深⼊理解指针(1)

⽬录: 1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. 指针运算 一 内存和地址 指针定义的引入 假如你的一个去旅游,然后进入酒店夜宿,而这时候你要去找他,如果你的朋友没有告诉他的房间,这时候你就…

qt QTableWidgetItem详解

1、概述 QTableWidgetItem 是 Qt 框架中的一个类,专门用于在 QTableWidget(一个基于项的表格视图)中表示单个单元格的内容。QTableWidget 继承自 QAbstractItemView,而 QTableWidgetItem 则作为表格中的一个单元格项,…

CUDA下载和安装

CUDA下载和安装 前言下载安装后续添加参考链接 前言 由于我需要运行的代码与我当前的CUDA版本不兼容,所以我现在需要进行CUDA的更新,下载一个低版本的CUDA以匹配我的Pytorch 下载 CUDA下载地址:CUDA下载链接 选择适合自己的版本 由于我是要运行一个开源项目,我选择对应的CU…

手把手教你Windows系统服务提权(含提权实验+环境配置教程),网络安全零基础入门到精通教程建议收藏!

文章目录 服务配置权限脆弱环境准备提权实验服务注册表权限脆弱环境准备提权实验 服务路径权限脆弱环境准备提权实验 未引用的服务路径环境准备提权实验 针对不安全服务提权的防御措施 👉1.成长路线图&学习规划👈👉2.网安入门到进阶视频教…

宠物空气净化器测评!希喂/米家/有哈宠物空气净化器谁性价比高

宠物空气净化器测评!如何清理猫毛应该是每个养猫人都在面对的难题。那些细小的浮毛真的不能不管,它们飘落在家里的每一个角落,不仅极难清理,还弄得我鼻子发痒、频繁咳嗽。为了解决这些浮毛,我家一直在用宠物空气净化器…

python3的基本数据类型:List(列表)的连接与转换

一. 简介 前面学习了 python中列表的创建,截取等一些操作。文章如下: python3的基本数据类型:List(列表)创建与索引-CSDN博客 python3的基本数据类型:List(列表)的截取-CSDN博客…

vue文件上传-所有文件选项去掉

效果&#xff1a; 缘由&#xff1a; <template><div class"upload-container"><div class"upload-box" click"triggerFileInput" dragover.prevent drop"handleDrop"><p>点击或拖放文件到这里上传</p>&…

JS | 如何规范 JavaScript 的注释

目录 一、使用单行注释 二、多行注释的使用 三、使用JSDoc风格的注释 四、采用一致的注释习惯 规范JavaScript的注释方法包括使用单行注释、多行注释、使用JSDoc风格的注释以及采用一致的注释习惯。其中&#xff0c;使用JSDoc风格的注释是为了提高代码的可读性和维护性&…