新文件device.te包含:
type mydev_device,dev_type;
新文件mydevsrvc.te包含
# service flash_recovery in init.rc type mydevsrvc_type,domain; type mydevsrvc_type_exec,exec_type,file_type; init_daemon_domain(mydevsrvc_type) allow mydevsrvc_type mydev_device:chr_file rw_file_perms;
编辑file_contexts添加:
/dev/mydev[0-9]* u:object_r:mydev_device:s0
编辑了service_contexts以添加:
mydevsrvc u:object_r:mydevsrvc_type:s0
并通过编辑init.flo.rc来启动守护进程以包含以下行:
service mydevsrvc /system/bin/mydevsrvc class main user system group system seclabel u:r:mydevsrvc_type:s0 oneshot
现在,我需要访问Android应用程序中的设备,所以我必须将守护进程更改为Android系统服务.
我可以使用BOOT_COMPLETED意图启动服务(线程),如a previous question中所述
我无法弄清楚如何设置SELinux策略,以便此java服务也能够访问dev文件.
[更新]为此,我继续使用特权守护进程.我的java服务通过套接字连接到守护进程.我没有更好的解决方案.
解决方法
对于这项工作,我需要能够从我的实现我的服务的Java应用程序访问我的设备文件.
我需要在我的sepolicy目录中的新文件中添加以下规则:
允许system_app mydev_device:chr_file rw_file_perms;
此外,需要使我的服务应用程序在system_app域中运行.为此,我需要:
>在Android构建期间安装在priv_app中.
>使用平台密钥签名
>在manifest中声明共享用户标识:android.uid.system.我发现没有这个,应用程序在平台应用程序域中运行,即使SEPolicy规则中有相应的更改,也无法访问我的设备文件.不知道为什么,我没有费心去调试.
也可以在mydevsrvc_type域中运行我的服务应用程序.我没有找到如何做到这一点,或者这是否有效.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。