安卓9.0添加服务修改SELinux

#文章目录

  • #前言

  • #SELinux来源

  • #SELinux基本框架

  • #SELinux 在不同版本的表现

  • #使用audit2allow工具生成SELinux 权限

  • #完整代码

#前言

先推荐下之前的SELinux文章,但是那个是7.1的,在9.0上已经在差别很大的了。

Android7.1 在init.rc 添加shell服务

题外话~

在企业里面做项目和在大学里面做有比较大的差别,企业需要把技术转变成产品,然后把产品拿出去卖来赚钱。所以就不得不考虑到研发周期,采购成本,还有销售渠道。如果研发花费了很大的力气都搞不定,或者硬件设计上本身存在非常大的风险和研发周期,那可能对项目会是致命性的。销售可以不断的吹牛,但是吹牛的时间越长,诚信成本就越大,要不然贾老板的车千呼万唤始出来之后为啥那么多问题。


#SELinux来源

SELinux 即Security-Enhanced Linux, 由美国国家安全局(NSA)发起, Secure Computing Corporation (SCC) 和 MITRE 直接参与开发, 以及很多研究机构(如犹他大学)一起参与的强制性安全审查机制, 该系统最初是作为一款通用访问软件,发布于 2000 年 12 月(代码采用 GPL 许可发布)。并在Linux Kernel 2.6 版本后, 有直接整合进入SELinux, 搭建在Linux Security Module(LSM)基础上, 目前已经成为最受欢迎,使用最广泛的安全方案。

#SELinux基本框架

SELinux 是典型的MAC-Mandatory Access Controls 实现, 对系统中每个对象都生成一个安全上下文(Security Context), 每一个对象访问系统的资源都要进行安全上下文审查。审查的规则包括类型强制检测(type enforcement), 多层安全审查(Multi-Level Security), 以及基于角色的访问控制(RBAC: Role Based Access Control).

SELinux 搭建在Linux Security Module(LSM)基础上, 关于 LSM 架构的详细描述请参见文章 “Linux Security Modules: General Security Support for the Linux Kernel”, 该文章在 2002 年的 USENIX Security 会议上发表。有完整的实现LSM 的所有hook function. SELinux 的整体结构如下图所示:

#SELinux 在不同版本的表现

安卓在很早就已经执行了SELinux了,但是在不同的安卓版本,使用起来还是有些差别,现在我们用到了安卓9.0,可以说是最严格的权限了。以前修改一个allow的编译问题,如果不可以,就去domain.te里面把neverallow相关的添加进去,9.0上已经不行了,必须要严格安卓标准来声明和申请。

#使用audit2allow工具生成SELinux 权限

这个工具决定是一个神器,这个工具可以在SDK里面找到,有了这个工具后,再把SELinux的错误保存到一个文件里面,这样就可以使用工具来生成allow的权限问题了。

工具位置:

./external/selinux/prebuilts/bin/audit2allow

应用具体截图:

参考:

https://blog.csdn.net/q1183345443/article/details/90438283

#完整代码

我们项目需要开启一个服务,这个服务就是几个脚本的事情,这个脚本可以直接写在init.rc里面。不过呢,我考虑到直接写在init.rc里面总是出现各种问题,替换起来也比较麻烦,还有一点是写成可执行文件服务和init.rc里面执行的服务,在SELinux的权限要求还有差别。

这个问题跟几个大牛也讨论过,因为这个问题我们邓总还加班给我搞,可惜的是还是没有搞定,主要是方向没有找对,第二天我自己再看了下代码,觉得我应该是那个万中无一的男人,然后我也没干啥,在SELinux的file_context文件里面找了一个一样需要exec服务的东东,然后打开source insight,先全局搜索一下,按照这个东东依次添加进去。特别要注意的是,因为在source insight里面修改不会加回车,需要在Linux里面再修改回来一次,要不然导致的问题是编译不通过。

再然后就是编译了,如果还是局部编译可能还是有问题,因为之前乱改的很多东西对环境有影响了,然后我删了out全局编译。烧录后使用top命令看了看服务,惊讶的发现,服务已经起来了。

开机的时候,还是会看到很多SELinux的权限问题,这个就需要使用我们上面的工具来修改下了。

这套完整代码,只适合在android9.0上去用,如果是其他安卓版本的话,只能作为参考,但是在低版本上肯定比9.0容易得多。

