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文件,打开查看其内容

 

 


目录
相关文章
|
安全 Linux 开发工具
16.5.4 【Linux】SELinux 政策内的规则管理
16.5.4 【Linux】SELinux 政策内的规则管理
70 0
|
5月前
|
安全 Linux 数据安全/隐私保护
在Linux中,SELinux工作原理是什么?如何启用/禁用?
在Linux中,SELinux工作原理是什么?如何启用/禁用?
|
5月前
|
监控 安全 Linux
在Linux中,SELinux的作用是什么?如何临时和永久地更改SELinux上下文?
在Linux中,SELinux的作用是什么?如何临时和永久地更改SELinux上下文?
|
7月前
|
安全 JavaScript 数据安全/隐私保护
SELinux 安全模型——MLS
BLP 模型:于1973年被提出,是一种模拟军事安全策略的计算机访问控制模型,它是最早也是最常用的一种多级访问控制模型,主要用于保证系统信息的机密性,是第一个严格形式化的安全模型
85 3
SELinux 安全模型——MLS
|
7月前
|
监控 安全 数据安全/隐私保护
selinux的安全策略可以影响ntp的方式
selinux的安全策略可以影响ntp的方式
56 5
|
安全 Linux Shell
16.5.3 【Linux】SELinux 三种模式的启动、关闭与观察
16.5.3 【Linux】SELinux 三种模式的启动、关闭与观察
361 0
|
安全 关系型数据库 MySQL
关于 linux 文件权限控制-SELinux
关于 linux 文件权限控制-SELinux
241 0
关于 linux 文件权限控制-SELinux
|
编解码 Android开发
Android SELinux Enforcing 模式下问题及解决
Android SELinux Enforcing 模式下问题及解决
717 0
|
网络协议 Linux Apache
linux selinux策略管理与标签
linux selinux策略管理与标签
|
Android开发
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
533 0
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )