1# OpenHarmony SELinux概述
2
3## 简介
4
5OpenHarmony结合系统架构特点,基于安全增强式Linux(**S**ecurity-**E**nhanced **Linux**
6,以下简称SELinux)对OpenHarmony操作系统内文件、参数、SA、HDF等系统资源提供强制访问控制保护能力。本文基于SELinux访问控制模型,提供OpenHarmony SELinux功能的开发指导。
7
8OpenHarmony SELinux支持以下功能:
9
101. 支持访问参数、SA、HDF管控。
112. 支持设置应用标签。
123. 支持策略编译与加载。
134. 支持contexts编译与加载。
145. 支持编译时策略合理性检查。
15
16## 基本概念
17
18- **安全上下文**
19
20  安全上下文,也通常称为SELinux标签。OpenHarmony SELinux安全上下文的结构是`user:role:type:sensitivity[:category,...]- sensitivity [:category,...]`:
21  - `user`:用户类型,比如`user u roles { r }`,定义user为u的用户,它属于`role r`。
22  - `role`:角色标识符,角色限制了进程在进程上下文中基于角色标识符可转换的类型,其中文件、参数、SA服务、HDF服务等资源的用户类型使用`object_r`,进程的用户类型使用r。
23  - `type`:SELinux类型,在SELinux规则语句中,使用类型定义规则。
24  - `sensitivity`:分层安全级别,不同安全级别不能相互访问,目前OpenHarmony SELinux仅支持一层安全级别`s0`。
25  - `category`:对特定`sensitivity`划分不分层的分类,目前OpenHarmony SELinux已经定义的分类为`c0-c1023`,目前的OpenHarmony SELinux策略上未对category进行区分。
26
27- **主体**
28
29  表示访问方,主体可以是一个用户、一个进程、一个服务或其他SELinux类型,OpenHarmony SELinux对进程主体分为四大类:Native进程、应用进程、SA进程、HDF进程。
30
31- **客体**
32
33  表示被访问方,客体一般是文件、目录、参数、SA服务、HDF服务等系统资源。
34
35- **sid**
36
37  安全标识符(**S**ecurity **ID**),用于标识进程、文件或其他SELinux对象的唯一标识符。
38
39- **AVC**
40
41  访问矢量缓存(**A**ccess **V**ector **C**ache),用于跟踪和缓存有关访问控制决策的信息,以提高系统的性能和安全性。
42
43- **TE**
44
45  类型强制(**T**ype **E**nforcement),SELinux策略是由多条类型强制规则构成的。
46
47- **运行模式**
48
49  OpenHarmony SELinux支持两种运行模式:
50  + `Enforcing`,强制模式,拦截未授权行为并打印avc告警。
51  + `Permissive`,宽容模式,放行未授权行为并打印avc告警。
52
53## 实现原理
54
55OpenHarmony SELinux通过主体和客体的安全上下文表示主体是否有权限访问客体,在内核态拦截未授权行为。
56
57**图1** OpenHarmony SELinux分层架构图
58
59![selinux_architect](./figures/SELinux-architecture.png)
60