SELinux/SEAndroid 实例简述(三)实例看SELinux/SEAndroid

android 8.0 添加开机服务 手动添加开机服务:1:做个独立文件夹,里面编辑要运行的bin,如下:Android.mk---这里面要做c和h这些文件编辑出bin生成到指定目录:csh.c---main函数在这里面qmi_dms_client.c  qmi_dms_client.h  ---调用qmi去与底层沟通函数2:bin服务文件做好了,开始把它加载到开机启动,device/qcom/common/rootdir/etc/i... 阅读详情
AI摘要

本文详细介绍了如何在Android系统中为不同场景的服务和进程定义安全策略,包括系统服务权限声明、进程服务内核文件节点访问权限、Socket访问权限等。

  1. /***********************************
  2. * Author:刘江明
  3. * Environment:MTK Android 6.0
  4. * Date:2016年11月06日
  5. ***********************************/

基础知识都已经学习完了,但是还不知道怎么样,下面从不同的场景,实现了几个例子,可以参考学习一下

对于/extern/sepolicy的修改用如下方法编译:

  1. 1. mmm external/sepolicy
  2. 2. make bootimg
不过对于mtk的android系统,不建议修改external/sepolicy,而是修改device/mediatek/common/sepolicy
在policy目录下,make relabel可更新或创建标识映射

一. 添加一个系统服务的权限声明
情景:定义一个init启动的service,demo_service,对应的执行文件是/system/bin/demo.
  1. (1) 创建一个demo.te在/device/mediatke/common/sepolicy 目录下
  2. 如果是Android4.4的源码,在/device/mediatke/common/BoardConfig.mk 的BOARD_SEPOLICY_UNION 宏中新增demo.te
  3. 如果是Android5.0以上的编译会自动包含了整个文件夹里的文件,则不用在BoardConfig.mk中添加文件声明
  4. (2) 在demo.te中添加:demo的域(domain)类型定义
  5. type demo, domain;
  6. (3) 在demo.te中添加:demo的可执行文件(客体)的类型定义
  7. type demo_exec, exec_type
  8. (4) 在demo.te中添加:init启动service时类型转换声明,直接用一个宏,主要是用于把demo_exec(客体)转换成demo(进程域)
  9. init_daemon_domain(demo)
  10. (5) 绑定执行档 file_contexts 类型(安全上下文),由这个可执行文件启动起来的进程都是demo域里的
  11. /system/bin/demo u:object_r:demo_exec:s0
  12. (6) 根据demo需要访问的文件以及设备,定义其它的权限在demo.te中.
上面的例子最大的疑点就是init_daemon_domain这个宏,我们来看看
下面所有的宏都在/external/sepolicy/te_macros文件里定义,具体的定义,请自行查看
init_daemon_domain:
  1. init_daemon_domain宏的作用是:设置init转换到daemon域,可执行文件是xxx_exec
  2. 上面的例子是这样子使用的:init_daemon_domain(demo)
  3. 把$1=demo代换进去,相当于执行下面两条语句
  4. domain_auto_trans(init, demo_exec, demo)
  5. 声明tmpfs的读写和转换权限,tmpfs是一些内存临时文件
  6. tmpfs_domain(demo)
domain_auto_trans:
  1. domain_auto_trans的作用是:定义旧的域转换成新的域的声明,直接把上面的参数代入到domain_auto_trans里相当于执行
  2. #这个宏应该就是上一篇文章里提到的域转换的权限声明
  3. domain_trans(init,demo_exec,demo)
  4. #声明init域执行demo_exec可执行文件,新的域转换成demo域
  5. type_transition init demo_exec:process demo;
已经大致完成了一个服务的权限声明,但是还有第(6)点没有完成,如果该服务需要对底层设备文件的读写,该如何声明权限?

二. 添加一个进程服务对内核文件节点的读写权限
直接上例程
  1. 情景:一个域(服务或者进程)需要访问一个专属的char device /dev/demo
  2. (1) 定义device 类型,创建一个device.te文件
  3. type demo_device dev_type;
  4. (2) 绑定demo device的上下文,在file_contexts
  5. /dev/demo u:object_r:demo_device:s0
  6. (3) 声明demo进行 使用demo device 的权限 在demo.te
  7. allow demo demo_device:chr_file rw_file_perms;
