首页 > 其他分享 >sepolicy进阶小记

sepolicy进阶小记

时间:2023-09-15 15:01:02浏览次数:50  
标签:可执行文件 sepolicy hal 进阶 contexts domain server hwservice 小记

  • 上下文定义

    标准的label取名方式是需要被遵守的,因为很多宏里面就直接用了。。

    hwservice_contexts

    这里标注的是使用hwbinder的服务通信的接口

    标准的label取名方式是以_hwservice结尾

    hwbinder是框架与供应商内容之间的ipc通信模块

    同理,还有个vndbinder,是供应商内容之间的ipc通信模块

    Android 8 之后,原先的binder只适用于框架内通信

    service_contexts

    这里记录的是注册/寻找 binder service 的时候的key
    对应到的是
    ServiceManager.addService(String name, IBinder service)
    publishBinderService(String name, IBinder service)
    ServiceManager.getService(String name)
    中的name

    标准的label取名方式是以_service结尾

    file_contexts / genfs_contexts

    它们都是用来指定文件的上下文标签
    一般来说,file_contexts用来指定那些inode能够保存上下文信息的文件系统 的 文件上下文
    比如systemvendor分区
    这些上下文被应用的时机是打包生成镜像的时候

    genfs_contexts 则一般用来记录诸如/sys/proc这样的没有inode的文件系统的 上下文信息
    genfs_contexts 被应用的时机是在开机时

    但是,有一种特殊情况,那就是由于genfs_contexts并不支持正则匹配,因此某些需要正则匹配的 /sys或者/proc内容依然会被放到file_contexts中,这些内容的应用时机也是在开机时

    标准的label取名方式:

      • 可执行文件 以_exec结尾
      • 其它文件,按需 或 按照system/sepolicy中的某些已经type的东西进行定义

    宏定义

    hal_attribute(<hal_name>)

    用来定义三个attribute
    分别是
    hal_<hal_name>
    hal_<hal_name>_client
    hal_<hal_name>_server

    但是在device tree中直接使用这个宏会导致大规模的neverallow错误,第三方有个workaround
    https://review.lineageos.org/c/LineageOS/android_device_lineage_sepolicy/+/286541
    暂时还不明白原理

    hal_client_domain(, <hal_type>)

    <domain>定义为<hal_type>_client

    hal_server_domain(, <hal_type>)

    <domain>定义为<hal_type>_server

    domain_auto_trans(, , )

    <olddomain>执行label为<type>的文件时,自动转换进程的domain为<newdomain>

    init_daemon_domain()

    这是对上面那个宏的进一步封装
    init进程(domain为init的进程)执行被label为<domain>_exec的文件时,自动转换进程domain为<domain>

    这是非常常用且重要的一个宏,在为新的可执行文件配置sepolicy的时候必然会用到

    从这里可以看出按照标准进行命名的重要性了吧


  • binder_use / vndbinder_use / hwbinder_use ()

    允许<domain>使用不同种类的binder

    如果一个服务需要使用binder进行通信(包括向对应service manager注册服务),则需要进行此声明

    注意:对于使用hwbinder的服务,如果已经为其定义了hal_server_domainhal_client_domain,则无需再声明hwbinder_use,原因是上述两个宏会自动将<domain>标注为halserverdomain从而间接获得hwbinder的使用权限

    binder_call(, )

    允许<clientdomain><serverdomain>发起binder IPC通信

    add_hwservice(, )

    允许<domain>hwservice manager注册<service>接口
    <service>接口的具体信息定义在hwservice_contexts

    它会自动生成neverallow规则,不再允许别的服务注册这一接口

    hal_attribute_hwservice(, )

    这是对上面那个宏的进一步封装
    它调用add_hwservice(<attribute>_server, <service>)
    并允许<attribute>_clienthwservice manager搜索这个服务
    它会自动生成neverallow规则,不再允许非_server_clientdomain注册或查找服务

    说白了,允许服务端增加服务接口,允许客户端查找获取服务

    很显然,它是需要与hal_attributehal_client_domainhal_server_domain配合使用的

    又是一个规范命名的重要性?

  • 流程

    常见的,套路?

    一般可执行文件

    • 创建两个type。一个作为可执行文件执行时的domain,另一个则是给可执行文件的本体使用(<domain>_exec
    • file_contexts中,为可执行文件本体打上<domain>_exectype
    • 使用init_daemon_domain来实现执行可执行文件时自动切换domain(否则所有的scontext都会为init
    • 根据其所需权限,为其撰写规则

    HIDL HAL

    • HAL本身是可执行文件,因此在可执行文件的基础上进行
    • 配置hwservice_contexts,声明HAL的接口
    • 额外声明hal_attribute,即hal本体、_server_clientattribute
    • 使用hal_server_domain将上述“一般可执行文件”中的domain定义为server
    • 将使用HAL的对象定义为hal_client_domain
    • 使用add_hwservice允许server增加服务
    • 使用binder_call允许server和client之间进行通信
    • link: https://blog.xzr.moe/archives/111/

标签:可执行文件,sepolicy,hal,进阶,contexts,domain,server,hwservice,小记
From: https://www.cnblogs.com/lixuejian/p/17705027.html

相关文章

  • Vue学习四:组件的三大组成部分、组件通信和进阶语法
    一、组件的三大组成部分<template>里面只能有一个根元素<style>全局样式(默认):影响所有组件局部样式:scoped下样式,只作用于当前组件<script>el根实例独有,data是一个函数,其他配置项一致二、scoped设置局部样式默认情况:写在组件中的样式会全局生效→因此很容易造成多......
  • Java进阶学习之Java架构师的学习路线
    Java架构师,首先要是一个高级Java攻城狮,熟练使用各种框架,并知道它们实现的原理。Java架构师的作用就是要满足业务需求,用低的硬件网络成本和技术维护成本。Java架构师还要根据业务发展阶段,提前预见发展到下一个阶段系统架构的解决方案,并且设计当前架构时将架构的升级扩展考虑进去,做......
  • 进阶训练技巧提升模型性能
    在深度学习的世界中,训练技巧的重要性不言而喻。进阶训练技巧,包括损失函数、学习率、模型微调和半精度训练,更是对提升模型性能和准确率有着关键作用。下面我们将对这些技巧进行详细的探讨。一、损失函数(LossFunction)损失函数,或者叫作目标函数,是用来衡量模型预测输出和真实输出之间......
  • 【动画进阶】当路径动画遇到滚动驱动!
    我的小册 《CSS技术揭秘与实战通关》上线了,想了解更多有趣、进阶、系统化的CSS内容,可以猛击- LINK。本文,我们将一起利用纯CSS,实现如下这么个酷炫的效果:在一年前,我介绍了CSS中非常新奇有趣的一个新特性--@scroll-timeline:革命性创新,动画杀手锏@scroll-timeline。......
  • Python学习笔记-Python函数进阶
    函数多返回值思考如果一个函数有两个return,程序如何执行?例如:defreturn_num():return1return2result=return_num()print(result)上面代码只执行了第一个return,因为retrun可以退出当前函数,导致return下方的代码不执行。多个返回值如果一个函数要有多个返回值,书写方式示......
  • 线程池------小记
    1、线程池的产生背景1、线程是一种系统资源,每创建一个新的线程都会占用一定的内存。如果是高并发的情况下,短时间生成了很多任务,如果为每个任务都创建一个新的线程,对内存的占用是相当大的,甚至有可能出现内存内存溢出。2、同时线程也不是创建的越多越好,在cpu核数的限制下,当需要大量......
  • C++算法进阶系列之倍增算法解决求幂运算
    1.引言学习倍增算法,先了解什么是倍增以及倍增算法的优势。如果面前有一堆石子,要求计算出石子的总数量。这是一个简单的数数问题,可以:一颗石子一颗石子的数。两颗石子两颗石子的数。三颗石子三颗石子的数。或者更多颗石子更多颗石子的数……在石子很多的情况下,每一次选择更......
  • day七-Python之路 - 面向对象学习编程进阶
    Python之路,Day7-面向对象编程进阶 本节内容:面向对象高级语法部分经典类vs新式类静态方法、类方法、属性方法类的特殊方法反射异常处理Socket开发基础作业:开发一个支持多用户在线的FTP程序面向对象高级语法部分经典类vs新式类把下面代码用python2......
  • FFmpeg进阶: 音频滤镜大全
    在做音频处理模块的时候,为了对声音进行优化处理,我很多时候会使用各种算法对音频进行变换,效果包括变音变调、声音降噪等等。其实FFmpeg库里的滤镜模块包含了很多有用的音频滤镜算法,这对于提升开发效率避免重复造轮子是很有帮助的。这里翻译了一下FFmpeg官方文档的所有音频滤镜的介......
  • python进阶 day09基本的文件处理
    基本的文件处理什么是文件?操作系统提供给用户的一个虚拟单位文件有什么用?存储数据找到文件路径path=r'D:\上海Python11期视频\python11期视频\day09\test.py'#鼠标右键点击文件,copypath复制路径双击打开f=open(path,'w')#r-->read只读;w-->只写,清......