前言
SELinux是一种加强文件安全的一种策略,可以更好地保护我们的Android系统, 比如限制系统服务的访问权限、控制应用对数据和系统日志的访问等措施,这样就降低了恶意软件的影响,并且可以防止因代码存在的缺陷而产生的对系统安全的影响。
从系统安全方面考虑,SELinux是保护神,但是从软件开发方面,SELinux就是一道牵绊,这是一把双刃剑。SELinux默认开启,即使获得了该系统的root权限,也只能向相关策略中指定的设备写入数据,从而更好地保护和限制系统服务,保障系统和数据的安全。
环境
硬件平台:Google Pixel2
操作系统:Android10.0
selinux有两种工作模式
名称 | 作用 |
---|---|
permissive | 所有操作都被允许(即没有MAC),但是如果有违反权限的话,会记录日志 |
enforcing | 所有操作都会进行权限检查 |
标签、规则和域
SELinux 依靠标签来匹配操作和策略。标签用于决定允许的事项。套接字、文件和进程在 SELinux 中都有标签。SELinux 在做决定时需参照两点:一是为这些对象分配的标签,二是定义这些对象如何交互的策略。
在 SELinux 中,标签采用以下形式:user:role:type:mls_level,其中 type 是访问决定的主要组成部分,可通过构成标签的其他组成部分进行修改。对象会映射到类,对每个类的不同访问类型由权限表示。
策略规则采用以下形式:allow domains types:classes permissions;,其中:
名称 | 作用 |
---|---|
domain | 一个进程或一组进程的标签。也称为域类型,因为它只是指进程的类型。 |
type | 一个对象(例如,文件、套接字)或一组对象的标签。 |
class | 要访问的对象(例如,文件、套接字)的类型。Permission - 要执行的操作(例如,读取、写入)。 |
策略配置源文件
- external/sepolicy
这是独立于设备的配置,一般不能针对设备进行修改 - device///sepolicy
这是特定于设备的配置,基于 BOARD_SEPOLICY_* 变量来选择对应平台的策略配置。
Type Enforcement (TE) 配置文件
.te 文件中保存了对应对象的域和类型定义、规则。通常每个域一个 .te 文件,例如installd.te。在 device.te、file.te 中声明了设备和文件类型。在某些文件(例如domain.te、app.te)中则存储着共享规则。
标签配置文件
- file_contexts:文件安全上下文
- property_contexts:属性安全上下文
SEAndroid app分类
SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):
名称 |
---|