简述Android中SELinux的TE

所属分类: 软件编程 / Android 阅读数: 41
收藏 0 赞 0 分享

一、SELinux资源访问基本概念

 SELinux使用类型强制来改进强制访问控制。所有的主体(程序进程)对客体(文件/socket等资源)的访问都有一条TE规则来许可。当程序访问一个资源的时候,系统会搜索所有的TE规则集,并根据结果进行处理。这个规则集是由访问向量规则(AV, Access Vector)来描述的。

内核向外部暴露允许访问的资源权限,由TE来描述主体拥有什么样的访问权。SELinux定义了30个不同的客体类别:

security process system capability filesystem file dir fd lnk_file chr_file blk_file socket_file ... 

每个客体类别都定义了操作许可,比如针对file有19个操作许可:

ioctl read write create getattr setattr lock relablefrom relableto append unlink link rename execute swapon quotaon mounton execute_no_trans entrypoint

 这两个内容在后面介绍常用语法的时候会涉及到。所以对于file的操作许可,我们可以看到基本上是对文件的操作方法,所以程序调用这些功能的时候,系统会检查是否有一个TE规则,授予了该程序权限来使用该功能。

二、Android中的SELinux

2.1 开启SELinux

首先必须先开启SELinux功能,google提供了开启该选项的开关。在BoardConfig.mk里面会定义如下变量:

BOARD_SEPOLICY_DIRS += build/target/board/generic/sepolicy

对应路径下面就会有很多TE文件来描述进程对资源的访问许可。

2.2 声明类型

type 类型名称 
type system_app;

2.3 关联类型和属性

有两种方法可以将某个类型跟某个属性关联起来。

一,在声明类型的时候就关联已经定义的属性。

type system_app, domain;

这个就在定义system_app的时候就将它跟已经定义的domain属性关联起来了。

typeattribute platform_app mlstrustedsubject;

如果已经定义了类型platform_app,可以用typeattribute将它和已经定义的mIstrustedsubject关联起来。

注意:所有的属性和类型都共用一个命名空间,所以命名的时候不要出现同名的属性和类型哦。

三、访问向量(AV)规则

AV用来描述主体对客体的访问许可。通常有四类AV规则:

allow:表示允许主体对客体执行许可的操作。

neverallow:表示不允许主体对客体执行制定的操作。

auditallow: 表示允许操作并记录访问决策信息。

dontaudit:表示不记录违反规则的决策信息,切违反规则不影响运行

通用的类型规则语法位:

allow platform_app debugfs:file { read ioctl };

表示类别为platform_app的程序进程,对debugfs类型的文件执行read和ioctl操作。

四、一些特殊的配置文件:

external/sepolicy/attributes -> 所有定义的attributes都在这个文件 
external/sepolicy/access_vectors -> 对应了每一个class可以被允许执行的命令 
external/sepolicy/roles -> Android中只定义了一个role,名字就是r,将r和attribute domain关联起来 
external/sepolicy/users -> 其实是将user与roles进行了关联,设置了user的安全级别,s0为最低级是默认的级别,mls_systemHigh是最高的级别 
external/sepolicy/security_classes -> 指的是上文命令中的class,个人认为这个class的内容是指在android运行过程中,程序或者系统可能用到的操作的模块 
external/sepolicy/te_macros -> 系统定义的宏全在te_macros文件 
external/sepolicy/*.te -> 一些配置的文件,包含了各种运行的规则

五、selinux有两种工作模式

 “permissive”:所有操作都被允许(即没有MAC),但是如果有违反权限的话,会记录日志
“enforcing”:所有操作都会进行权限检查

六、其他

在te文件中经常出现如下的函数:

unix_socket_connect(platform_app, agpsd, mtk_agpsd);

这个其实是一个宏。它定义在文件名为te_macros的文件里面,经过全局搜索这个宏,发现如下定义:

 unix_socket_connect($1, qmuxd, qmux)
 allow qmux $1_qmuxd_socket:sock_file { getattr unlink };
 ')

其实也是一个allow访问向量。

七、总结

在分析时时刻牢记,TE规则描述的是主体对客体访问的许可。TE的最小单位是类型,这个概念抽象了主体和客体。每个主体对客体执行某种许可,都需要有对应的av规则描述,否则就会失败。在实际项目过程中如果碰到相关的问题,可能就需要修改te文件,编辑相关的操作许可。

以上所述是小编给大家介绍的Android中SELinux的TE,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

Android中加入名片扫描功能实例代码

这篇文章主要介绍了Android中加入名片扫描功能实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android仿微信发表说说实现拍照、多图上传功能

这篇文章主要为大家详细介绍了Android仿微信发表说说实现拍照、多图上传功能,使用Retrofit2.0技术,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

设置Android系统永不锁屏永不休眠的方法

在进行Android系统开发的时候,有些特定的情况需要设置系统永不锁屏,永不休眠。本篇文章给大家介绍Android 永不锁屏,开机不锁屏,删除设置中休眠时间选项,需要的朋友一起学习吧
收藏 0 赞 0 分享

Android Retrofit 2.0框架上传图片解决方案

这篇文章主要介绍了Android Retrofit 2.0框架上传一张与多张图片解决方案,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android自定义等待对话框

这篇文章主要为大家详细介绍了Android自定义等待对话框的实现方法,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android中Window添加View的底层原理

这篇文章主要介绍了Android中Window添加View的底层原理,需要的朋友可以参考下
收藏 0 赞 0 分享

Android调用系统默认浏览器访问的方法

这篇文章主要介绍了Android调用系统默认浏览器访问的方法的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Android开发退出程序的方法汇总

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,子窗口B又调用子窗口C,back返回子窗口B后,在B中如何关闭整个Android应用程序呢? 下面脚本之家小编就给大家介绍android开发退出程序的几种方法,感兴趣的朋友参考下吧
收藏 0 赞 0 分享

Android程序开发中单选按钮(RadioGroup)的使用详解

在android程序开发中,无论是单选按钮还是多选按钮都非常的常见,接下来通过本文给大家介绍Android程序开发中单选按钮(RadioGroup)的使用,需要的朋友参考下吧
收藏 0 赞 0 分享

Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

这篇文章主要介绍了Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中 的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多