• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# OpenHarmony SELinux新增文件策略配置方法
2
3## 只读分区新增文件
4
5**适用场景**
6
7为避免对文件系统恶意破坏,OpenHarmony将部分镜像挂载为只读,如system.imgvendor.img,这些镜像内的文件在编译阶段就会被赋予SELinux标签。
8
9**配置指导**
101. 在file_contexts中,建立文件绝对路径与文件标签的映射关系,可以使用正则表达式。
11    ```text
12    /system/lib(/.*)?    u:object_r:system_lib_file:s0
13    ```
142. 在type.te中定义system_lib_file,使u:object_r:system_lib_file:s0是合法的。
15    ```text
16    type system_lib_file, system_file_attr, file_attr;
17    ```
18
19## 读写分区新增文件
20
21**适用场景**
22
23在OpenHarmony操作系统中,存在一些读写分区,如/data目录为用户数据存储目录,通常用来存储应用程序和用户产生的数据,允许应用程序在其中创建、读取和写入文件,这些文件一般是动态生成的,默认会继承父目录的标签,在业务安全防护需要时,可以在文件创建完成后为其配置独立的文件标签。
24
25
26**配置指导**
271. 在file_contexts中,建立文件绝对路径与文件标签的映射关系,可以使用正则表达式。
28    ```text
29    /data/service/el0(/.*)?    u:object_r:data_service_el0_file:s0
30    ```
312. 在type.te中定义data_service_el0_file,使u:object_r:data_service_el0_file:s0是合法的。
32    ```text
33    type data_service_el0_file, file_attr, data_file_attr;
34    ```
353. 使标签生效,file_contexts只是映射了文件路径和标签的对应关系,标签不会自动更新到文件上,需要进程主动触发标签更新操作。按文件创建的时机,可以分为以下场景:
36      | 适用场景 | 更新标签位置 |
37      | -------- | -------- |
38      | 通过init从cfg拉起的进程,在cfg内使用mkdir创建目录或文件 | 由于init在解析cfg中的mkdir命令时,已经集成了SELinux更新标签函数Restorecon,所以mkdir会更新标签 |
39      | 在开机阶段cfg内使用mkdir创建的目录或文件 | 由于init在解析cfg中的mkdir命令时,已经集成了SELinux更新标签函数Restorecon,所以mkdir会更新标签 |
40      | 在进程运行期间,由进程本身创建的目录或文件 | 需要进程在创建目录或文件后,调用SELinux更新标签函数Restorecon更新标签 |
41
42      其中,SELinux更新标签函数参考[OpenHarmony SELinux对外接口](subsys-security-selinux-func.md)。
43
444. 调试阶段,可以使用restorecon命令刷新文件或者目录的标签。刷新目录标签时,它会遍历刷新其子目录和文件的标签。命令使用方法:
45    ```bash
46    restorecon path
47    ```
48    **参数:**
49    | 参数名 | 类型 | 必填 | 描述 |
50    | ------ | -----| ----- | -------- |
51    | path | string | 是 | 文件或者目录的绝对路径。 |
52
53## 虚拟文件系统新增文件
54
55**适用场景**
56
57对于虚拟文件系统,例如/proc、/sys等目录下的文件标签,可以在 virtfs_contexts文件内对文件或目录进行标签配置。
58
59
60**配置指导**
611. 虚拟文件系统的标签映射方式和普通文件系统的标签映射方式不一样,在virtfs_contexts中,用genfscon语法来配置。
62    ```text
63    genfscon  proc /iomem  u:object_r:proc_iomem_file:s0
64    ```
652. 在type.te中定义`proc_iomem_file`,使`u:object_r:proc_iomem_file:s0`是合法的。
66    ```text
67    type proc_iomem_file, fs_attr, proc_attr;
68    ```
69