android系统安全策略te语法分析

一. 基本语法
很多te文件集中在\external\sepolicy文件夹下,MTK也有很多自定义的在\device\mediatek\common\sepolicy。它的最基本样式是       
  
  
  
  1. allow factory powerctl_prop:property_service set;
  2. allow factory ttyGS_device:chr_file { read write open ioctl};
  3. allow factory ttyMT_device:chr_file { read write open ioctl};
  4. allow factory irtx_device:chr_file { read write ioctl open };
  5. allow factory devpts:chr_file { read write getattr ioctl };
这些allow语句就是最基本的te语句了,相似的te语句的会被归类在一个的te文件下面。如上面的语句是作用于factory,则会在 factory .te文件里。 \external\sepolicy集中了很多系统定义的te文件 
文件名 归类
mac_permissions.xml App进程
seapp_contexts App数据文件
file_contexts 系统文件
property_contexts 系统属性
最基本的语法为:    
    
    
    
  1. /*
  2. rule_name:规则名,分别有allow,dontaudit,neverallow等
  3. source_type:主要作用是用来填写一个域(domain)
  4. target_type:类型
  5. class:类别,主要有File,Dir,Socket,SEAndroid还有Binder等
  6. perm_set:动作集
  7. */
  8. rule_name source_type target_type:class perm_set
我们   从上面拿一个实例下来分析一下:
    
    
    
  1. /*
  2. 用中文来表述是:允许factory域里的进程或服务
  3. 对类型为ttyMT_device的类别为文件(file)
  4. 执行open,read,write,ioctl权限
  5. */
  6. allow factory ttyMT_device:chr_file { read write open ioctl};

te表达式基本上就是这样:
rule_name:规则名称,除了有allow还有dontaudit,auditallow和neverallow
source_type:源类型,对应一个很重要的概念--------域(domain)
tartget_type:目标的类型,即安全上下文,SELinux一个重要的判断对象
class:类别,目标(客体)是哪种类别,主要有File,Dir,Socket,SEAndroid还有Binder等,在这些基础上又细分出设备字符类型(chr_file),链接文件(lnk_file)等。可以通过ls -l查看文件类型
perm_set:动作集

从上到下按顺序介绍一下:
rule_name:

 allow:允许某个进程执行某个动作
auditallow:audit含义就是记录某项操作。默认SELinux只记录那些权限检查失败的操作。 auditallow则使得权限检查成功的操作也被记录。注意,allowaudit只是允许记录,它和赋予权限没关系。赋予权限必须且只能使用allow语句。
dontaudit:对那些权限检查失败的操作不做记录。
neverallow:没有被allow到的动作默认就不允许执行的。neverallow只是显式地写出某个动作不被允许,如果添加了该动作的allow,则会编译错误

source_type:
指定一个“域”(domain),一般用于描述进程,该域内的的进程,受该条TE语句的限制。用type关键字,把一个自定义的域与原有的域相关联
最简单地定义一个新域的方式为:
    
    
    
  1. type shell, domain
上面这句话的意思是,赋予shell给domain属性,同时,shell与属于domain这个集合里。如果有一个allow domain xxxxx 的语句,同样地也给了shell xxxxx的属性

target_type:
指定进程需要操作的客体(文件,文件夹等)类型(安全上下文),同样是用type与一些已有的类型,属性相关联
以上面的 ttyMT_device为例:
    
    
    
  1. //定义一个类型,属于dev_type属性
  2. type ttyMT_device, dev_type;
  3. //属性dev_type在external/sepolicyattributes的定义如下
  4. attribute dev_type;
attribute关键字定义一个属性,type可以与一个或多个属性关联,如
    
    
    
  1. type usb_device, dev_type, mlstrustedobject;
另外,还有一个关键字typeattribute,type有两个作用,定义(声明)并关联某个属性。可以把这两个作用分开,type定义,typeattribute进行关联
     
     
     
  1. #定义httpd_user_content_t,并关联两个属性
  2. type httpd_user_content_t, file_type, httpdcontent;
  3. 分成两条语句进行表述:
  4. #定义httpd_user_content_t
  5. type httpd_user_content_t;
  6. #关联属性
  7. typeattribute httpd_user_content_t file_type, httpdcontent;
这些类型(安全上下文)会显示地与一个“文件”想关联,如:
file_contexts里面显式定义了哪些文件属于ttyMT_device类型,即用ls -Z显示出来文件的安全上下文
     
     
     
  1. /dev/ttyMT.* u:object_r:ttyMT_device:s0
虚拟文件系统的标识方式与普通的文件系统文件标识方式不一样,用genfscon来配置。
     
     
     
  1. genfscon的语法是:
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值