1.Selinux安全机制简介

Selinux是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。而SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设计的一个针对Linux的安全加强系统。

NSA最初设计的安全模型叫FLASK,全称为Flux Advanced Security Kernel(由Uta大学和美国国防部开发,后来由NSA将其开源),当时这套模型针对DTOS系统。后来,NSA觉得Linux更具发展和普及前景,所以就在Linux系统上重新实现了FLASK,称之为SELinux。

Linux Kernel中,SELinux通过Linux Security Modules实现。在2.6之前,SElinux通过Patch方式发布。从2.6开始,SELinux正式入驻内核,成为标配。

虽然SELinux已在Linux内核中存在了近十年,但至今仍有很多管理员由于担心其配置的复杂性而弃之不用。虽然许多Linux管理员在他们的Linux服务器中禁用SELinux来避免在安装应用程序时对它进行配置,但在Linux安全性方面SELinux是一个非常有用的工具。

2.SELinux Policy语言介绍

在android里面,有两个类型,一种是文件,一种是进程。针对这两种类型,我们可以先来看看他们的不同。

【1】在android上面,adb shell之后进入手机,ps -Z可以查看当前进程所拥有的selinux的权限。

u为user的意思。SEAndroid中定义了一个SELinux用户,值为u。

r为role的意思。role是角色之意,它是SELinux中一种比较高层次,更方便的权限管理思路,即Role Based Access Control(基于角色的访问控制,简称为RBAC)。简单点说,一个u可以属于多个role,不同的role具有不同的权限。

init,代表该进程所属的Domain为init。对进程来说,Type就是Domain。比如init这个Domain有什么权限,都需要通过allow语句来说明。

S0和SELinux为了满足军用和教育行业而设计的Multi-Level Security(MLS)机制有关。简单点说,MLS将系统的进程和文件进行了分级,不同级别的资源需要对应级别的进程才能访问。

【2】在android上面,adb shell之后进入手机,ls -Z可以查看文件所拥有的selinux的权限。

u:同样是user之意,它代表创建这个文件的SELinux user。

object_r:文件是死的东西,它没法扮演角色,所以在SELinux中,死的东西都用object_r来表示它的role。

rootfs:死的东西的Type,和进程的Domain其实是一个意思。它表示root目录对应的Type是rootfs。

s0:MLS的级别。

总结进程和文件的SContext的文件格式如下:

user:role:type[:range]

注意,方括号中的内容表示可选项。s0属于range中的一部分。下文再详细介绍range所代表的Security Level相关的知识。SContext的核心其实是前三个部分:user:role:type。

MAC基本管理单位是TEAC(Type Enforcement Accesc Control),然后是高一级别的Role Based Accesc Control。RBAC是基于TE的,而TE也是SELinux中最主要的部分。

3.TE文件

在Android的源码中对应的TE文件所在的路径为/home/linux/fspad-733/androidL/external/sepolicy

这些.te文件中有allow的语句,咱们来具体的分析一下这个语句的功能

allow netd proc:file write

这条语句的语法为:

allow:TE的allow语句,表示授权。除了allow之外,还有allowaudit、dontaudit、neverallow等。

netd:source type。也叫subject,domain。

proc:target type。它代表其后的file所对应的Type。

file:代表Object Class。它代表能够给subject操作的一类东西。例如File、Dir、socket等。在Android系统中,有一个其他Linux系统没有的Object Class,那就是Binder。

write:在该类Object Class中所定义的操作。

5.问题的解决

参考例子如下:

audit(0.0:67): avc: denied { write } for path="/dev/block/vold/93:96" dev="tmpfs" ino=1263 scontext=u:r:kernel:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=0

分析过程:

缺少什么权限:      { write }权限,

谁缺少权限:        scontext=u:r:kernel:s0,

对哪个文件缺少权限:tcontext=u:object_r:block_device

什么类型的文件:    tclass=blk_file

解决方法:kernel.te

allow kernel block_device:blk_file write;

【1】Selinux设备文件权限解决办法

[53692.570392] type=1400 audit(12565266.940:42): avc: denied { read write } for pid=10794 comm="m.example.hello" name="led1" dev="tmpfs" ino=39430 scontext=u:r:untrusted_app:s0 tcontext=u:object_r:device:s0 tclass=chr_file permissive=0

分析过程:

缺少什么权限:  read  write

谁缺少权限:    scontext=u:r:untrusted_app:s0     untrusted_app

对那个文件缺少权限:tcontext=u:object_r:device:s0    device

什么类型的文件:tclass=chr_file                     chr_file

把缺少的权限添加上去,添加的过程如下。

cd  external/sepolicy:

1.修改file_contexts

/dev/led1           u:object_r:led1_device:s0

2.修改device.te

type led1_device, dev_type;

3.修改  untrusted_app.te

allow untrusted_app    led1_device:chr_file rw_file_perms;

添加好了之后重新编译Android的源码,烧写system.img和boot.img

【2】Selinux服务权限解决办法

E/SELinux (  128): avc:  denied  { add } for service=led scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager

问题分析:从第一个问题中我们分析在执行ioctl这个函数时返回了一个空的指针,从第二个查看的内容中我们分析到的问题时led这个内容没有Selinux权限。

分析过程:

缺少什么权限:      { add }权限,

