添加编译时Lunch option aosp_car_x86_64-eng
\device\generic\car\vendorsetup.sh
在文件最后添加
add_lunch_combo aosp_car_x86_64-eng
Selinux两种模式
Enforcing:强制模式,SELinux 运作中,且已经正确的开始限制 domain/type
Permissive:宽容模式,SELinux 运作中,仅会有警告讯息并不会限制 domain/type 的存取
userdebug 版本开机后,可以通过adb命令来查看或设置SELinux模式(设置后需重启shell才真正生效,手机重启后恢复),可以用此方法排除问题:
adb shell getenforce, #会返回 Enforcing 或 Permissive
adb shell setenforce 1或0, #设置其为 Enforcing 或 Permissive
ServiceManager.addService后添加selinux权限
例如服务名为“com.abc” ServiceManager.addService("com.abc", xxx);
-
/packages/services/Car/car_product/sepolicy/public/service.te
添加
type abc_service, app_api_service, service_manager_type;
定义服务名称和属性
-
/packages/services/Car/car_product/sepolicy/private/service_contexts.te
添加
com.abc u:object_r:abc_service:s0
用于为 Android Binder 服务分配标签,以便控制哪些进程可以为相应服务添加(注册)和查找(查询)Binder 引用。在启动期间,servicemanager
进程会读取此配置。
-
/packages/services/Car/car_product/sepolicy/private/carservice_app.te
添加
allow carservice_app abc_service:service_manager add;
允许carservice_app 中调用添加ServiceManager.addService("com.abc", xxx); 添加abc_service
说明
以上是参照CarService以及以下三项东拼西凑的结果๑乛◡乛๑
在 /system/sepolicy/private/untrusted_app_all.te
中有一句为
allow untrusted_app_all app_api_service:service_manager find;
允许普通app find app_api_service,
在/system/sepolicy/private/app_neverallows.te 中
neverallow all_untrusted_apps service_manager_type:service_manager add;
禁止不受信任的应用添加系统服务
在/system/sepolicy/private/priv_app.te
neverallow priv_app service_manager_type:service_manager add;
禁止特权应用程序添加系统服务
问题解决:
确认是 SELINUX 相关之后就可以抓 log 查看 log 文件中的 avc: log
标志性 log: avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
在相应源类型.te 文件,添加如下格式的一行语句:(结尾别忘了分号) 格式:allow 源类型 目标类型:访问类型 {操作权限};
如下: 07-10 14:06:32.780 9043 9043 W com.filemanager: type=1400 audit(0.0:104): avc: denied { read } for name="u:object_r:curef_set_prop:s0" dev="tmpfs" ino=1334 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:curef_set_prop:s0 tclass=file permissive=0
可以得到如下 sepolicy:添加到 platform_app.te 文件 allow platform_app curef_set_prop : file { read };