diff --git a/device/mediatek/sepolicy/basic/plat_private/file_contexts b/device/mediatek/sepolicy/basic/plat_private/file_contexts
index f306119717..3271d2b624 100644
--- a/device/mediatek/sepolicy/basic/plat_private/file_contexts
+++ b/device/mediatek/sepolicy/basic/plat_private/file_contexts
@@ -42,3 +42,5 @@/sys/devices/platform/vibrator@0/leds/vibrator(/.*)? u:object_r:sysfs_vibrator:s0/sys/block/mmcblk0rpmb/size u:object_r:access_sys_file:s0
+/system/bin/zigbee_service u:object_r:zigbee_service_exec:s0
+
diff --git a/device/mediatek/sepolicy/basic/plat_private/zigbee_service.te b/device/mediatek/sepolicy/basic/plat_private/zigbee_service.te
new file mode 100755
index 0000000000..94c23d7ec3
--- /dev/null
+++ b/device/mediatek/sepolicy/basic/plat_private/zigbee_service.te
@@ -0,0 +1,20 @@
+#typeattribute zigbee_service coredomain;
+#type zigbee_service, domain;
+#type zigbee_service_exec, exec_type, file_type;
+#permissive zigbee_service;
+#init_daemon_domain(zigbee_service)
+
+# New added for move to /system
+typeattribute zigbee_service coredomain;
+type zigbee_service_exec , exec_type, file_type;
+
+# ==============================================
+# MTK Policy Rule
+# ==============================================
+
+init_daemon_domain(zigbee_service)
+allow zigbee_service shell_exec:file execute;
+#allow zigbee_service zigbee_service_exec:file        { getattr read open execute execute_no_trans};
+#allow zigbee_service shell_exec:file         { getattr read open execute execute_no_trans};
+#allow zigbee_service system_file:file        { getattr read open execute execute_no_trans};
+#allow zigbee_service system_data_file:file   { getattr read open execute execute_no_trans};
diff --git a/device/mediatek/sepolicy/basic/plat_public/zigbee_service.te b/device/mediatek/sepolicy/basic/plat_public/zigbee_service.te
new file mode 100644
index 0000000000..b3d94d5cf8
--- /dev/null
+++ b/device/mediatek/sepolicy/basic/plat_public/zigbee_service.te
@@ -0,0 +1,2 @@
+type zigbee_service ,domain;
+allow zigbee_service shell_exec:file execute;
diff --git a/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_private/file_contexts b/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_private/file_contexts
index 9d6963909b..e3ac5ea245 100755
--- a/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_private/file_contexts
+++ b/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_private/file_contexts
@@ -38,3 +38,5 @@# For boot type/sys/devices/virtual/BOOT/BOOT/boot/boot_type(/.*)? u:object_r:sysfs_boot_type:s0
+/system/bin/zigbee_service    u:object_r:zigbee_service_exec:s0
+
diff --git a/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_public/zigbee_service.te b/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_public/zigbee_service.te
new file mode 100644
index 0000000000..b3d94d5cf8
--- /dev/null
+++ b/device/mediatek/sepolicy/basic/prebuilts/api/26.0/plat_public/zigbee_service.te
@@ -0,0 +1,2 @@
+type zigbee_service ,domain;
+allow zigbee_service shell_exec:file execute;
diff --git a/device/mediatek/sepolicy/basic/private/compat/26.0/26.0.cil b/device/mediatek/sepolicy/basic/private/compat/26.0/26.0.cil
index aac1622a40..d3db9d1acc 100755
--- a/device/mediatek/sepolicy/basic/private/compat/26.0/26.0.cil
+++ b/device/mediatek/sepolicy/basic/private/compat/26.0/26.0.cil
@@ -539,6 +539,7 @@(typeattributeset hci_attach_dev_26_0 (hci_attach_dev))(typeattributeset statusbar_service_26_0 (statusbar_service))(typeattributeset boot_logo_updater_26_0 (boot_logo_updater))
+(typeattributeset zigbee_service_26_0 (zigbee_service))(typeattributeset idmap_26_0 (idmap))(typeattributeset fwmarkd_socket_26_0 (fwmarkd_socket))(typeattributeset cameraserver_exec_26_0 (cameraserver_exec))
diff --git a/device/mediatek/sepolicy/bsp/private/compat/26.0/26.0.cil b/device/mediatek/sepolicy/bsp/private/compat/26.0/26.0.cil
index ba093e7885..d92414362c 100755
--- a/device/mediatek/sepolicy/bsp/private/compat/26.0/26.0.cil
+++ b/device/mediatek/sepolicy/bsp/private/compat/26.0/26.0.cil
@@ -562,6 +562,7 @@(typeattributeset hci_attach_dev_26_0 (hci_attach_dev))(typeattributeset statusbar_service_26_0 (statusbar_service))(typeattributeset boot_logo_updater_26_0 (boot_logo_updater))
+(typeattributeset zigbee_service_26_0 (zigbee_service))(typeattributeset idmap_26_0 (idmap))(typeattributeset fwmarkd_socket_26_0 (fwmarkd_socket))(typeattributeset cameraserver_exec_26_0 (cameraserver_exec))
diff --git a/device/mediatek/sepolicy/full/private/compat/26.0/26.0.cil b/device/mediatek/sepolicy/full/private/compat/26.0/26.0.cil
index 90d6baea41..a21e182ce3 100755
--- a/device/mediatek/sepolicy/full/private/compat/26.0/26.0.cil
+++ b/device/mediatek/sepolicy/full/private/compat/26.0/26.0.cil
@@ -565,6 +565,7 @@(typeattributeset hci_attach_dev_26_0 (hci_attach_dev))(typeattributeset statusbar_service_26_0 (statusbar_service))(typeattributeset boot_logo_updater_26_0 (boot_logo_updater))
+(typeattributeset zigbee_service_26_0 (zigbee_service))(typeattributeset idmap_26_0 (idmap))(typeattributeset fwmarkd_socket_26_0 (fwmarkd_socket))(typeattributeset cameraserver_exec_26_0 (cameraserver_exec))
diff --git a/device/mediateksample/aiv8167sm3_bsp/device.mk b/device/mediateksample/aiv8167sm3_bsp/device.mk
index 3e5ad76a99..e8cfdfba8c 100644
--- a/device/mediateksample/aiv8167sm3_bsp/device.mk
+++ b/device/mediateksample/aiv8167sm3_bsp/device.mk
@@ -47,10 +47,10 @@ PRODUCT_COPY_FILES += $(LOCAL_PATH)/sbk-kpd.kl:system/usr/keylayout/sbk-kpd.kl:mendif# for zigbee
-PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/Z3GatewayHost:system/bin/Z3GatewayHost
-PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/mosquitto:system/bin/mosquitto
-PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/mosquitto.conf:system/bin/mosquitto.conf
-PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/mosquitto_passwd:system/bin/mosquitto_passwd
+PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/Z3GatewayHost:data/gateway/Z3GatewayHost
+PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/mosquitto:data/gateway/mosquitto
+PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/mosquitto.conf:data/gateway/mosquitto.conf
+PRODUCT_COPY_FILES += $(LOCAL_PATH)/zigbee/mosquitto_passwd:data/gateway/mosquitto_passwd# Add FlashTool needed files#PRODUCT_COPY_FILES += $(LOCAL_PATH)/EBR1:EBR1
@@ -219,7 +219,8 @@ PRODUCT_PACKAGES += \i2cset \tinymix \tinyplay \
-	tinypcminfo
+	tinypcminfo \
+	zigbee_service# add CarBTDemoPRODUCT_PACKAGES += CarBTDemo
diff --git a/device/mediateksample/aiv8167sm3_bsp/init.project.rc b/device/mediateksample/aiv8167sm3_bsp/init.project.rc
index 75b1e7aa28..1a9d073db2 100644
--- a/device/mediateksample/aiv8167sm3_bsp/init.project.rc
+++ b/device/mediateksample/aiv8167sm3_bsp/init.project.rc
@@ -82,6 +82,9 @@ on post-fs-datamkdir /data/vendor/wifi/wpa 0770 wifi wifimkdir /data/vendor/wifi/wpa/sockets 0770 wifi wifi+#Zigbee
+    mkdir /data/gateway/ -p
+on boot# Wlan
@@ -94,6 +97,28 @@ service wpa_supplicant /vendor/bin/hw/wpa_supplicant \disabledoneshot+#zigbee service zigbee /system/bin/zigbee_service  /data/gateway/mosquitto -c /data/gateway/mosquitto.conf -d
+service zigbee_service /system/bin/zigbee_service
+	user root
+	group root
+	class main
+	oneshot
+
+on property:sys.boot_completed=1
+    touch /data/gateway/log
+    echo "=== weiqifa === zigbee service#1 start" >> /data/gateway/log
+	write /dev/ttyMT0 "=== weiqifa === start zigbee service#1\n"
+    chmod 777 /data/gateway/Z3GatewayHost
+    chmod 777 /data/gateway/mosquitto
+    chmod 777 /data/gateway/mosquitto.conf
+    chmod 777 /data/gateway/mosquitto_passwd
+    chown system:system /data/gateway/Z3GatewayHost
+    chown system:system /data/gateway/mosquitto
+    chown system:system /data/gateway/mosquitto.conf
+    chown system:system /data/gateway/mosquitto_passwd
+    start zigbee_service
+    echo "=== weiqifa === zigbee service#1 end" >> /data/gateway/log
+service hdmi /system/bin/hdmiclass mainuser system
@@ -112,3 +137,4 @@ on initservice fuse_usbotg /system/bin/sdcard -u 1023 -g 1023 -w 1023 -d /mnt/media_rw/usbotg /storage/usbotgclass late_startdisabled
+
diff --git a/external/zigbee-service/Android.mk b/external/zigbee-service/Android.mk
new file mode 100755
index 0000000000..b38c2de48f
--- /dev/null
+++ b/external/zigbee-service/Android.mk
@@ -0,0 +1,8 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := zigbee_service
+LOCAL_SRC_FILES := zigbee-service.c
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_EXECUTABLE)
\ No newline at end of file
diff --git a/external/zigbee-service/zigbee-service.c b/external/zigbee-service/zigbee-service.c
new file mode 100755
index 0000000000..264c3d07ac
--- /dev/null
+++ b/external/zigbee-service/zigbee-service.c
@@ -0,0 +1,19 @@
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <linux/ioctl.h>
+#include <unistd.h>
+
+int main(int argc, char * const argv[])
+{
+
+    printf("=== weiqifa ===Zigbee start ...\n");
+    printf("argc:%d\n",argc);
+    printf("argv[0]:%s",argv[0]);
+    system("/data/gateway/mosquitto -c /data/gateway/mosquitto.conf -d");
+    printf("=== weiqifa ===Zigbee end ...\n");
+    return (0);
+}
\ No newline at end of file

  回复「 篮球的大肚子」进入技术群聊