谁缺少权限:        system_server

对哪个文件缺少权限:default_android_service

什么类型的文件:    service_manager

解决方法:system_server.te

allow system_server  default_android_service: service_manager add;

把缺少的权限添加上去,添加的过程如下。

进入fspad-733/androidL/external/sepolicy中

1.在service.te文件中添加

type led_service,    service_manager_type;

2.在service_contexts文件中添加

led           u:object_r:led_service:s0

3.在system_server.te文件中添加

allow system_server  led_service: service_manager add;

添加好了之后重新编译Android的源码,烧写system.img和boot.img

Selinux安全机制的更多相关文章

  1. [转]Apache 监听端口失败,selinux惹的祸

    原文在此 CentOS 下启动Httpd 失败,报 (13)Permission denied: make_sock: could not bind to address [::]:8000 因为 小 ...

  2. 防火墙和SELinux复习02

    1.防火墙 防火墙主要起隔离作用,严格的过滤入站,允许出站.又分为硬件防火墙和软件防火墙,硬件防火墙主要保护一群机器,而软件防火墙主要保护本机. 防火墙相关命令:systemctl status fi ...

  3. 解决SELinux导致Apache更改端口后无法启动的问题

    systemctl start httpd    # 将Apache的默认端口改为90后,启动Apache时提示失败 systemctl status httpd    # 查看Apache的状态 可 ...

  4. Security基础(二):SELinux安全防护、加密与解密应用、扫描与抓包分析

    一.SELinux安全防护 目标: 本案例要求熟悉SELinux防护机制的开关及策略配置,完成以下任务: 将Linux服务器的SELinux设为enforcing强制模式 在SELinux启用状态下, ...

  5. (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    原文链接: http://www.cnblogs.com/ants/p/5732337.html 阅读目录 环境说明 准备你的ASP.NET Core应用程序 安装CentOS7 安装.NET Cor ...

  6. 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...

  7. 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

    这段时间在使用Rabbit RPC重构公司的一套系统(微信相关),而最近相关检验(逻辑测试.压力测试)已经完成,接近部署至线上生产环境从而捣鼓了ASP.NET Core应用程序在CentOS上的部署方 ...

  8. Linux 部署 nginx服务代理

    原文地址:http://www.cnblogs.com/ants/p/5732337.html#_label5 参考地址:http://www.cnblogs.com/hustskyking/p/ng ...

  9. HTTP学习笔记(五)

    目前,市场上流行有很多web服务器软件,每种服务器都有自己的特点.我们在开发的过程中,经常要和它们打交道,所以了解它们的工作原理也是很重要的. 几款比较流行的服务器 它们会做些什么? 第三篇中有这样的 ...

随机推荐

  1. 12. ZooKeeper配额和认证

    ZooKeeper具有与其数据模型相关的可配置配额(quota). 可以设置znode上的配额限制和存储的数据量.如果ZooKeeper命名空间中的一个子树超出与其关联的配额,ZooKeeper会在日 ...

  2. Gulp livereload

    平时使用yeoman作为前端部署工具,感觉到yeoman构建工具虽然方便,但是速度和大小总是不尽人意. 最近看到了gulp http://gulpjs.com/ 比较感兴趣随动手一试 gulp的安装以 ...

  3. JavaScript OOP(一)之构造函数与new命令

    面向对象编程:Object Oriented Programming,简称OOP. 典型的oop语言,如hava.c++,存在着类的概念,类就是对象的模板 (类可以类比为人类:而实例化类后变为对象,对 ...

  4. scapy安装及SCTP包分析

    关于Scapy scapy是一个强大的交互式数据包处理程序(使用python编写).它能够伪造或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等.它可以很容易地处理一些典型操作,比如端口 ...

  5. python中字母与ascii码的相互转换

    在做python编程时,碰到了需要将字母转换成ascii码的,原本以为用Int()就可以直接将字符串转换成整形了,可是int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报 ...

  6. 代码管理 ,git 命令整理

    //先要理解这四个概念,这是一个提交代码的流动轨迹:1.工作区(编辑器)-经过add到2- 2.暂存区 (缓存)- 经过commit3-3.本地仓库 (本地项目)-经过 push4-4.远程仓库 (线 ...

  7. 修改 docker image 安装目录 (解决加载大image时报错:"no space left on device")

    修改 docker image 安装目录 (解决加载大image时报错:"no space left on device" ) 基于Ubuntu16.04 docker版本: 17 ...

  8. SSRS Fields cannot be used in page headers or footers

    问题环境:SSRS 2005 报表开发 尝试在Page Header中使用Data Set的字段,遇到以下的错误: The value expression for textbox '' refers ...

  9. outb,inb等I/Oport操作函数

    功能: 如 i386 .在差别 I/O 空间和内存空间的进程的 I/O 空间写入数据. outb()   I/O 上写入 8 位数据 ( 1 字节 ). outw() I/O 上写入 16 位数据 ( ...

  10. 集成CCFlow工作流与GPM的办公系统驰骋CCOA介绍(一)

    CCOA是驰骋又一款对外开源的软件.集成了CCFlow(流程设计器.表单设计器)CCIM与GPM(权限系统管理),能够说,CCOA集中了驰骋开源的全部产品.同一时候,CCOA本身也具有一些功能.能够帮 ...