模块中定义的sepolicy策略文件目录如下加入到系统编译中:
在BoardConfig.mk中找BOARD_SEPOLICY_DIRS,将你的sepolicy目录加到这个变量中,如下所示:
1 2 3 4 |
BOARD_SEPOLICY_DIRS := \ device/fsl/imx8/sepolicy \ packages/services/Car/evs/sepolicy \ device/fsl/mek_8q/sepolicy |
如何定义域?
在/system/sepolicy/public/attributes文件中输入如下的行来定义
1 |
attribute evs_domain; |
如何定义某个目录或者应用文件的安全上下文?
首先在/system/sepolicy/private/file_contexts中定义如下:
1 |
/system/bin/my_app u:object_r:my_app_exec:s0 |
然后创建my_app.te的文件来定义具体的规则:
根据logcat中的avc denied的log生成合适的seLinux规则。
我们可以在logcat中看到类似如下的日志:
1 2 3 4 5 6 |
04-01 07:55:37.768 5155 5155 I evs_app : type=1400 audit(0.0:20): avc: denied { read } for name="egl" dev="mmcblk0p4" ino=1732 scontext=u:r:evs_app:s0 tcontext=u:object_r:system_file:s0 tclass=dir permissive=1 04-01 07:55:37.768 5155 5155 I evs_app : type=1400 audit(0.0:21): avc: denied { open } for path="/system/lib64/egl" dev="mmcblk0p4" ino=1732 scontext=u:r:evs_app:s0 tcontext=u:object_r:system_file:s0 tclass=dir permissive=1 04-01 07:55:37.768 2879 2879 E SELinux : avc: denied { find } for interface=android.hardware.automotive.vehicle::IVehicle pid=5155 scontext=u:r:evs_app:s0 tcontext=u:object_r:hal_vehicle_hwservice:s0 tclass=hwservice_manager permissive=1 04-01 07:55:37.936 5155 5155 I evs_app : type=1400 audit(0.0:22): avc: denied { call } for scontext=u:r:evs_app:s0 tcontext=u:r:hal_configstore_default:s0 tclass=binder permissive=1 04-01 07:55:37.941 2879 2879 E SELinux : avc: denied { find } for interface=android.hardware.configstore::ISurfaceFlingerConfigs pid=5155 scontext=u:r:evs_app:s0 tcontext=u:object_r:hal_configstore_ISurfaceFlingerConfigs:s0 tclass=hwservice_manager permissive=1 04-01 07:55:42.928 5181 5181 I evs_app : type=1400 audit(0.0:23): avc: denied { call } for scontext=u:r:evs_app:s0 tcontext=u:r:hal_configstore_default:s0 tclass=binder permissive=1 |
我们可以通过audit2allow工具把上面的log转换成合适的规则,配置在策略文件中,如果没有安装过这个工具先安装工具,如下:
1 |
sudo apt install policycoreutils |
将相关的log保存到一个文件中,如avclog.txt,然后执行下面的命令来生成规则:
1 |
audit2allow -i avclog.txt |