android为APK新建SELINUX权限域seapp_contexts
当APP需要做一些系统或系统设备相关的访问读写,新加的权限会跟android内置的neverallow规则冲突,从而造成编译不过。解决方法是为应用新建一个域,添加自定义规则,绕开编译问题。
·
背景:
SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):
1)untrusted_app 第三方app,没有Android平台签名,没有system权限;
2)platform_app 有Android平台签名,没有system权限;
3)system_app 有android平台签名和system权限。
当APP需要做一些系统或系统设备相关的访问读写,新加的权限会跟android内置的neverallow规则冲突,从而造成编译不过。解决方法是为应用新建一个域,添加自定义规则,绕开编译问题。
新建方法:
1,在device/[product]/sepolicy/seapp_contexts 添加上APK的域定义:
user=system seinfo=platform name=com.fiill.fiillplayer domain=fiillplayer_app type=fiillplayer_app_data_file
user=_app,可以是untrusted_app或platform_app,如果seinfo=platform,则是platform_app。根据需要添加。
2,在/device/[product]/sepolicy/vendor/file.te加上
type fiillplayer_app_data_file, file_type, data_file_type ,core_data_file_type ;
3,新建/device/[product]/sepolicy/vendor/fiillplayer_app.te,部分内容参考:
type fiillplayer_app, domain;
app_domain(fiillplayer_app)
binder_use(fiillplayer_app)
allow fiillplayer_app system_app_data_file:file create_file_perms;
allow fiillplayer_app system_app_data_file:dir create_dir_perms;
allow fiillplayer_app system_data_file:dir r_dir_perms;
allow fiillplayer_app system_data_file:file r_file_perms;
#prop
allow fiillplayer_app hwservicemanager_prop:file { read getattr map open };
get_prop(fiillplayer_app, hwservicemanager_prop)
set_prop(fiillplayer_app, hwservicemanager_prop)
至此已经完成。注意,由于uid设置为system,所以权限有时候需要在system_app配置。如果想独立于system_app,试试user=_app。
更多推荐
已为社区贡献2条内容
所有评论(0)