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

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaowang_lj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值