提问人:Redson 提问时间:3/25/2015 更新时间:11/18/2023 访问量:37321
如何在 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 是否被禁用(使用 ),它返回 .我希望 SELinux 在启动时被完全禁用。如果没有完全禁用,那么至少.getenforce
Enforcing
Permissive
有什么建议吗?
答:
后
设置强制 0
enforce 属性将立即为 Permissive。
评论
您可以通过在内核命令行中添加一些参数来使其宽松,而不是放入 init.rc (BOARD_KERNEL_CMDLINE)
例如:添加enforcing=0 androidboot.selinux=permissive
device/<manufacturer>/<target>/BoardConfig.mk
评论
好吧,我想您可以为您的“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 是允许的,系统的其余部分将强制执行,因此您可以毫无问题地运行守护进程,并且仍然保持系统安全性。
禁用 SElinux 仅适用于 OR 构建,不适用于标准构建:userdebug
eng
user
注意:生产设备不支持宽容模式。CTS 测试确认已启用强制模式。
SELinux 强制可以通过 userdebug 或 eng 构建的 ADB 禁用。
另请参阅 https://stackoverflow.com/a/32660547/282601
如果要完全禁用 SElinux,则需要更改位于 的 selinux.cpp 函数。两个函数,并设置以不同单位调用的 SElinux 的状态。如果同时更改 as 和 的 return 值,则 SElinux 状态将始终为宽松。请在此处查看与此帖子相关的答案。这也适用于类型生成。system/core/init
StatusFromProperty()
IsEnforcing()
SELINUX_PERMISSIVE
false
user
评论