rw_file_perms是一个集合的宏定义
  1. define(`r_file_perms', `{ getattr open read ioctl lock }')
  2. define(`w_file_perms', `{ open append write }')
  3. define(`rw_file_perms', `{ r_file_perms w_file_perms }')

三. 添加一个Socket访问权限
这个类似于文件的权限声明
情景:一个native service 通过init 创建一个socket 并绑定在 /dev/socket/demo,并且允许某些process 访问.
  1. (1) 定义socket 的类型 file.te
  2. type demo_socket,file_type;
  3. (2) 绑定socket 的类型 file_contexts
  4. /dev/socket/demo_socket u:object_r:demo_socket:s0
  5. (3) 允许所有的process 访问.
  6. # allow app connectto & write
  7. unix_socket_connect(appdomain,demo,demo)

四. 添加一个进程服务对一个属性的访问权限
情景:允许一个进程域对一个属性sys.powerctl进行设置 
  1. #声明一个property_type类型powerctl_prop
  2. type powerctl_prop, property_type;
  3. #设置属性的上下文,把属性sys.powerctl的上下文设置成powerctl_prop类型
  4. sys.powerctl u:object_r:powerctl_prop:s0
  5. #允许adbd进程对powerctl_prop上下文的属性进行设置
  6. #set_prop里面做了两个动作,允许进行对property的socket进行连接和写入,允许进程设置属性
  7. set_prop(adbd, powerctl_prop)


五. 添加一个服务的binder,对外提供服务
  1. type surfaceflinger_service, service_manager_type;
  2. type surfaceflinger, domain;
  3. SurfaceFlinger u:object_r:surfaceflinger_service:s0
  4. type surfaceflinger_exec, exec_type, file_type;
  5. /system/bin/surfaceflinger u:object_r:surfaceflinger_exec:s0
  6. #允许surfaceflinger读,写,调用Binder IPC
  7. binder_use(surfaceflinger)
  8. #允许surfaceflinger访问,调用binderservicedomain的Binder IPC
  9. binder_call(surfaceflinger, binderservicedomain)
  10. binder_call(surfaceflinger, appdomain)
  11. binder_call(surfaceflinger, bootanim)
  12. #将surfaceflinger与binder service的属性域binderservicedomain相连
  13. binder_service(surfaceflinger)

六. 添加一个APP的节点访问权限
  1. 定义节点类型
  2. device/mediatek/common/sepolicy/file.te
  3. type demo_file, fs_type,sysfs_type;
  4. 定义文件上下文
  5. device/mediatek/common/sepolicy/file_contexts
  6. /dev/demo_file u:object_r:demo_file:s0
  7. 定义App权限
  8. ps -Z查看应用权限上下文,如Setting是u:r:system_app:s0
  9. rw_file_perms是一组权限的集合,包含读与写权限
  10. device/mediatek/common/sepolicy/system_app.te
  11. allow system_app demo_file:file rw_file_perms;
  12. 定义服务权限,rw_file_perms是权限集,包含读写权限
  13. device/mediatek/common/sepolicy/system_server.te
  14. allow system_server demo_file:file rw_file_perms;

七. 添加一个APP的节点访问权限2
  1. 定义文件类型
  2. device/mediatek/common/sepolicy/file.te
  3. type proc_mtk_demo, fs_type;
  4. 定义虚拟文件系统的文件安全上下文
  5. device/mediatek/common/sepolicy/genfs_contexts
  6. genfscon proc /mtk_demo/current_demo u:object_r:proc_mtk_demo:s0
  7. 给予shell的进程读写权限,由/system/bin/sh启动的命令会与shell有同样的进程权限域
  8. device/mediatek/common/sepolicy/shell.te
  9. allow shell proc_mtk_demo:file {open read write getattr};
  10. APP的读取权限
  11. device/mediatek/common/sepolicy/system_app.te
  12. allow system_app proc_mtk_demo:file rw_file_perms;
使用方法
  1. App使用方法之一:
  2. String[] cmd = {
  3. "/system/bin/sh", "-c", "echo " + st + " > " + "/proc/mtk_demo/current_demo",
  4. };
  5. Runtime.getRuntime().exec(cmd);
  6. App使用方法之二,可以直接使用Java File来读写该文件:

Android 5.x SEAndroid/SElinux内核节点的读写权限 Android 5.x下,因为采取了SEAndroid的安全机制,即使拥有root权限,或者对某内核节点设置为777的权限,仍然无法在JNI层访问。 本文将以用户自定义的内核节点/dev/wf_bt为例,手把手教会读者如何在JNI层获得对该节点的访问权限。 第一步:找到需要访问该内核节点的进程(process),笔者自己这个节点由system_server进程来访问 第二步: 阅读详情

相关推荐

Android 安全攻防(三): SEAndroid Zygote

Android 安全攻防(三): SEAndroid Zygote在Android系统中,所有的应用程序进程,以及系统服务进程SystemServer都是由Zygote孕育fork出来的。 Zygote的native获取主要研究dalvik/vm/native/dalvik_system_Zygote.cpp,SEAndroid管控应用程序资源存取权限,对于整个dalvik,也正是在此动的手脚。首

念茜的博客 1万+

SELinux

参考网址:https://www.cnblogs.com/ly565911158/p/3622942.html

DreamWendy 1624

SEAndroid策略分析

SEAndroid在架构和机制上与SELinux完全一样,考虑到移动设备的特点,所以移植到Android上的只是SELinux的一个子集。SEAndroid的安全检查几乎覆盖了所有重要的系统资源,包括域转换,类型转换,进程、内核、文件、目录、设备,App,网络及IPC相关的操作。

墨点梧桐的专栏 2万+

[Android 基础] -- SELinux/SEAndroid 实例简述(三) 实例看 SELinux/SEAndroid

基础知识都已经学习完了,但是还不知道怎么样,下面从不同的场景,实现了几个例子,可以参考学习一下。 对于 /extern/sepolicy 的修改如下方法编译: 1. mmm external/sepolicy 2. make bootimg 不过对于 MTK 的 Android 系统,不建议修改 external/sepolicy,而是修改 device/mediatek/common/sepolicy,在 plicy 目录下,make relab...

u014674293的博客 2534

攻克JESD204B多ADC同步:从时钟对齐到数据对齐的实战解析

本文深入解析了JESD204B多ADC同步的系统性挑战与实战解决方案。从确保设备时钟同源、精确捕获SYSREF信号,到管理接收端弹性缓冲区与释放点,文章提供了从时钟对齐到数据对齐的完整调试路径与排查清单,是攻克高速数据采集系统中多片ADC同步难题的实用指南。

weixin_29231725的博客 197

ESP8266红外控制美的空调:从协议解析到Home Assistant集成

红外遥控技术作为一种经典的非接触式控制方式,其原理是通过红外发光二极管发射经过特定频率调制的光信号来传递指令。在物联网和智能家居领域,利用微控制器如ESP8266模拟红外信号,成为将传统家电接入智能生态系统的关键技术。这项技术通过精准解析和生成符合设备厂商私有协议的红外编码,实现了对空调、电视等设备的远程与自动化控制,具有很高的实用价值。本文聚焦于美的空调的红外协议,深入探讨了其脉冲宽度调制(PWM)和全量式编码的特点,并提供了基于ESP8266的完整解决方案,包括硬件连接、库函数API详解以及如何将其无缝

weixin_30718391的博客 401

Android进阶-SELinux

前一篇文章已经介绍了SELinux相关知识, https://blog.csdn.net/qq_33750826/article/details/80743035 基于 Android 4.3(宽容模式)和 Android 4.4(部分强制模式)的 Android 5.0 版本,开始全面强制执行 SELinux。 一、政策格式 政策规则采用以下形式: allow domain...

王涛的博客 5457

深入解析ADC采样电容:从充电误差到LSB精度的关键设计

本文深入解析了ADC采样电容在模数转换中的核心作用,重点探讨了充电时间常数与采样误差的博弈关系。通过推导最小采样时间公式,揭示了精度、速度、源阻抗与内部电容之间的制约关系,并提供了从理论计算到外部驱动电路设计的实战指南,是确保ADC达到LSB精度的关键。

android的专栏 1103

Android 12 S 系统开机流程分析 - SecondStageMain(三)

define(`', `')define(`', `')define(`', `')

weixin_41028555的博客 834

【UV打印机】PrintExp打印软件教程(六)-高级模式(马达)

输入高级模式密码进入高级模式高级模式界面有操作栏、控制栏、参数栏及参数界面操作栏名称功能说明文件加载数据从板卡加载参数保存将参数保存到主板退出退出高级模式固件导入固件导入配套版本下的固件配置*xpcfx导出固件导出当前使用的固件配置*xpcfx导入波形文件导入对应的波形文件*waf操作初始化系统继续初始化动作复位X轴复位回原点控制栏可进行小车运动、闪喷操作(此闪喷为点击进行闪喷,不受平台位置限制),无清洗功能。

Print World的专栏 3112

Creo二次开发环境配置与DLL项目实战指南(Creo8.0+VS2019)

本文详细介绍了Creo8.0与VS2019环境下的二次开发配置与DLL项目实战指南,涵盖环境准备、版本匹配、DLL项目创建、核心代码编写、部署调试及常见报错处理。重点解析了Creo二次开发中的关键配置和优化技巧,帮助开发者高效解决实际问题。

weixin_28432777的博客 516

Android 系统SELinux(SEAndroid)

一、SE 概述 SELinux 是由美国NSA(国安局)和 SCC 开发的 Linux的一个扩张强制访问控制安全模块。原先是在Fluke上开发的,2000年以 GNU GPL 发布。从 fedoracore 2开始, 2.6内核的版本都支持SELinux。 1.1、DAC 与MAC 在 SELinux 出现之前,Linux 上的使用的安全模型是DAC( Discretionary Access Control 自主访问控制)。 DAC 的核心思想很简单:进程理论上所拥有的权限与执行它的用...

tq501501的博客 5575

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 34

SELinux/SEAndroid 实例简述

一. 基本语法 很多te文件集中在\external\sepolicy文件夹下,MTK也有很多自定义的在\device\mediatek\common\sepolicy。它的最基本样式是       allow factory powerctl_prop:property...

Android8.x和Android9.x平台user版本打开UART输出并支持控制台输入和user版本adb root的方法 545

24、无人机能耗模型与上下文质量管理的研究

本文系统介绍了无人机能耗模型与上下文质量管理的研究进展。详细阐述了Dorling、Stolaroff、Kirchstein和Tseng等经典能耗模型的原理及特点,并基于LSTM架构构建了数据驱动的能耗预测模型,实验表明其预测精度显著优于传统模型。此外,还探讨了物联网环境中的上下文质量管理问题,引入了conQeng框架,以提升上下文选择、测量和验证的效率与可靠性。研究为无人机能耗优化和物联网上下文管理提供了理论支持和技术方案。

palm99的专栏 344

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Linux DAC 与 SELinux/SEAndroid MAC

本文系统阐述了Linux系统的访问控制机制,重点对比分析了DAC(自主访问控制)与SELinux/SEAndroid的MAC(强制访问控制)原理。DAC基于用户身份和文件权限位实现基础访问控制,但存在root权限过大、管控粗放等缺陷。SELinux通过安全上下文和策略规则实现细粒度的强制访问控制,有效弥补DAC不足。SEAndroid作为SELinux在安卓系统的移植版本,针对移动特性增加了组件级管控和沙箱隔离机制。文章详细解析了三者的工作原理、核心要素、访问判断流程及优缺点,为理解操作系统安全机制提供了系

wangzy0716的博客 851

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深入理解SELinux SEAndroid之二

接第一部分的内容(深入理解SELinux SEAndroid(第一部分)_Innost的专栏-优快云博客_domain_auto_trans)。

Venus 的博客 2440

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android的SELinux——SEAndroid

SEAndroid简介   SEAndroid是Google在Android4.4上正式推出的一套以SELinux为核心的系统安全机制。而SELinux则是由NSA(美国国安局)在Linux社区的帮助下设计的一个针对Linux的安全强化系统。   NSA最初设计的安全模型叫FLASK,全称为FluxAdvanced Security Kernel(由Uta大学和美国国防部开

明日暘炚 2744

深入理解SELinux SEAndroid(第一部分)

按哥的习惯,应该是全部洗剪吹完后再发,不过今年是马年,什么都强调 马上。所以 现在就先奉献 马上有第一部分  祝各位同仁,朋友 马年快乐。 深入理解SEAndroidSEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。而SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系

Innost的专栏 14万+

深入理解SELinux SEAndroid(最后部分)

接第二部分的内容 深入理解SELinuxSEAndroid(结局) 二 SEAndroid源码分析 有了上文的SELinux的基础知识,本节再来看看Google是如何在Android平台定制SELinux的。如前文所示,Android平台中的SELinux叫SEAndroid。 先来看SEAndroid安全策略文件的编译。 1. 编译sepolicy Android平台中: external/sepolicy:提供了Android平台中的安全策略源文件。同时,该目录下的tools还...

Venus 的博客 2644

SELinux/SEAndroid 实例简述(一) 基础概念

SELinux/SEAndroid 实例简述(一) 基础概念

shell812的专栏 3264

SELinux与SEAndroid(一)

root真的的是万能神吗? 如果手机被ROOT了,真的就不安全了吗?

Crazy David 1181

深入理解SELinux/SEAndroid

二 SEAndroid源码分析 有了上文的SELinux的基础知识,本节再来看看Google是如何在Android平台定制SELinux的。如前文所示,Android平台中的SELinux叫SEAndroid。 先来看SEAndroid安全策略文件的编译。   1. 编译sepolicy Android平台中: external/sepolicy:提供了Androi

Fybon的专栏 2775
上一篇: SELinux/SEAndroid 实例简述(二) TE语言规则
下一篇: Android ALSA音频系统架构分析(1)----从Loopback了解Audio
shell812
博客等级 码龄18年 202粉丝 28原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值