本文转载自:https://blog.csdn.net/kongbaidepao/article/details/61417291

一、 .te 文件定义中的一些宏

1.1 unix_socket_connect(1,1,2, $3 ) 
这个其实是一个宏。它定义在 te_macros(android系统,mtk 和 qcom 下面都有) 的文件里面的:

  1. ##################################### android 系统 te_macros 文件中的定义
  2. # unix_socket_connect(clientdomain, socket, serverdomain)
  3. # Allow a local socket connection from clientdomain via
  4. # socket to serverdomain.
  5. #
  6. # Note: If you see denial records that distill to the
  7. # following allow rules:
  8. # allow clientdomain property_socket:sock_file write;
  9. # allow clientdomain init:unix_stream_socket connectto;
  10. # allow clientdomain something_prop:property_service set;
  11. #
  12. # This sequence is indicative of attempting to set a property.
  13. # use set_prop(sourcedomain, targetproperty)
  14. #
  15. define(`unix_socket_connect', `
  16. allow $1 $2_socket:sock_file write;
  17. allow $1 $3:unix_stream_socket connectto;
  18. ')
  19. ##################################### 平台下 te_macros 的定义,(各有不同)
  20. # qmux_socket(clientdomain)
  21. # Allow client domain to connecto and send
  22. # via a local socket to the qmux domain.
  23. # Also allow the client domain to remove
  24. # its own socket.
  25. define(`qmux_socket', `
  26. allow $1 qmuxd_socket:dir create_dir_perms;
  27. unix_socket_connect($1, qmuxd, qmuxd)
  28. allow $1 qmuxd_socket:sock_file { read getattr write setattr create unlink };
  29. ')
  30. #####################################
  31. # netmgr_socket(clientdomain)
  32. # Allow client domain to connecto and send
  33. # via a local socket to the netmgrd domain.
  34. # Also allow the client domain to remove
  35. # its own socket.
  36. define(`netmgr_socket', `
  37. allow $1 netmgrd_socket:dir r_dir_perms;
  38. unix_socket_connect($1, netmgrd, netmgrd)
  39. allow $1 netmgrd_socket:sock_file { read getattr write };
  40. ')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

1.2 init_daemon_domain($1)

  1. ##################################### android 系统 te_macros 文件中的定义
  2. # init_daemon_domain(domain)
  3. # Set up a transition from init to the daemon domain
  4. # upon executing its binary.
  5. define(`init_daemon_domain', `
  6. domain_auto_trans(init, $1_exec, $1)
  7. tmpfs_domain($1)
  8. ')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

1.3 appdomain app_domain($1)

  1. #####################################android 系统 te_macros 文件中的定义
  2. # app_domain(domain)
  3. # Allow a base set of permissions required for all apps.
  4. define(`app_domain', `
  5. typeattribute $1 appdomain;
  6. # Label ashmem objects with our own unique type.
  7. tmpfs_domain($1)
  8. # Map with PROT_EXEC.
  9. allow $1 $1_tmpfs:file execute;
  10. ')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

二 、定义自己的 .te

2.1 
这个就很简单了,照猫画虎, 我们可以查看 sepolicy 下的很多 .te文件进行查看 
在 qcom 或者 mtk 的 sepolicy 下 创建文件

backup_service.te

文件头就照着其他文件拿过来,修改名称,定义我们自己的 type backup_service 
说简单点,就是 我们自己定义一个进程类型, backup_service他属于域 domain, 
然后下面我就们可以 去定义它的权限,允许他干什么, 不允许他干什么

  1. # backup_service
  2. type backup_service, domain;
  3. type backup_service_exec, exec_type, file_type;
  4. # Make transition from init to backup service domain
  5. init_daemon_domain(backup_service)
  6. unix_socket_connect(backup_service, property, init)
  7. # 允许文件操作
  8. allow .....
  9. # 允许文件夹相关操作
  10. allow ....
  11. .....
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

当然我们现在仅仅定义一个这个 .te 文件只是初步,还运作不起来, 
就跟我们写了一个 java代码 , int a=0 一样, 后面会文章会结合。

2.2 self 
策略语言保留了一个关键字self,它用于AV规则中的目标区域,可以当做一个类型使用,如下面这两条规则是相等的:

  1. # 这两条规则是相等的
  2. allow user_t user_t : process signal;
  3. allow user_t self : process signal;
  4. ------------------------------------------
  5. # 这两条规则
  6. allow user_t user_t : process signal;
  7. allow staff_t staff_t : process signal;
  8. #等于下面这一条规则
  9. allow {user_t staff_t} self : process signal;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

注意:你可能只会在AV规则的目标区域使用特殊类型self,特别要注意的是不能在AV规则的源区域使用self类型,另外,也不能声明一个类型或属性标识符叫做self。

  1. allow domain domain : process signal; # 每个进程都能向它自己和其它进程发送signal
  2. allow domain self : process signal; # 每个进程都能向它自己发送signal
  • 1
  • 2

2.5 make bootimage 
编译候,可以查看自己的规则是否编译进去,可以查看文件 android/out/target/product/项目名称/obj/ETC/sepolicy_intermediates/ 下的 policy.conf 
这个里面可以查看到是否编译进去了,比如你 定义了一个type什么名称,在文件里搜索,查看能否看到。

SElinux 读懂.te 定义自己的 .te【转】的更多相关文章

  1. 一文读懂PRBS定义、生成办法、作用

    对于眼图测试.误码率和抖动容限测试,最常用的测试码是PRBS,主要有PRBS7.PRBS15.PRBS23和PRBS31.本文主要解释了PRBS的定义,生成方法以及简单应用. PRBS定义 二进制序列 ...

  2. 一文读懂HDMI和VGA接口针脚定义

    一文读懂HDMI和VGA接口针脚定义 摘自:http://www.elecfans.com/yuanqijian/jiekou/20180423666604.html   HDMI概述 HDMI是高清 ...

  3. 读懂 PetaLinux:让 Linux 在 Zynq 上轻松起“跑”(转)

    对于Zynq这样一个“ARM+可编程逻辑”异构处理系统我们已经不陌生,其创新性大家也有目共睹.不过想要让更多的应用享受到这一“创新”带来的红利,让其真正“落地”则需要大量系统性的工作,去营造一个完善的 ...

  4. 读懂IL代码就这么简单(三)完结篇

    一 前言 写了两篇关于IL指令相关的文章,分别把值类型与引用类型在 堆与栈上的操作区别详细的写了一遍 这第三篇也是最后一篇,之所以到第三篇就结束了,是因为以我现在的层次,能理解到的都写完了,而且个人认 ...

  5. 读懂IL代码就这么简单(二)

    一 前言 IL系列 第一篇写完后 得到高人指点,及时更正了文章中的错误,也使得我写这篇文章时更加谨慎,自己在了解相关知识点时,也更为细致.个人觉得既然做为文章写出来,就一定要保证比较高的质量,和正确率 ...

  6. 读懂IL代码就这么简单 (一)

    一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不知所云,只听高手们说,了解IL代码你能更加清楚的知道你的代码是如何运行相互调用的,此言一出不明觉 ...

  7. Gradle学习系列之三——读懂Gradle语法

    在本系列的上篇文章中,我们讲到了创建Task的多种方法,在本篇文章中,我们将学习如何读懂Gradle. 请通过以下方式下载本系列文章的Github示例代码: git clone https://git ...

  8. 读懂IL代码就这么简单

    原文地址:http://www.cnblogs.com/zery/p/3366175.html 一前言 感谢 @冰麟轻武 指出文章的错误之处,现已更正 对于IL代码没了解之前总感觉很神奇,初一看完全不 ...

  9. 五分钟读懂UML类图

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

随机推荐

  1. js数组的方法

    arrayObject.join(separator) 将数组以separator字符为间隔转化为字符串并返回,如果不传,默认为逗号.此方法不会改变原数组 let arr = [1,2,3]; arr ...

  2. cocos2d安卓自动编译脚本去掉复制Resources资源和签名功能

    去掉这两个功能的原因: 1.因为有时候打包是分渠道的,不同的渠道资源也可能不一样,所以不能直接复制资源. 2.如果用cocostudio打release包,因为要输入签名地址,会导致在自动签名处停住不 ...

  3. 深入java虚拟机(二) 对象的创建

    java创建对象通常的方式是使用new指令,虚拟机会首先检查new指令的参数(也就是new关键字后面跟着的类名)是否能够在常量池中找到一个类的符号引用,并根据这个符号引用检查其代表的类是否已经加载.解 ...

  4. python 解析 XML文件

    如下使用xml.etree.ElementTree模块来解析XML文件.ElementTree模块中提供了两个类用来完成这个目的: ElementTree表示整个XML文件(一个树形结构) Eleme ...

  5. Spring Cloud Feign组件

    采用Spring Cloud微服务框架后,经常会涉及到服务间调用,服务间调用采用了Feign组件. 由于之前有使用dubbo经验.dubbo的负载均衡策略(轮训.最小连接数.随机轮训.加权轮训),du ...

  6. 讨论cocos2d-x字体绘制原理和应用方案

    转自:http://blog.csdn.net/langresser_king/article/details/9012789 个人一直认为,文字绘制是cocos2d-x最薄弱的环节.对于愤怒的小鸟之 ...

  7. POJ 2253 Frogger【最短路变形——路径上最小的最大权】

    链接: http://poj.org/problem?id=2253 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  8. 【Python之路】第二十四篇--爬虫

    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕 ...

  9. php 使用imagettftext()函数出问题的原因

    <?php header('Content-type: image/png'); $im = imagecreatetruecolor(400, 300); //创建画布 $white = im ...

  10. Unicode 和 UTF-8 是什么关系?

    2015-10-14 10:08    评论: 9 收藏: 4 转载自: http://huoding.com/2015/10/13/472作者: 火丁笔记本文地址:https://linux.cn/ ...