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