Android系统SELinux详解

前言

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 - 要执行的操作(例如,读取、写入)。

策略配置源文件

  1. external/sepolicy
    这是独立于设备的配置,一般不能针对设备进行修改
  2. device///sepolicy
    这是特定于设备的配置,基于 BOARD_SEPOLICY_* 变量来选择对应平台的策略配置。

Type Enforcement (TE) 配置文件

.te 文件中保存了对应对象的域和类型定义、规则。通常每个域一个 .te 文件,例如installd.te。在 device.te、file.te 中声明了设备和文件类型。在某些文件(例如domain.te、app.te)中则存储着共享规则。

标签配置文件

  1. file_contexts:文件安全上下文
  2. property_contexts:属性安全上下文
SEAndroid app分类

SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):

名称

猜你喜欢

转载自blog.csdn.net/u010345983/article/details/134016908
今日推荐