回复「1024」获取1000G学习资料

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

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

相关文章

卷积神经网络-目标探测

文章目录目标探测介绍任务思路DPMRCNN1&#xff09;候选区域选择2&#xff09;CNN特征提取3&#xff09;分类与边界回归R-CNN总结优点缺陷FAST-RCNNFASTER-RCNNYOLO目标探测介绍 任务 分类获取坐标 目标探测 图片分割 思路 回归问题&#xff1a;利用神经网络进行目标识别&am…

相机视场角和焦距_镜头小讲堂(一)镜头的焦距

在刚购买完相机的时候&#xff0c;我们久会考虑需要什么样的镜头来配合机身来使用。而市场上的镜头种类是在太多了&#xff0c;所以我们就要学习了解下镜头都有哪些种类&#xff0c;选择哪种镜头比较有优势。这也是学习摄影必备的基础知识。01 镜头的焦距焦距是镜头的重要指标&…

C语言指定初始化器解析及其应用

由于笔者能力有限&#xff0c;文中如果出现错误的地方&#xff0c;欢迎大家给我指出来&#xff0c;我将不胜感激&#xff0c;谢谢&#xff5e;#指定初始化器的概念C90 标准要求初始化程序中的元素以固定的顺序出现&#xff0c;与要初始化的数组或结构体中的元素顺序相同。但是在…

