GPS*_*GPS 8 service android selinux android-source
我之前写过一个独立的守护进程来访问自定义设备(/ dev/mydev0).看看AOSP源代码,我认为我需要在以下文件中设置策略才能使其工作:
新文件device.te包含:
type mydev_device, dev_type;
Run Code Online (Sandbox Code Playgroud)
新文件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;
Run Code Online (Sandbox Code Playgroud)
编辑file_contexts添加:
/dev/mydev[0-9]* u:object_r:mydev_device:s0
Run Code Online (Sandbox Code Playgroud)
编辑service_contexts添加:
mydevsrvc u:object_r:mydevsrvc_type:s0
Run Code Online (Sandbox Code Playgroud)
并通过编辑init.flo.rc来启动守护进程以包含以下行:
service mydevsrvc /system/bin/mydevsrvc
class main
user system
group system
seclabel u:r:mydevsrvc_type:s0
oneshot
Run Code Online (Sandbox Code Playgroud)
现在,我需要访问Android应用程序中的设备,所以我必须将守护进程更改为Android系统服务.
我可以使用BOOT_COMPLETED意图启动服务(线程),如前一个问题中所述
我无法弄清楚如何设置SELinux策略,以便此java服务也能够访问dev文件.
[更新]为此,我继续使用特权守护进程.我的java服务通过套接字连接到守护进程.我没有更好的解决方案.
我终于想出了答案。把它贴在这里,因为肯定会有像我这样的 SEPolicy 菜鸟寻找类似的答案。
对于这项工作,我需要能够从实现我的服务的 Java 应用程序访问我的设备文件。
我需要在我的 sepolicy 目录中的一个新文件中添加以下规则:
allow system_app mydev_device:chr_file rw_file_perms;
此外,需要让我的服务应用程序在system_app域中运行。为此,我需要:
priv_app在 Android 构建期间安装。android.uid.system。我发现如果没有这个,应用程序在platform-app域中运行,即使 SEPolicy 规则发生了相应的变化,也无法访问我的设备文件。不知道为什么,我没有费心去调试。也可以在mydevsrvc_type域中运行我的服务应用程序。我不知道如何做到这一点,或者这是否会奏效。
| 归档时间: |
|
| 查看次数: |
9327 次 |
| 最近记录: |