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 政策内的规则管理
67 0
|
3月前
|
安全 Linux Apache
selinux概述-状态切换
【8月更文挑战第9天】SELinux(Security Enhanced Linux)是安全模块,集成于Linux内核之上,提供了一种灵活且强制性的访问控制机制。通过MAC(强制访问控制)、RBAC(基于角色的访问控制)及TE(类型实施)等特性,增强系统的安全性,即使部分服务被攻破,也能限制损害范围,保护系统核心不受影响。SELinux支持多种运行模式,包括强制执行的enforcing模式、记录行为但允许执行的permissive模式以及完全关闭的disabled模式。
74 6
|
3月前
|
安全 Linux 数据安全/隐私保护
在Linux中,SELinux工作原理是什么?如何启用/禁用?
在Linux中,SELinux工作原理是什么?如何启用/禁用?
|
5月前
|
安全 JavaScript 数据安全/隐私保护
SELinux 安全模型——MLS
BLP 模型:于1973年被提出,是一种模拟军事安全策略的计算机访问控制模型,它是最早也是最常用的一种多级访问控制模型,主要用于保证系统信息的机密性,是第一个严格形式化的安全模型
74 3
SELinux 安全模型——MLS
|
Android开发
Android应用实现开机自启动的一种较好的方式
Android应用实现开机自启动的一种较好的方式
|
网络协议 Linux Apache
linux selinux策略管理与标签
linux selinux策略管理与标签
|
Android开发
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
521 0
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
|
安全 Linux 数据安全/隐私保护
|
安全 Linux Apache