[转] Android Framework 常见解决方案(01)关闭SELinux
转自: https://blog.csdn.net/vviccc/article/details/108806893
1 原理
在init启动时就直接设置selinux_is_enforcing强制返回为false。这样 开机启动后 执行
$getenforce
操作时 获取到的是 Permissive,即 SELinux 关闭状态。
2 修改方案(Android O)
修改文件为:system/core/init/init.cpp
,修改内容如下:
@@ -571,7 +571,7 @@ static void selinux_init_all_handles(void)
}
enum selinux_enforcing_status { SELINUX_PERMISSIVE, SELINUX_ENFORCING };
-
+#if 0
static selinux_enforcing_status selinux_status_from_cmdline() {
selinux_enforcing_status status = SELINUX_ENFORCING;
@@ -583,13 +583,17 @@ static selinux_enforcing_status selinux_status_from_cmdline() {
return status;
}
+#endif
static bool selinux_is_enforcing(void)
{
+ return false;
+#if 0
if (ALLOW_PERMISSIVE_SELINUX) {
return selinux_status_from_cmdline() == SELINUX_ENFORCING;
}
return true;
+#endif
}
static int audit_callback(void *data, security_class_t /*cls*/, char *buf, size_t len) {
3 修改方案(Android Q)
修改文件为:system/core/init/selinux.cpp
,修改内容如下:
selabel_handle* sehandle = nullptr;
enum EnforcingStatus { SELINUX_PERMISSIVE, SELINUX_ENFORCING };
-
+#if 0
EnforcingStatus StatusFromCmdline() {
EnforcingStatus status = SELINUX_ENFORCING;
@@ -95,12 +95,15 @@ EnforcingStatus StatusFromCmdline() {
return status;
}
-
+#endif
bool IsEnforcing() {
+#if 0
if (ALLOW_PERMISSIVE_SELINUX) {
return StatusFromCmdline() == SELINUX_ENFORCING;
}
return true;
+#endif
+ return false;
}
// Forks, executes the provided program in the child, and waits for the completion in the parent.