递归神经网络

文章目录LSTM![在这里插入图片描述](https://img-blog.csdnimg.cn/20200609171449198.pngLSTM 4INPUTS 1outputs

CNN+RNN

文章目录相同点不同点组合意义组合方式图片标注基本思路模型设计&#xff0d;数据准备视频行为识别视频行为识别图片问答相同点 传统神经网络的扩展 前向计算产生结果&#xff0c;反向计算模型更新 每层神经网络横向可以多个神经元共存&#xff0c;纵向可以多层神经网络链接 …

深入理解Linux内核链表

之前写过的链表文章&#xff0c;再结合这篇&#xff0c;我觉得是一道硬菜。Linux内核链表C语言&#xff0c;链表大家五一节日快乐&#xff0c;我知道劳动节大家都辛苦了&#xff0c;吃点硬菜好顶住饿肚子~#一、 链表数据结构简介链表是一种常用的组织有序数据的数据结构&#x…

GAN

文章目录生成对抗网络(GAN)基础生成对抗网络 优点&#xff1a;缺点&#xff1a;生成对抗网络深度GANDCGAN结构细节特征研究DCGAN总结条件GAN模型结构INFOGANInfoGAN: 自动学习z中部分变量意义Wasserstein GANGAN存在问题原因WGAN特点改进方法&#xff1a;生成对抗网络(GAN)基础…

1200可以读取modbus tcp_S7-1200 作 MODBUS TCP服务器

S7-1200 Modbus TCP 通信指令块STEP 7 V13 SP1 软件版本中的Modbus TCP库指令目前最新的版本已升至V4.0&#xff0c;该版本的使用需要具备以下两个条件&#xff1a;1. 软件版本&#xff1a; STEP 7 V13 SP1及其以上2. 固件版本&#xff1a; S7-1200 CPU 的固件版本V4.1图1. Mod…

Linux一定需要文件系统吗?

开篇题外话&#xff1a;对于Linux初学者来说&#xff0c;这是一个很纠结的问题&#xff0c;但这也是一个很关键的问题&#xff01; 一语破天机&#xff1a;“尽管内核是 Linux 的核心&#xff0c;但文件却是用户与操作系统交互所采用的主要工具。这对 Linux 来说尤其如…

迁移学习

文章目录为什么需要迁移学习模型Fine-‐tune![在这里插入图片描述](https://img-blog.csdnimg.cn/20200612000845217.png)保守训练层迁移Multitask Learning渐进式神经网络/Progressive Neural Networks域对抗零样本学习Self-‐taught learning为什么需要迁移学习 使用深度学习…

怎么撤回操作_微信又更新,拍一拍能撤回了

微信拍一拍功能在 6 月份刚上线时&#xff0c;「微信之父」张小龙就发朋友圈表示&#xff0c;微信史上仅需一行代码的有趣功能终于来了&#xff0c;拍一拍&#xff0c;像蚂蚁一样打招呼。拍一拍功能将大家在现实世界的肢体交流带到了虚拟世界&#xff0c;相信大家都有儿时和三俩…

吹牛

起了一个不太雅观的标题&#xff0c;我很想给我们的会晤起一个响亮的名字&#xff0c;比如「三方会谈」或者「新一代5.4事件」&#xff0c;再或者牛逼点的&#xff0c;我们可以叫「西乡起义」。好吧&#xff0c;我摊牌了&#xff0c;这次吃饭就是三个屌丝和一个大佬的闲暇吹牛&…

Spring MVC-视图解析器(View Resolverr)-内部资源视图解析器(Internal Resource View Resolver)示例(转载实践)...

以下内容翻译自&#xff1a;https://www.tutorialspoint.com/springmvc/springmvc_internalresourceviewresolver.htm 说明&#xff1a;示例基于Spring MVC 4.1.6。 InternalResourceViewResolver用于将提供的URI解析为实际的URI。以下示例显示如何使用Spring Web MVC框架使用I…

手机是怎么确定位置信息的?

#手机是怎么定位的&#xff1f;定位是一个老生常谈的话题&#xff0c;最近几年还在讨论一个热点技术话题「室内定位」&#xff0c;从我知道这个技术到现在已经过了好几年了&#xff0c;也出现了一些室内定位的方案&#xff0c;而我们的手机是如何进行定位的&#xff0c;又有哪些…

tablestore列式存储原理_10分钟搞透:技术人必会的MySQL体系结构与存储引擎!

MySQL是目前使用最广的开源数据库&#xff0c;不管从装机量、使用人群、专职人员、社区发展&#xff0c;还是基于MySQL的其他分支&#xff0c;都是当之无愧的No.1。 本文将从以下4个方面&#xff0c;带你搞透MySQL体系结构与存储引擎。主要包括&#xff1a;1、MySQL数据库的体系…

使用Adobe Audition生成基本音频

#首先打开软件 #新建一个音频 #在效果菜单栏插入基本音频

更多网络类型

文章目录丰富网络类型CPPN孪生网络Triplet Network应用Variational Auto-encoder强化学习Markov decision processesBellman公式丰富网络类型 深度学习除了经典卷积神经网络&#xff0c;循环神经网络还有广泛的网络类型 CPPN 网络输入是像素坐标值&#xff08;x&#xff0c;…

更多框架

文章目录关于框架Caffe基于层的设计思路Protocol Buffer 技术prototxt .caffemodel文件caffe的训练主要特点TorchLUA语言主要特点Tensorflowcomputation graphsMXNET关于框架 Caffe 依赖大量第三方库 为了读取图像&#xff0c;以及简单的图像处理&#xff0c;连接很重的Openc…

.net的label的背景如何设置成为透明_css如何设置背景图片?background属性添加背景图片...

在前端开发过程中&#xff0c;为了页面的美观&#xff0c;往往都会给html页面添加背景图片。那么如何利用css设置html中用图片做背景&#xff1f;本章就给大家介绍css怎样设置背景图片。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。程…

苹果uwb定位技术

昨天的文章简单说明了手机定位的技术&#xff0c;文章写的比较简单&#xff0c;但是阅读量却还可以&#xff0c;这篇文章转一个uwb定位技术的文章&#xff0c;让更多的人了解这项技术。相关阅读&#xff1a;手机是怎么确定位置信息的&#xff1f;载波和LoRa#前言关于昨天的文章…