新增节点增加权限

1、Linux用户权限

Linux 系统中采用三位十进制数表示权限,如0755, 0644。

ABCD
A-0, 表示十进制
B-用户
C-组用户
D-其他用户

权限配置数字含义
0(no excute , no write ,no read)
–x1excute, (no write, no read)
-w-2write
-wx3write, excute
r–4read
r-x5read, excute
rw-6read, write
rwx7read, write , excute

0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;
0644->即用户具有读写权限,组用户和其它用户具有只读权限;

2、新增节点添加权限

(1)添加读、写、可执行权限

//device/mediatek/mtXXXX/init.mtXXXX.rcon boot
chmod 0777 /sys/devices/platform/1100f000.i2c3/i2c-3/3-005a/fm_speaker_switch

(2)添加节点的selinux权限

//关闭selinux
adb shell setenforce 0

(A)通过audit2allow来添加简单权限

通过avc来查看selinux权限:adb logcat | grep avc

如:

I FmRadioServiceT: type=1400 audit(0.0:1339): avc: denied { getattr } for path="/sys/devices/platform/1100f000.i2c3/i2c-3/3-005a/fm_speaker_switch" dev="sysfs" ino=32552 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:sysfs:s0 tclass=file permissive=1 app=com.android.fmradio

通过audit2allow来添加简单权限

adb shell "cat /proc/kmsg | grep avc" > avc.txt
audit2allow -i avc.txt

如:

#============= priv_app ==============
allow priv_app system_file:file execmod;

(B)添加neverallow的avc权限

以如下这个权限为例:

I FmRadioServiceT: type=1400 audit(0.0:1339): avc: denied { getattr } for path="/sys/devices/platform/1100f000.i2c3/i2c-3/3-005a/fm_speaker_switch" dev="sysfs" ino=32552 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:sysfs:s0 tclass=file permissive=1 app=com.android.fmradio

怎么通过查看avc log 来添加selinux权限?主要看以下几个属性:

denied { getattr }  ,path=?, dev="sysfs",  scontext  ,tcontext,  tclass.

(a)在device/mediatek/sepolicy/basic/non_plat/file.te中添加文件类型(根据需求添加type)。

type xxx_fm_radio, fs_type, sysfs_type, mlstrustedobject;

备注:从12.0开始如果在platform_app中使用,在avc log中的scontext属性中有c512、c768,则要加上mlstrustedobject。

(b)在device/mediatek/sepolicy/basic/non_plat/file_contexts中添加如下内容。

/sys/devices/platform/1100f000.i2c3/i2c-3/3-005a/fm_speaker_switch    u:object_r:xxx_fm_radio:s0

(c)对应app的te文件添加权限(platform_app、system_app、untrusted_app、radio、service)。

在device/mediatek/sepolicy/basic/non_plat/ platform_app.te文件中添加,具体在哪个te文件中添加,可以查看avc log中的scontext属性,比如例子中的scontext=u:r:platform_app:s0:c512,c768,就应该在platform中添加。

allow platform_app xxx_fm_radio:file { write read getattr open };

(3)确认添加那种权限

(A)确认节点路径是否为有效路径

这是驱动提供的节点路径:sys/bus/i2c/drivers/aw36515/5-0063/onoff

adb shell 进入手机内,然后进入sys目录直接find此节点,得到的路径为该节点实际路径,如果跟驱动提供的不一样,以find到的路径为准,操作如下

XXX:/sys # find -name onoff
./devices/platform/soc/11005000.i2c6/i2c-6/6-0063/onoff

(B)确认需要添加哪些权限

目前遇到的最多需要添加三种权限:avc权限、chmod权限、chown权限,默认所有新增节点都是需要avc权限,所以只需确认手否需要添加另两种权限。

通过第一步拿到有效节点路径后,通过手动操作此节点来确认需要哪些权限,然后再添加权限代码,这样一次就可以加上所有权限:

Unlock后 adb root adb shell 然后cd到节点路径,首先查看节点值:

XXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # cat onoff
0

默认值为0,写为1即为打开状态,然后手动写节点值:

XXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # echo 1 > onoff
/system/bin/sh: can't create onoff: Permission denied

如果写入成功,说明只需要avc权限;结果为上面显示就说明需要添加chmod权限,直接手动添加:

XXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # chmod 666 onoff

