IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android系统10 RK3399 init进程启动(三十一) SeAndroid实战之定义策略 -> 正文阅读

[移动开发]Android系统10 RK3399 init进程启动(三十一) SeAndroid实战之定义策略

配套系列教学视频链接:

? ? ??安卓系列教程之ROM系统开发-百问100ask

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

之前章节将基本知识都已经讲解完了, 需要通过实战例子来验证理论, 本章节重点介绍如何定义策略。


一,目标

需要完成一个进程去操作一个文件(如设备文件),编写策略文件,并进行测试。

1, myse_test: 定义一个可执行程序, 可以读写文件,此时会设置该进程的文件上下文,以及domain,还有权限策略。

2, 新建一个被进程读写文件(如设备文件/dev/myse_dev),定义该文件的安全上下文。

实现的框图如下:

myse_test进程属于vendor分区, 策略文件也会在vendor分区。

二, 文件目录结构

device/rockchip/qh100_rk3399/test_se/

├── cmd

│?? ├── Android.mk

│?? └── myse_test.c? ?//进程对应代码

└── sepolicy? ? //策略目录

????├── device.te

????├── file_contexts

????└── myse_test.te

三,代码和策略文件辨写

?myse_test.c的代码:

test_se/cmd/myse_test.c

#include <unistd.h>

#include <string.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <errno.h>

#define LOG_TAG "MySeTest"

#include <log/log.h>

int main(int argc, char *argv[])

{

????????int fd ?= -1;

????????int ret = -1;

????????char *content = "hello test for selinux";

????????char *dev_name = "/dev/myse_dev";

????????fd = open(dev_name, O_RDWR);

????????if(fd < 0)

????????{

????????????????ALOGE("open %s error: %s", dev_name, strerror(errno));

????????????????return -1;

????????}

????????ret = write(fd, content, strlen(content));

????????if(ret < 0)

????????{

????????????????ALOGE("write testfile error: %s", strerror(errno));

????????????????return -1;

????????}else

????????{

????????????????ALOGD("write testfile ok: %d", ?ret);

????????}

????????while(1);

????????close(fd);

????????return 0;

}

?test_se/cmd/Android.mk编译规则

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \

????myse_test.c

LOCAL_SHARED_LIBRARIES := \

????libcutils \

????liblog \

LOCAL_CFLAGS += -Wno-unused-parameter

LOCAL_PROPRIETARY_MODULE := true

LOCAL_MODULE:= myse_test

include $(BUILD_EXECUTABLE)

相关的selinux策略文件

sepolicy

????├── device.te

????├── file_contexts

????└── myse_test.te

?定义/dev/myse_dev(不是真的设备文件,是我们touch一个文件,作为模拟) 的类型, 编辑device.te:

type myse_testdev_t, dev_type;

定义myse_test文件和进程对应的type和domain,编辑myse_test.te

# subject context in proccess status

type ?myse_test_dt, domain;

# object context as a file

type myse_test_dt_exec, exec_type, vendor_file_type, file_type;

#grant perm as domain

init_daemon_domain(myse_test_dt)

定义myse_test文件和进程对应的文件上下文,编辑file_contexts:

/vendor/bin/myse_test ??????????????????u:object_r:myse_test_dt_exec:s0

/dev/myse_dev ???u:object_r:myse_testdev_t:s0

?将以上策略加入到BOARD_SEPOLICY_DIRS,

编辑: vim device/rockchip/qh100_rk3399/qh100_rk3399.mk 文件最后面添加:

BOARD_SEPOLICY_DIRS +=device/rockchip/qh100_rk3399/test_se/sepolicy

四, 编译

编译可执行程序: ?mmm device/rockchip/qh100_rk3399/test_se/cmd/, 最终生成:

out/target/product/qh100_rk3399/vendor/bin/myse_test

编译策略文件:make selinux_policy -j6 最终生成文件

ls out/target/product/qh100_rk3399/vendor/etc/selinux/

plat_pub_versioned.cil ??vendor_file_contexts????????vendor_property_contexts ?vndservice_contexts

plat_sepolicy_vers.txt ??vendor_hwservice_contexts ??vendor_seapp_contexts

selinux_denial_metadata ?vendor_mac_permissions.xml ?vendor_sepolicy.cil

ls out/target/product/qh100_rk3399/odm/etc/selinux/

precompiled_sepolicy???????????????????????????????????precompiled_sepolicy.product_sepolicy_and_mapping.sha256

precompiled_sepolicy.plat_sepolicy_and_mapping.sha256

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章           查看所有文章
加:2022-07-21 21:40:09  更:2022-07-21 21:42:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:17:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码