README.md
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