转自:https://blog.csdn.net/murphykwu/article/details/52457667

selinux的概念如上一篇链接所示:

http://www.cnblogs.com/linhaostudy/p/8659662.html

一、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($, qmuxd, qmux)

 allow qmux $1_qmuxd_socket:sock_file { getattr unlink };

 ')

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

七、总结

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

Android中SELinux的TE简介【转】的更多相关文章

  1. android中SELINUX规则分析和语法简介【转】

    本文转载自:https://blog.csdn.net/LoongEmbedded/article/details/62430039 1. SELINUX是可以理解为一种Android上面的安全机制, ...

  2. android中SELINUX规则分析和语法简介

    1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的 ...

  3. android中volley通信框架简介

    1. 什么是Volley? 在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient ...

  4. Android中Toast的用法简介

    转自:http://www.cnblogs.com/GnagWang/archive/2010/11/26/1888762.html Toast是Android中用来显示显示信息的一种机制,和Dial ...

  5. Android中的 init.rc文件简介

    init.rc脚本是由Android中linux的第一个用户级进程init进行解析的. init.rc 文件并不是普通的配置文件,而是由一种被称为"Android初始化语言"(An ...

  6. Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

    XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能.今天就由我向大家介绍一下在Android平台下几种常见的XML解 ...

  7. Android中后台的劳动者“服务”

    前言 作为四大组件之一的Service,想必不少开发者都是了解的,那具体熟悉吗?是不是对Service中的每个知识点是否了解,它与Activity的关系又是什么样的,我们所理解的后台服务跟Servic ...

  8. Android中的HTTP通信

    前言:近期在慕课网学习了慕课网课程Android中的HTTP通信,就自己总结了一下,其中参考了不少博文,感谢大家的分享. 文章内容包括:1.HTTP简介2.HTTP/1.0和HTTP/1.1之间的区别 ...

  9. Ionic中使用Chart.js进行图表展示以及在iOS/Android中的性能差异

    Angular Chart 简介 在之前的文章中介绍了使用 Ionic 开发跨平台(iOS & Android)应用中遇到的一些问题的解决方案. 在更新0.1.3版本的过程中遇到了需要使用图表 ...

随机推荐

  1. yarn依赖管理工具,和fis3构建工具 gulp详细用法

    看视频所了解到的,正在进行摸索. 参考:https://www.cnblogs.com/2050/p/4198792.html这篇介绍gulp的文章非常棒,唯一有一点,页面随时刷新的目前还没实现,不知 ...

  2. Redis使用sortedset缓存IP段数据

    我们原来的业务中,有很多地方需要解析用户IP的信息,刚开始是通过新浪.百度这些第三方的接口来解析IP信息,后来发现调用这些接口频繁时会被禁用一小段时间.不得已只得将数据存到我们的数据库中,表结构大致如 ...

  3. Visual Studio For MacOS 踩坑记(二)

    Visual Studio For MacOS安装安卓SDK. 系统默认安装了安卓6.0  API23的SDK.  但是我需要安卓7.0的,API24.  遂安装. SDK可以下载成功,但是用Visu ...

  4. Mysql 用户权限管理

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...

  5. SQL 必知必会·笔记<2>检索和排序数据

    1.检索数据 使用SELECT 检索表数据,必须至少给出两条信息——想选择什么, 以及从什么地方选择. 检索不同的值 使用DISTINCT关键字,检索不同的值,使用示例: SELECT DISTINC ...

  6. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十二):解决跨域问题

    什么是跨域? 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 如果一个请求地址里面的协议.域名和端口号都相同,就属于同源. ...

  7. docker常用命令记录

    Docker官方镜像中心:https://hub.docker.com/explore/ 参考:慕课网docker视频教程 https://www.imooc.com/video/14625 1.启动 ...

  8. Python使用@property装饰类方法

    Python版本:3.5.2 假如我们有一个Student类,并在其中定义了一个score属性,但是score属性会被显露出去,没办法检查参数,导致成绩可以随意更改: stu = Student() ...

  9. angularjs学习第五天笔记(第二篇:表单验证升级篇)

    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点 ...

  10. c# DataReader转换为Json

    /// <summary> /// DataReader转换为Json /// </summary> /// <param name="dataReader&q ...