然后再次手动写入:

XXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # echo 1 > onoff

如果还是未能写入成功,说明还需要chown权限,继续手动写入

XXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # chown system:system onoff(说明:system,radio,root都可以)XXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # ls -lZ
-rwxrwxrwx 1 system system u:object_r:sysfs:s0  4096 2023-02-09 04:52 onoffXXX:/sys/devices/platform/soc/11005000.i2c6/i2c-6/6-0063 # echo 1 > onoff

这时候应该就可以写入成功,即可判断需要哪些权限。

(C)添加权限

(a)selinux权限添加

设置Permissive模式后(adb shell setenforce 0),运行读取此节点的上层代码,adb logcat|grep avc即可查出所有需要添加的selinux权限,具体添加方法参考前面说明。

(b)chmod权限/chown权限

在device/mediatek/mtXXXX/init.mtXXXX.rc

chmod 0666 /sys/devices/platform/soc/11016000.i2c5/i2c-5/5-0063/onoff
chown system system /sys/devices/platform/soc/11016000.i2c5/i2c-5/5-0063/onoff

(D)读写节点代码

//读节点
public static String getFileString(String path){String version = null;try {FileReader fr = new FileReader(path);BufferedReader br = new BufferedReader(fr);String readString = null;while ((readString = br.readLine())!=null){if(readString == null)break;version = readString;}br.close();} catch (Exception ex) {Log.e("CampingLight","Exception ex="+ex);return null;}return version;}//写节点
private void writeFile(String path, String value) {try {FileOutputStream outputStream = new FileOutputStream(path);outputStream.write(value.getBytes());outputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();Log.e("CampingLight", "file not found, error = " + e.toString());} catch (IOException e) {e.printStackTrace();Log.e("CampingLight", "io error, error = " + e.toString());}}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习Week15——利用TensorFlow实现猫狗识别2

文章目录 深度学习Week15——利用TensorFlow实现猫狗识别2—数据增强 一、前言 二、我的环境 三、前期工作 1、配置环境 2、导入数据 四、数据预处理 1、加载数据 2、可视化数据 3、检查数据 4、配置数据集 五、构建VGG-16模型 1、设置动态学习率 2、早停与保存最佳模型参数 五…

ERP实施过程中的注意问题

1.需求分析,确定现实目标 国内企业发展越来越快,管理模式逐渐跟不上市场的发展,所以急需用ERP系统来提高管理,这种情况往往存在需求风险。企业在准备应用ERP系统之前,需要理性地进行需求分析:企业当前最迫切需要解决的问题是什么?ERP系统是否能够解决?在财力上企业能不能支持…

C++ 编程作业 编写整数集合类IntSet,完成主函数中使用该类所要求的功能

23.编写整数集合类IntSet&#xff0c;完成主函数中使用该类所要求的功能。 #include <iostream> using namespace std; /**********Program**********/ struct IntSet { IntSet() { size 1; len 0; } int pdata[100]; int size; …

