相信我派的读者里不缺喜欢折腾 Android 手机的朋友,而当他们满怀激动地升级到 6.0 以上的系统后,却发现:Viper4Android 无法加载驱动,Flux 启动之后毫无效果,甚至连叹号助手都不能用了!看着 WiFi 图标旁碍眼的叹号,他们的强迫症终于发作了,不禁开始怀疑起自己为什么要手贱升级 6.0,甚至开始怀疑起自己的人生……

有没有补救方法呢?你看一眼题目呗,明显有啊。在新系统上出现的这些小问题,其实都是因为 SELinux。

什么是 SELinux

SELinux (Security-Enhanced Linux) 主要由美国国家安全局开发,是一种强制访问控制的实现。它的作法是以最小权限原则为基础,在Linux核心中使用Linux安全模块。它并非一个 Linux 发行版,而是一组可以套用在类 Unix 操作系统的修改。

——引自 WikiPedia

如果仅从 Android 设备来说,SELinux 就像是在你获取 Root 权限之后的最后一道守门神。它阻止了某些非授权访问,在一定的意义上保证了你设备的安全。

可是这也带来了一些麻烦:SELinux 是白名单放行机制,只要没有定义的操作就全部拒绝。这对于普通用户来说无大碍,可 Flux、Viper4Android 等软件的实现方法都是在内核级别加载驱动,而 SELinux 的存在让它们无法访问内核驱动,进而无法工作。

那关闭 SELinux 到底安不安全呢?理论上是会对设备的安全性造成影响。SELinux 会阻止几乎所有的 .so 文件加载并运行,这阻止了部分病毒大展手脚。但是!当你尝试关闭 SELinux 时,我们可以默认为你已经获得了 Root 权限——也就是说,病毒获取到 Root 权限之后,也只需要一句话就可以关闭 SELinux。如果这么看的话,从你 Root 设备开始,你的设备就变得不那么安全了。

在 Linux 上,无论是关闭 SELinux 还是增加 SEPolicy 都只需要一两条命令都能完成,可是在 SEAndroid 中没有提供永久关闭 SELinux 的方法,而更改 SEPolicy 需要对内核进行修改。所以,要在 Android 系统上解决这个问题就需要我们花一点心思了。

关闭方法

SELinux 的关闭方法有多种,本文介绍较为典型的两种。某些第三方 Rom 在开发者设置或者其他地方已经内置了此选项,开启即可。

简单粗暴,App 一键关闭

对于普通用户,最简单的可能是使用 App 来实现这一操作了。

  • SELinuxModeChanger 酷安 下载

安装完软件后,给予它 Root 权限,并点击主界面上的 Permissive ,并保证它可以在开机时自动启动即可。SELinuxModeChanger 虽然使用简单,但是在一定几率下可能会不起作用。 

338752.jpg

一劳永逸:脚本+终端模拟器

相信许多同学的强迫症也不能容许手机里多一个日常不会用到的 App。那么,也许你需要的是一个更 Geek 向的解决方法!

此方法仅适用于使用 SuperSU 的用户,如果你正在使用 Kingroot ,可以用 SuperSU Me 来替换权限管理工具。

步骤1. 判断目前你的 Root 状态

系统版本 < 6.0;或系统版本 > 6.0 且根目录下不存在 /su 目录

此时,在 /system 目录下新建 su.d 目录;若已存在此目录,则不需要新建。

注意:su.d 中间的「.」点必须是英文半角点,且中间不能有空格,下同。

系统版本 > 6.0,且根目录下有 /su 目录

此时,在 /su 目录下新建 su.d 目录;若已存在此目录,则不需要新建。

338755.jpg

步骤2. 新建脚本文件

下载所需文件 ,并将其中的文件解压出来,放到第一步中新建的文件夹内(即:/su/su.d 或 /system/su.d)。

步骤3. 设置文件权限

使用 ES 文件浏览器或其他同类文件选择 permissive.sh,点击属性-权限,将权限设置为rwx r- r-,即:读权限全勾,写权限勾所有者,执行权限勾所有者。

338758.jpg

亦可在终端模拟器中依次执行以下命令:

su
chmod +x /su/su.d/permissive.sh
chmod +x /system/su.d/permissive.sh

至此为止,此方法的所有步骤都已经完成。

如何判断是否已关闭 SELinux

重启手机后,进入「设置 - 关于本机」,找到 SELinux 状态,若为「许可」即关闭成功;或在终端模拟器内输入 getenforce 来获取相关状态。

338761.jpg

扩展阅读: