版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、百度文库-让每个人平等地提升自我SEAndroid 基础0.版本跟踪版本日期描述作者v0.12014-7-14创建文档及初稿内容郭崇鑫1.前言安全是在移动终端普及下,移动互联网应用需要解决的重头戏。当然,有了网络安全的保障下,还需要设备自身的安全保证,因此, Android集成了基于 SELinux的SEAndroid 。2.SEAndroid、SELinux 与 AndroidSEAndroid(Security-Enhanced Android , Security Enhancements for Android ? (SE for Android)是将Linux操作系统上的 MAC强制
2、存取管控套件 SELinux移植到Android平台上, 用于增强Android系统对APP等的存取管控,用于确保每个APP的独立运行,防止恶意APP对系统或其他应用程序的攻击。那么什么是 MAC?其与传统的 DAC区别在哪?在 SELinux出现之前,Linux上使用的 安全模型为 DAC (Discretionary Access Control ,自主访问控制),其思想为:进程理论上 所拥有的权限与执行它的用户的权限相同,而MAC ( Mandatory Access Control ,强制访问控制)的思想为:任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权
3、限,凡是没有出现在该文件中的权限,进程就没有相应的权限。从而在DAC下,ROOT用户能进行所有的操作,但在MAC下则不行,特殊人物也需按规则来办事了,有提前在MAC里申请配置的才能进行相应权限的操作。综上所述,SEAndroid=SELinux+Android ,下图可以看出传统Android 和使用了SELinux的SEAndroid之间对权限操作的区别:5Daemon (root权限)应用(用户权限用户区 <系统区p-OJPU<w(n应用f用户权即)Daemon:rocit 权限原生 Android左边和右边分别是未使用和使用SELinux的Android系统对于数据操作的区别
4、,未使用SELinux的Android系统下,ROOT用户权限拥有最高权限,能对用户区与系统区进行操作,而普通用户只能对用户区进行操作,而使用了 SELinux的Android系统下,不管是普通用户权限还是 ROOT权限的程序,对用户区和系统区操作时,都必须通过SEAndroid的验证,拥有相应权限才能对相应文件进行操作,否则只能被拒门外。SEAndroid实现的是“白名单”的安全机制,只有在安全策略文件中设置相应权限才能 进行操作,否则默认为拒绝状态,即默认没有权限。3.PolicySELinux拥有自己的规则来编写安全策略文件,称为 SELinux Policy 语言。Linux下有两种东
5、西:一种是静止的(Inactive ), 一种是活跃的(Active )。静止的是文件(Linux下一 切皆文件),活跃的是进程。进程能发起动作,如打开文件并操作它,而文件只能被进程操 作。那么SELinux里也必然针对这些东西来进行权限的配置,只有活跃的进程和静止的文 件在权限相符时活跃的进程才能进行相应的操作。SELinux中,每种东西都会被赋予一个安全属性,叫作Security Context (下用SContext表示),是一个字符串,主要由 3部分组成。1)活跃的进程使用ps -Z命令可以看到有如下输出:u:r:init:s0media172/system/bin/MtkCodecS
6、erviceu:r:dm_agent_binder:s0system182/system/bin/dm_agent_binderu:r:init:s0system1841/system/bin/ppl_agentu:r:mtkbt:s0bluetooth 1991/system/bin/mtkbt其中,第一列为相应进程的SContext ,下面以 MtkCodecService 的 u:r:init:s0 来说明:u: user, SEAndroid 中定义的唯个SELinux 用户, 在 external/sepolicy/users文件中定义;r: role ,对应SELinux中的一种比
7、较高层次的机制:RBAC (Role Based AccessControl ,基于角色的访问控制),其提供更方便的权限管理思路,一个u可以属于多个role, 不同的role具有不同的权限,其在 external/sepolicy/roles 文件中定义;Typeinit :代表该进程所属的Domain 为init 。 MAC 的基础管理思路是基1Enforecement Access Control ( TEAC , 一般用 TE 表示);s0 :其与SELinux为了满足军用和教育行业而设计的MLS (Multi-Level Security )机制有关,MLS将进程和文件进行分组,不同级
8、别的资源需要对应级别的进程才能访问, 在 external/sepolicy/mls 文件中 会调用 gen_sens(mls_num_sens) 宏, 该宏在external/sepolicy/mls_macros文件中定义,其最终只使用sensitivity关键字定义了 s0这一级别,即在目前的 Android下只定义了一个级别。2)静止的文件使用ls -Z命令(在/目录下执行)可以看到有如下的输出:drwxrootrootu:object_r:rootfs:s0 rootdrwxr-x- nvramsystemu:object_r:rootfs:s0 sbchkdrwxr-x- root
9、rootu:object_r:rootfs:s0 sbin倒数第2列为相应文件的 SContext信息,以第一行 root的u:object_r:rootfs:s0 说 明如下:u: user,代表创建该文件的 SELinux user;object_r :文件是静止的,在 SELinux下,静止的东西都用object_r来表示role;rootfs :静止的东西的 Type ,与活跃的东西的 Domain是对应的。从上面对于Inactive和Active两类SContext的分析,可以了解到SContext的基本格式:user:role:type:range其中最核心的就前3部分。MAC的基
10、本管理单元是 TEAC ,然后是高一级别的 RBAC , RBAC是基于TE的, 故而TE也是SELinux中最主要的部分。下面以一个 TE例子说明下在 TE (*.te)文件中对 于SContext配置时的语法规则:allow netd proc:file write解析如下:allow :规则名字,表示授权。TE的rule_name有如下4种:allow :赋予某项权限;allowaudit : audit含义就是记录某项操彳默认情况下 SELinux只记录 那些权限检查失败的操作, 而allowaudit则包含检查成功的操作也记录,这只允许记录,与上面提到的赋予权限无关,赋予权限只能使用
11、allow ;dontaudit :对那些权限检查失败的操作不做记录;nerverallow :禁用某项权限,上面提到如果没有在安全策略文件中赋予权限的,都是被禁止的,那么该关键字不是多此一举?当然不是了,用它主要是检查安全策略文件中有没有违反该项规则的allow语句,即一般情况下使用 allow语句太多,怕误操作允许了某项权限,而使用nerverallow来定义我们明确不允许的权限,这样必然会有冲突出现,那么检查的效果就生效了。netd : source type ,也称 subject、domain ;proc: target type ,代表其后的file所对应的Type;file :
12、Object Class,代表能够给 subject 操作的一类东西,如 File、Dir、Socket 等;write :在该 Object Class 中所定义的操作。该句总的意思'是:允许 netd进程对proc类型file进彳w write操作。从上面可以看出 SELinux对应该配置的语句格式为:rule_name source_type target_type:class perm_set其中,当 source_type、target_type、class、perm_set 为多项时,可以使用花括号“ ”将起括起来,其可与如下的操作符结合使用:相当于“取反”操作,即除了指定
13、的项外的所有项;-:去除指定项;*:表示所有项。4.SELinux 模式在SELinux开启下,可以支持以下两种模式:1) permissive mode宽容模式,在该模式下, SELinux仅警告并记录失败的事件,而不会产生实际的限制效果。2) enforcing mode强制模式,在该模式下, SELinux会根据安全策略来做操作相关限制,不符时会拒绝访问,并产生相应的事件记录。百度文库-让每个人平等地提升自我在 Android4.3 , SELinux 是 permissive 模式,而在 Android4.4 , SELinux 可支持两种 模式,但默认是enforcing模式(只对i
14、nstalld、netd、vold和zygote这4个root进程的Domain 生效,其他都是 permissive模式),如要切换为 permissive模式,可在 Kernel启动参数中 力口入 androidboot.selinux=permissive 。在Android运行状态时对模式进行操作:获得当前模式:adb shell getenforce切换为 enforcing 模式:adb shell su 0 setenforce 1切换为 permissive 模式:adb shell su 0 setenforce 0在Android的init.rc脚本中设置默认初始模式,在适
15、当位置使用setenforce命令配置,参数功能同上。5 .编译及调试使用 mmm external/sepolicy 会在 out/root 目录下生成 sepolicy 文件,将其 push至U/data/security/current/ 目录下, 然后 setprop selinux.reload_policy 1 , 让 init 重新力口载新 的policy文件,默认情况下会先使用 /data/security/current 目录下的sepolicy文件,如果该 文件不存在,再使用/目录下的同名文件。6 .实例在MTK8382平台下调试 M Sensor时碰到串口有如下提示:78
16、.031936.(3)1283:akmd09911type=1400audit(1404911771.430:249):avc:denied read for pid=1283 comm= " akmd09911 " path= " /system/bin/linker ” dev= " mmcblk0p5 "ino=205scontext=u:r:akmd09911:s0tcontext=u:object_r:linker_exec:s0 tclass=file78.044496.(3)1283:akmd09911type=1400audit
17、(1404911771.440:250):avc:denied read write for pid=1283 comm= " akmd09911 " name= " msensor ” 6百度文库-让每个人平等地提升自我dev= " tmpfs “ino=3211scontext=u:r:akmd09911:s0tcontext=u:object_r:msensor_device:s0 tclass=chr_file78.047459.(3)1283:akmd09911type=1400audit(1404911771.450:251):avc:den
18、ied open for pid=1283 comm= " akmd09911 " name= " msensor ” dev=" tmpfs“ino=3211scontext=u:r:akmd09911:s0tcontext=u:object_r:msensor_device:s0 tclass=chr_file那么该如何添加相应的权限到TE文件中呢?我们最终在 mediatek/custom/common/sepolicy/akmd09911.te文件中添力口了 如下语句:allow akmd09911 linker_exec:file read ;allow akmd09911 msensor_device:chr_file open read write ;其中,source_type akmd09911 与上面的提示 scontext中的type对应(MTK的文档里 说是与 comm 对应),target_type linker_exec 和 msensor_device 与 tcontext 中的 type 对 应,object_class file 和 chr_file 与 tclas
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版固定价格购电合同样本3篇
- 2025年外研版2024二年级语文下册阶段测试试卷含答案
- 2025年沪科版七年级数学上册阶段测试试卷
- 2025年人教B版五年级英语下册月考试卷含答案
- 二零二五年度高端办公文档制作家政服务合作合同
- 2025年浙教版七年级科学上册阶段测试试卷含答案
- 2024版中介合作装修贷款合同3篇
- 2025年沪科版九年级地理上册阶段测试试卷含答案
- 2025年苏教版九年级科学上册月考试卷含答案
- 2025年华师大版四年级语文下册月考试卷
- 餐饮行业智慧餐厅管理系统方案
- 2025年度生物医药技术研发与许可协议3篇
- 电厂检修安全培训课件
- 殡葬改革课件
- 双方个人协议书模板
- 车站安全管理研究报告
- GB/T 12229-2005通用阀门碳素钢铸件技术条件
- 超分子化学-第三章 阴离子的络合主体
- 控制变量法教学课件
- 血压计保养记录表
- 初中中考英语总复习《代词动词连词数词》思维导图
评论
0/150
提交评论