1# OpenHarmony SELinux策略自检 2 3## 概述 4 5根据avc日志转换出来的SELinux策略,不一定都是合理的,需要重新审视配置的SELinux策略,这里提供一些SELinux策略自检建议。 6 7## 涉及应用的SELinux策略自检 8 9目前OpenHarmony SELinux根据应用的三个APL等级,将应用进程的SELinux类型分为对应的三个attribute,将应用数据目录的SELinux类型也分为对应的三个attribute,如下: 10 11| APL等级 | 应用进程归属的attribute | 应用数据目录归属的attribute | 12| -------- | -------- | -------- | 13| normal | normal_hap_attr | normal_hap_data_file_attr | 14| system_basic | system_basic_hap_attr | system_basic_hap_data_file_attr | 15| system_core | system_core_hap_attr | system_core_hap_data_file_attr | 16 17APL说明参考[权限等级说明](../../application-dev/security/AccessToken/app-permission-mgmt-overview.md#权限apl等级)。 18 19另外还有一个attribute表示所有应用进程,为hap_domain。 20 21当配置的SELinux策略涉及应用SELinux类型时,需要根据实际的开放范围做对应的修改,比如根据avc日志配置的策略是: 22```text 23allow normal_hap huks_service:binder { call }; 24``` 25表示允许以normal_hap为标签的应用进程和huks_service进行binder通信。考虑实际情况,huks_service会为所有应用提供huks能力,那么这里的normal_hap应该改为hap_domain,即 26```text 27allow hap_domain huks_service:binder { call }; 28``` 29 30策略开放范围详细的对应关系,参考下表: 31 32| 面向应用进程的开放范围 | 替换为attribute | 33| -------- | -------- | 34| 所有normal等级的应用 | normal_hap_attr | 35| 所有system_basic等级的应用 | system_basic_hap_attr | 36| 所有system_core等级的应用 | system_core_hap_attr | 37| 所有应用 | hap_domain | 38 39| 面向应用数据目录的开放范围 | 替换为attribute | 40| -------- | -------- | 41| 所有normal等级的应用数据目录 | normal_hap_data_file_attr | 42| 所有system_basic等级的应用数据目录 | system_basic_hap_data_file_attr | 43| 所有system_core等级的应用数据目录 | system_core_hap_data_file_attr | 44| 所有应用的数据目录 | normal_hap_data_file_attr & system_basic_hap_data_file_attr & system_core_hap_data_file_attr | 45 46## 涉及新增ioctl的SELinux策略自检 47 48涉及配置ioctl相关的SELinux策略时,除了配置allow规则以外,还需要根据avc日志对ioctl的ioctlcmd进行限制,否则会导致所有的ioctlcmd权限都被开放,不满足权限最小化原则。例如,有下面的avc日志: 49```text 50#avc: denied { ioctl } for pid=1 comm="init" path="/data/app/el1/bundle/public" dev="mmcblk0p11" ino=652804 ioctlcmd=0x6613 scontext=u:r:init:s0 tcontext=u:object_r:data_app_el1_file:s0 tclass=dir permissive=0 51``` 52根据该avc日志配置了允许ioctl的SELinux策略: 53```text 54allow init data_app_el1_file:dir { ioctl }; 55``` 56同时,还需要根据avc日志中的`ioctlcmd=0x6613`字段,进一步限制ioctl的开放范围: 57```text 58allowxperm init data_app_el1_file:dir ioctl { 0x6613 }; 59``` 60 61## 使用neverallow对业务做安全防护 62 63neverallow可以阻止不合理的策略配置,因此可以作为安全防护手段,避免本业务的SELinux业务被恶意修改。 64 65例如,主体进程accesstoken_service的数据库文件SELinux类型为accesstoken_data_file。按业务安全需要,该数据库文件理论上只允许本进程读写,那么可以通过neverallow进行限制: 66```text 67neverallow { domain -accesstoken_service } accesstoken_data_file:file *; 68``` 69表示不允许除了accesstoken_service以外的其他进程对accesstoken_data_file进行文件操作。 70