Andorid 的SELinux策略

简介: Andorid 的SELinux策略

1.概述

SElinux是Google在android4.3版本上引入的,只不过是默认关闭的状态,在Android5.0上默认强制打开,它采用了一种新的安全模型——MAC(Mandatory Access Control),强制访问控制。SELinux策略规定,进程想做的事情,都必须在特定文件(xx.te)中赋予权限,凡是没有授权的操作都会被拒绝,xx.te文件规定了进程可以做那些操作,不可以做那些操作。

1.基本定义

2.1 用type关键字定义类型

定义type格式:
type 类型名称 [alias 别名集] [,属性集]; []表示可省略;属性集也叫做域。
比如: 
type aa;    #定义aa类型
type aa alias{ bb, cc };    #定义aa类型,并声明别名
type aa, XX;    #定义aa类型,并赋予aa给XX域
type aa alias{ bb, cc }, XX;    #定义aa类型,声明别名,并赋予aa给XX域
type tcpdump_file, fs_type;

2.2 用typealias声明别名

此关键字单独对某个已存在的type声明别名

比如相同的效果用两种不同的写法如下

#写法一
type aa, XX;
typealias aa alisa bb;    #给aa声明bb别名
#写法二
type aa alias bb, XX;

2.3 attribute关键字声明属性/域

语法:
attribute XX;    #声明XX域
比如:
attribute domain;    #声明domain域

域的定义文件叫做 attributes,一般在/system/sepolicy/目录

system\sepolicy\public\attributes

2.4 在声明类型时也指定对应的域

 
方法一:使用type关键字,具体使用如前文type处的示例
 
方法二:使用typeattribute关键字
 
相同的效果用两种方法实现如下:
 
#方法一
type aa, XX, YY;    #声明aa,并赋予XX域和YY域
#方法二
type aa;
typeattribute aa XX, YY;    #把aa赋予XX域和YY域
#两种方法可以混用
type aa, XX;
typeattribute aa, YY;    #此时aa同属于两域

3.基本语法

 
rule_name:规则名,分别有allow,dontaudit,neverallow等
source_type:主要作用是用来填写一个域(domain)
target_type:类型
class:类别,主要有File,Dir,Socket,SEAndroid还有Binder等
perm_set:动作集
 
基本格式规范:
rule_name source_type target_type:class perm_set

实例:

allow system_app tcpdump_file:dir { rw_dir_perms };

允许system_app 域的进程或服务对tcpdump_file类型的dir进行rw_dir_perms 的操作

rw_dir_perms 的操作定义在 system\sepolicy\prebuilts\api\26.0\public\global_macros里

 

3.1 rule_name

1.allow:允许某个进程执行某个动作

2.auditallow:audit含义就是记录某项操作。默认

   SELinux只记录那些权限检查失败的操作。 audi

   tallow则使得权限检查成功的操作也被记录。注意,

   allowaudit只是允许记录,它和赋予权限没关系。

   赋予权限必须且只能使用allow语句。

3.dontaudit:对那些权限检查失败的操作不做记录。

4.neverallow:没有被allow到的动作默认就不允许执

   行的。neverallow只是显式地写出某个动作不被允

   许,如果添加了该动作的allow,则会编译错误

3.2 source_type

指定一个域,用于描述进程,此域内的进程会被该语句的修饰。

3.3 target_type

指定进程需要操作的目标的类型,同样是一个类型或域

3.4 class

目标的具体类别,用class关键提来定义类别,不过系统定义的类别已经很丰富,一般用不到此关键字

# file-related classes

class filesystem

class file  #代表普通文件

class dir   #代表目录

class fd    #代表文件描述符

class lnk_file  #代表链接文件

class chr_file  #代表字符设备文件

3.5 perm_set

具体的操作,用common关键字定义,定义文件叫做 access_vectors,一般在/system/sepolicy/目录下

比如某项目的system/sepolicy/private/下有的access_vectors文件,打开查看其内容

 

 


目录
相关文章
|
人工智能 IDE 小程序
不写一行代码,通义灵码 5 分钟“手撕”年会抽奖程序
年会中的抽奖环节不可或缺,但每年为了选择合适的抽奖小程序,团队往往需要投入大量时间和精力。然而,抽奖结束后,参与者通常只记得自己是否中奖,其他细节多被遗忘。在 AI 技术日益成熟的今天,如何打造一个既高效又有技术含量的抽奖应用呢?今天,就让我们跟随通义灵码,仅用 5 分钟现场手撕一个抽奖应用吧!
|
编解码 监控 API
Android HAL深入探索(6): HIDL 添加SELinux 完整调试过程
Android HAL深入探索(6): HIDL 添加SELinux 完整调试过程
2518 0
|
UED 开发者 容器
鸿蒙next版开发:ArkTS组件通用属性(图像效果)
在HarmonyOS 5.0中,ArkTS提供了丰富的图像效果属性,如阴影、灰度、高光、饱和度、对比度、图像反转、叠色、色相旋转等,极大丰富了用户界面的表现力。本文详细解读这些属性并提供示例代码。
764 1
|
安全 Linux Android开发
Linux CFI (Control-flow integrity)技术相关资料汇总
Linux CFI (Control-flow integrity)技术相关资料汇总
|
Unix Linux
linux中在进程之间传递文件描述符的实现方式
linux中在进程之间传递文件描述符的实现方式
|
传感器 Android开发 芯片
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
本文是系列文章的第三篇,展示了如何在Android系统中利用现有的i2c bus驱动,通过编写设备树节点和应用层的控制代码,实现对基于i2c bus的Slaver设备(如六轴陀螺仪模块QMI8658C)的控制,而无需编写设备驱动代码。
478 0
不写一行代码(三):实现安卓基于i2c bus的Slaver设备驱动
|
Java 开发工具 Android开发
binder hwbinder vndbinder
binder hwbinder vndbinder
252 0
|
Java API Android开发
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
Android系统升级A/B分区OTA升级应用层调用UpdateEngine代码
804 0
|
Android开发
关于高通Android 平台上qssi的介绍
关于高通Android 平台上qssi的介绍
2070 0
|
存储 缓存 Linux
深入理解Linux内核页表映射分页机制原理
深入理解Linux内核页表映射分页机制原理
1192 0

热门文章

最新文章