相信我派的读者里不缺喜欢折腾 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 虽然使用简单,但是在一定几率下可能会不起作用。
一劳永逸:脚本+终端模拟器
相信许多同学的强迫症也不能容许手机里多一个日常不会用到的 App。那么,也许你需要的是一个更 Geek 向的解决方法!
此方法仅适用于使用 SuperSU 的用户,如果你正在使用 Kingroot ,可以用 SuperSU Me 来替换权限管理工具。
步骤1. 判断目前你的 Root 状态
系统版本 < 6.0;或系统版本 > 6.0 且根目录下不存在 /su 目录
此时,在 /system
目录下新建 su.d
目录;若已存在此目录,则不需要新建。
注意:su.d
中间的「.」点必须是英文半角点,且中间不能有空格,下同。
系统版本 > 6.0,且根目录下有 /su 目录
此时,在 /su
目录下新建 su.d
目录;若已存在此目录,则不需要新建。
步骤2. 新建脚本文件
下载所需文件 ,并将其中的文件解压出来,放到第一步中新建的文件夹内(即:/su/su.d
或 /system/su.d
)。
步骤3. 设置文件权限
使用 ES 文件浏览器或其他同类文件选择 permissive.sh
,点击属性-权限,将权限设置为rwx r- r-
,即:读权限全勾,写权限勾所有者,执行权限勾所有者。
亦可在终端模拟器中依次执行以下命令:
su
chmod +x /su/su.d/permissive.sh
chmod +x /system/su.d/permissive.sh
至此为止,此方法的所有步骤都已经完成。
如何判断是否已关闭 SELinux
重启手机后,进入「设置 - 关于本机」,找到 SELinux 状态,若为「许可」即关闭成功;或在终端模拟器内输入 getenforce
来获取相关状态。
扩展阅读: