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 60