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

 

 


目录
相关文章
|
3天前
|
编解码 Android开发
selinux报avc denied权限和编译报neverallow 解决方案
selinux报avc denied权限和编译报neverallow 解决方案
9 1
|
9月前
|
Linux
Linux服务控制的命令
Linux服务控制的命令
45 0
|
11月前
|
Android开发
Android应用实现开机自启动的一种较好的方式
Android应用实现开机自启动的一种较好的方式
|
缓存 编解码 安全
SELinux 权限问题导致 GreatSQL 运行不了的坑
SELinux 权限问题导致 GreatSQL 运行不了的坑
|
安全 Linux
VirtualBox中的WIN7开启Aero模式要谨慎
VirtualBox中的WIN7开启Aero模式要谨慎
230 0
|
网络协议 Linux Apache
linux selinux策略管理与标签
linux selinux策略管理与标签
|
安全 Windows
Windows下禁止软件wps热点自启动和后台运行
Windows下禁止软件wps热点自启动和后台运行
703 0
Windows下禁止软件wps热点自启动和后台运行
|
Android开发
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
429 0
【Android 逆向】selinux 进程保护 ( selinux 进程保护 | 宽容模式 Permissive | 强制模式 Enforcing )
|
Windows
Windows 技术篇-win7利用系统自带工具关闭开机启用程序,不使用杀毒软件设置开机启动项
Windows 技术篇-win7利用系统自带工具关闭开机启用程序,不使用杀毒软件设置开机启动项
323 0
Windows 技术篇-win7利用系统自带工具关闭开机启用程序,不使用杀毒软件设置开机启动项