• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# cfg文件白名单规则说明
2
3## 规则解释
4  白名单严格遵循JSON格式。
5
6  ### **耗时命令约束**
7  **[白名单](whitelist.json)** 约束*.cfg文件中的耗时命令。
8
9  - 耗时命令
10
11    命令执行超过200ms的命令行。
12
13  - 规则要求
14
15    1. 命令行执行时间超过200ms。
16    2. 耗时命令在白名单中配置。
17    3. 耗时命令文件路径在白名单中配置。
18
19  - 白名单信息解释
20    ```
21    {
22        "cmd":"init_global_key",
23            "location":[
24                "/system/etc/init.cfg",
25                ...
26            ]
27    }
28    ```
29    1. cmd: 命令行
30    2. location:  耗时命令文件路径
31
32  - 解决方法
33    1. 检查违规项是否是耗时命令。
34    2. 检查该命令是否包含白名单中。
35    3. 检查该命令存在的文件路径是否包含在白名单中。
36    3. 根据评审结果添加命令到白名单。
37
38### **condition服务约束**
39   **[白名单](whitelist.json)** 约束*.cfg文件中的service的启动方式:condition。
40
41   - condition
42
43      condition 条件启动,对服务的启动方式配置condition,通过start命令拉起服务。
44
45   - 规则要求
46      1. 服务不是按需启动,即"ondemand" : false。
47      2. 服务是条件启动, 即"start-mode" : "condition", 并且通过start命令拉起服务。
48      3. 服务在白名单中。
49
50   - 白名单信息解释
51        ```
52        {
53            "start-modes": [
54                {
55                "start-mode":"condition",
56                "service": [
57                        "hilogd",
58                        ...
59                    ]
60                }
61            ]
62        }
63        ```
64        1. start-mode:"condition", 服务启动方式。
65        2. service:通过"start-mode" : "condition" 启动的服务。
66
67  - 解决方法
68    1. 检查服务否是按需启动。
69    2. 检查服务是否配置条件启动, 且通过start命令拉起服务。
70    3. 检查服务是否在白名单中。
71    4. 根据评审结果添加服务到白名单。
72
73### **boot服务约束**
74   **[白名单](whitelist.json)** 约束*.cfg文件中的service的启动方式:boot。
75
76   - boot
77
78      在init job阶段启动,其服务的启动方式配置 boot。
79
80  - 规则要求
81      1. 服务是boot启动, 即"start-mode" : "boot"的服务。
82      2. 服务在白名单中。
83
84   - 白名单信息解释
85        ```
86        {
87            "start-modes": [
88                {
89                "start-mode":"boot",
90                "service": [
91                        "hiview",
92                        ...
93                    ]
94                }
95            ]
96        }
97        ```
98        1. start-mode:"boot",服务启动方式。
99        2. service:通过"start-mode" : "boot" 启动的服务。
100
101  - 解决方法
102    1. 检查服务是否是boot启动。
103    2. 检查服务是否在白名单中。
104    3. 根据评审结果添加服务到白名单。
105
106### **start命令约束**
107   **[白名单](whitelist.json)** 约束*.cfg文件中的通过start执行的命令。
108
109   - start
110
111      通过start拉起的服务。
112
113   - 规则要求
114      1. 通过start命令执行的命令行。
115      2. 命令行在白名单中。
116
117   - 白名单信息解释
118        ```
119        {
120            "start-cmd": [
121                "ueventd",
122                ...
123            ]
124        }
125        ```
126        start-cmd: 执行start命令行。
127
128  - 解决方法
129    1. 检查命令是否是start命令。
130    2. 检查命令行是否在白名单中。
131    3. 根据评审结果添加命令到白名单。
132
133  ### **selinux约束**
134  - secon
135
136    服务的selinux标签
137
138  - 规则要求
139    1. 服务配置没有配置"secon"。
140    2. 配置配置的"secon"为空。
141
142  - 解决方法
143    1. 检查服务是否配置"secon", 且"secon"的配置不为空。
144    2. 根据要求修改服务"secon"配置
145
146编译时会提示如下类型的告警:
147  ```
148  [NOT ALLOWED]: 'init_global_key' is timeout command, in /system/etc/init.cfg
149  [NOT ALLOWED]: xxx 'secon' is empty
150  [WARNING]: 'storage_daemon' cannot be started in boot mode
151  [WARNING]: 'hilogd' cannot be started in conditional mode
152  [WARNING]: selinux status is xxx
153  [WARNING]: multimodalinput is not in start cmd list.  path:/system/etc/init/multimodalinput.cfg
154```
155
156## 违规场景及处理方案建议
157  1. 服务默认按照并行启动配置,如果需要添加白名单,需要评审。
158  2. 根据 **[规则解释](README.md#规则解释)** 排查修改。
159