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