配套系列教学视频链接:
说明
系统:Android10.0
设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)
前言
本章节介绍DAC和MAC相关概念
一, DAC权限控制概念
selinux之前, linux采用的是DAC (Discretionary Access Control,自主访问控制系统)基本概念就是系统只提供基本的验证,完整的访问控制由开发者自己控制(直接chmod/chmod就可以修改权限),DAC采用了一种非常简单的策略(policy),存在资源访问者,资源,资源的访问权限:
- 资源访问者分别:Owner, Group,Other,访问者包含各种用户(uid/gid),各种进程;
- 资源一般都是文件;
- 资源的访问权限分成read、 write、 execute;
二, MAC权限控制概念
在DAC中, 每个用户都有uid/gid, 进程理论上所拥有的权限与执行它的用户的权限相同,如果进程是由root超级用户启动,该进程就会拥有root权限, 该进程就可以在系统上干任何事情,其实是比较危险的。所以就出现了MAC(Mandatory Access control强制性访问控制),即要求系统对每一项访问都进行严格的限制和验证,具体的限制和验证策略(policy)由开发者给出, 即需要明确的指明某个进程可以访问哪些资源(文件、网络端口,属性等)。
MAC可以明显弥补DAC的缺陷。如可限制Root权限,即使你有root权限(将军),如果无法通过MAC验证(圣旨授权),那么一样的无法真正执行相关的操作。另外MAC对每一项权限进行了更加完整的细化,可限制用户对资源的访问行为。在Linux Kernel,所有的MAC机制都是搭建在Linux Security Modules(LSM)基础上,目前SELinux已经成了事实上的行业标准。
注意: Linux系统先做DAC检查。如果没有通过DAC权限检查,则操作直接失败。通过DAC检查之后,再做MAC权限检查。
三, SEAndroid和Selinux的关系
SELinux(Security Enhanced Linux)就是linux系统中对MAC的实现。由于Android系统有着独特的用户空间运行时,因此SELinux不能完全适用于Android系统。为此,NSA(美国国家安全局)同Google一起针对Android系统,在SELinux基础上开发了SEAndroid(Security Enhancements (SE) for Android), Android 从5.0开始普遍使用SEAndroid。