自学内容网 自学内容网

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 *att
 static 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).apk

LOCAL_PREBUILT_JNI_LIBS := \
lib/libcptp_float_motor.so

include $(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 };

报违反谷歌权限,如果不需要CT


原文地址:https://blog.csdn.net/qq_39569320/article/details/143568601

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!