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

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

提问人:Redson 提问时间:3/25/2015 更新时间:11/18/2023 访问量:37321

问:

我想在 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 是否被禁用(使用 ),它返回 .我希望 SELinux 在启动时被完全禁用。如果没有完全禁用,那么至少.getenforceEnforcingPermissive

有什么建议吗?

安卓 Android-NDK 5.0-棒棒糖 安卓-4.4-KitKAT SELinux

评论


答:

0赞 candy 4/2/2015 #1

设置强制 0

enforce 属性将立即为 Permissive。

评论

0赞 Alan Kazbekov 10/2/2015
看起来没那么简单。例如:stackoverflow.com/a/31147475/4449456
0赞 candy 12/23/2015
是的。这取决于根目录和ROM。上面的链接比较完整。
5赞 Shailesh 9/27/2017 #2

您可以通过在内核命令行中添加一些参数来使其宽松,而不是放入 init.rc (BOARD_KERNEL_CMDLINE)

例如:添加enforcing=0 androidboot.selinux=permissivedevice/<manufacturer>/<target>/BoardConfig.mk

评论

0赞 Edward Falk 4/3/2019
在为模拟器构建时,<manufacturer>/<target>会使用什么用途?ro.hardware 是“ranchu”,如果有帮助的话。
5赞 Vismay Patel 9/8/2018 #3

好吧,我想您可以为您的“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 是允许的,系统的其余部分将强制执行,因此您可以毫无问题地运行守护进程,并且仍然保持系统安全性。

0赞 cweiske 10/2/2023 #4

禁用 SElinux 仅适用于 OR 构建,不适用于标准构建:userdebugenguser

注意:生产设备不支持宽容模式。CTS 测试确认已启用强制模式。

SELinux 强制可以通过 userdebug 或 eng 构建的 ADB 禁用。

另请参阅 https://stackoverflow.com/a/32660547/282601

0赞 Mehran Alidoost Nia 11/18/2023 #5

如果要完全禁用 SElinux,则需要更改位于 的 selinux.cpp 函数。两个函数,并设置以不同单位调用的 SElinux 的状态。如果同时更改 as 和 的 return 值,则 SElinux 状态将始终为宽松。请在此处查看与此帖子相关的答案。这也适用于类型生成。system/core/initStatusFromProperty()IsEnforcing()SELINUX_PERMISSIVEfalseuser