Android Framework 常见解决方案(01)关闭SELinux

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.

 

你可能感兴趣的:(android,framework,常见解决方案)