如何在 init.rc 文件中的 Android L 中完全禁用 SELinux?

How to completely disable SELinux in Android L in the init.rc file?

我想在 Android L 或 5 的启动时禁用 SELinux。原因是因为 SELinux 问题,我的守护进程没有在应该在启动时开始执行。我的 init.rc 文件中有以下内容:

su 0 setenforce 0
service my_daemon /system/bin/my_daemon 
    class main     # Also tried: class core (but it didn't make a difference)
    user root
    group root

然而,在启动时,我使用 adb shell 检查 SELinux 是否被禁用(使用 getenforce)并且它 returns Enforcing。我希望在启动时完全禁用 SELinux。如果没有完全禁用,那么至少 Permissive.

有什么建议吗?

之后

setenforce 0

enforce 属性将立即为 Permissive。

除了输入 init.rc,您还可以通过向内核命令行添加一些参数来使其变得宽松 (BOARD_KERNEL_CMDLINE)

例如:在 device/<manufacturer>/<target>/BoardConfig.mk

中添加 enforcing=0 androidboot.selinux=permissive

嗯,我猜你可以为你的 "my_daemon" 创建一个新的域策略。例如,您可以在 AOSP 的 device/manufacturer/device-name/sepolicy/ 创建 mydomain.te 文件,内容如下,

# mydomain policy here
type mydomain, domain;
permissive mydomain;
type mydomain_exec, exec_type, file_type;

init_daemon_domain(mydomain)

现在将以下行添加到 device/manufacturer/device-name/sepolicy/file_contexts:

/system/bin/my_daemon   u:object_r:mydomain_exec:s0

这是您的 init.rc 文件:

service my_daemon /system/bin/my_daemon
    class core

所以这里的好处是只有 mydomain 是允许的,系统的其余部分将强制执行,因此您可以让您的守护进程 运行 没有任何问题,并且仍然保持系统安全。