华为OD机试 - 图像物体的边界 - 深度优先搜索(Java 2024 D卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…

栈的最小值

题目链接 栈的最小值 题目描述 注意点 执行push、pop和min操作的时间复杂度必须为O(1) 解答思路 使用两个栈&#xff0c;一个栈deque存储栈中对应的元素值&#xff0c;另一个栈minDeque存储当前栈中所有元素的最小值&#xff0c;当执行push(int x)操作&#xff0c;deque直…

2041:【例5.9】新矩阵

#include <iostream> using namespace std; int main(){const int N 21;//几行几列 int g[N][N] {};int n 0;cin >> n;for (int i 1; i < n; i){for (int j 1; j < n; j){// 输入到几行几列 cin >> g[i][j];if (i j || i j n 1){//如果是这种…

【计算机毕设】基于SpringBoot的民宿在线预定平台设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本研究旨在设计并实现一个基于SpringBoot的民宿在线预定平台。通过信息化手段提高民宿预定效率&#xff0c;方便用户查询房源、预定房间、在线支付和…

嵌入式Linux系统编程 — 1.2 文件管理与错误处理

目录 1 Linux 系统如何管理文件 1.1 什么是静态文件 1.2 扇区&#xff08;Sector&#xff09;和块&#xff08;Block&#xff09;概念&#xff1f; 1.3 inode 1.4 进程控制块&#xff08;PCB&#xff09; 2 返回错误处理与 errno 2.1 errno变量介绍 2.3 perror函数介绍…

pg 数据库,获取时间字段值的具体小时,赋值给其他字段

目录 1 问题2 实现 1 问题 pg 数据库&#xff0c;有一个表&#xff0c;其中有2个字段 一个是时间字段obstime &#xff0c;一个是时次ltime字段&#xff0c;int 类型&#xff0c;现在这个表里面是obstime 里面有数据&#xff0c;ltime字段 没有数据&#xff0c;现在就是批量获…

SwiftUI 利用 Swizz 黑魔法为系统创建的默认对象插入新协议方法(三)

功能需求 在 SwiftUI 的开发中,我们往往需要借助底层 UIKit 的“上帝之手”来进一步实现额外的定制功能。比如,在可拖放(Dragable)SwiftUI 的实现中,会缺失拖放取消的回调方法让我们这些秃头码农们“欲哭无泪” 如上图所示,我们在拖放取消时将界面中的一切改变都恢复如初…

EmotionPrompt 论文精读

EmotionPrompt: Leveraging Psychology for Large Language Models Enhancement via Emotional Stimulus 论文精读 核心观点&#xff1a; 提出 emotionprompt 作为一种利用情绪刺激来增强大语言模型性能的方式。该方法通过在原始提示中添加情绪刺激&#xff0c;例如“这对我的…

[每日一练]患某种疾病的患者,正则表达式的匹配

该题目来源于力扣&#xff1a; 1527. 患某种疾病的患者 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 患者信息表&#xff1a; Patients ----------------------- | Column Name | Type | ----------------------- | patient_id | int | | pati…

ZED-Mini提示“no GPU detected“错误解决

用ZEDm提示no GPU detected roslaunch zed_wapper zedm.launch的时候会提示no GPU detected 应该是nvidia GPU的问题&#xff0c;于是nvidia-smi检查是否正确安装&#xff0c;结果报错 Failed to initialize NVML: Driver/library version mismatch查了一些博客 解决Failed …

年中企业业绩管理新篇章:用友BIP收入云助力高效管理!

随着市场竞争的加剧&#xff0c;年中时刻对于企业而言&#xff0c;不仅是评估上半年业绩的节点&#xff0c;更是调整策略、确保全年目标达成的关键时期。高效的业绩管理不仅需要明确的目标设定和计划制定&#xff0c;更需要借助先进的信息技术工具来提升管理效率和决策质量。在…

Java项目:98 springboot在线教育系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统共有管理员、用户等角色 本在线教育系统管理员功能有个人中心&#xff0c;用户管理&#xff0c;讲师管理&#xff0c;普通管理员管理&#xff…

Qt开发技术:Q3D图表开发笔记(四):Q3DSurface三维曲面图颜色样式详解、Demo以及代码详解

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/139424086 各位读者&#xff0c;知识无穷而人力有穷&#xff0c;要么改需求&#xff0c;要么找专业人士&#xff0c;要么自己研究 红胖子网络科技博…

334.递增的三元子序列

给你一个整数数组 nums &#xff0c;判断这个数组中是否存在长度为 3 的递增子序列。 如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k &#xff0c;使得 nums[i] < nums[j] < nums[k]&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例…

Linux云计算架构师涨薪班课程内容包含哪些?

第一阶段&#xff1a;Linux云计算运维初级工程师 目标 云计算工程师&#xff0c;Linux运维工程师都必须掌握Linux的基本功&#xff0c;这是一切的根本&#xff0c;必须全部掌握&#xff0c;非常重要&#xff0c;有了这些基础&#xff0c;学习上层业务和云计算等都非常快&#x…

java异常习题

1.有关下述Java代码描述正确的选项是 public class TestClass {private static void testMethod(){System.out.println("testMethod");}public static void main(String[] args) {((TestClass)null).testMethod();}} A.编译不通过 B.编译通过&#xff0c;运行异常…

深入解析Java多线程:源码级别的分析与实践

Java的多线程机制是其并发编程的核心&#xff0c;对于高性能和高并发应用的开发至关重要。 一、Java多线程的基础 1.1 创建线程的几种方式 在Java中&#xff0c;有几种创建线程的方式&#xff1a; 继承Thread类&#xff1a; class MyThread extends Thread {public void run…