Android系统服务的SELinux策略定义:如何设置?

时间:2015-11-18 11:48:44

标签: android service android-source selinux

我之前写了一个独立的守护进程来访问自定义设备(/ dev / mydev0)。看看AOSP源代码,我认为我需要在以下文件中设置策略才能使其正常工作:

新文件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服务通过套接字连接到守护进程。我没有更好的解决方案。

4 个答案:

答案 0 :(得分:4)

我终于找到了答案。将它发布在这里,因为肯定会有像我这样的SEPolicy noobs寻找类似的答案。

对于这项工作,我需要能够从我的实现我的服务的Java应用程序访问我的设备文件。

我需要在sepolicy目录中的新文件中添加以下规则:

allow system_app mydev_device:chr_file rw_file_perms;

此外,还需要让我的服务应用在system_app域中运行。为此,我需要:

  1. 在Android版本中安装priv_app
  2. 使用平台密钥签名
  3. 在清单中声明共享用户ID:android.uid.system。我发现没有这个,应用程序在platform-app域中运行,即使SEPolicy规则中有相应的更改,也无法访问我的设备文件。不知道为什么,我没有费心去调试。
  4. 也可以在mydevsrvc_type域中运行我的服务应用。我没有找到如何做到这一点,或者这是否有效。

答案 1 :(得分:2)

以下是在Android设备上实施SELinux所需步骤的简要摘要:

在内核和配置中添加SELinux支持。 授予每个服务(进程或守护进程)从init自己的域启动。 通过以下方式确定这些服务 查看init..rc文件并查找所有服务。 检查表单init的警告:警告!服务名称需要定义SELinux域;请修理!在dmesg输出。 检查ps -Z | grep init输出以查看init域中正在运行的服务。 标记所有新进程,驱动程序,套接字等。所有对象都需要正确标记,以确保它们与您应用的策略正确交互。有关在标签名称创建中要遵循的示例,请参阅AOSP中使用的标签。 制定完全涵盖所有标签的安全策略,并将权限限制在绝对最低限度。 理想情况下,OEM从AOSP中的策略开始,然后在它们的基础上进行自定义。

了解更多https://source.android.com/security/selinux/implement.html

答案 2 :(得分:0)

可能在您的ueventd.rc文件或特定项目中添加一行以授予权限

答案 3 :(得分:0)

回答你的问题从init rc启动服务 你可以像下面这样写一个 rc 文件。接收到 boot_completed 时它将在何处启动您的服务

on property:sys.boot_completed=1
   start mydevsrvc

供参考http://androidxref.com/9.0.0_r3/xref/device/generic/qemu/init.ranchu.rc#60