Chainfire还计划发布一个基于ZIP的自动补丁工具

导读 到目前为止,如果你想在安卓5 0上扎根,需要将修改后的内核刷新到设备上,解决一些SELinux的限制。XDA公认的高级开发人员Chainfire最近发布

到目前为止,如果你想在安卓5.0上扎根,需要将修改后的内核刷新到设备上,解决一些SELinux的限制。XDA公认的高级开发人员Chainfire最近发布了以前必需的CF-Auto-Root软件包,该软件包经过必要的内核ramdisk修改,从AOSP的install-recovery.sh脚本中删除了SELinux限制。然而,今天早上,链火在许多人的脸上微笑,因为他在推特上宣布他不再需要这样做。

直到今天,Chainfire还计划发布一个基于zip的自动修补工具来自动修补TWRP恢复的内核映像,直到他找到合适的方法来消除这一要求。

这一发现意味着安卓5.0用户不再需要运行修改后的内核就可以通过SuperSU(或其他根解决方案)获得根访问权限。虽然这在带有不可解锁引导加载程序的Nexus设备上不是什么大问题,但对于很多没有可以解锁设备的引导加载程序的用户来说,ramdisk需要修改(是的,它确实存在)。他们祈祷的答案现在就在这里,我们可以对所需的改变给出独家解释。至少到目前为止(直到/除非谷歌修复这一点),有可能获得root访问权限,然后在现有的安卓5.0设备上安装并使用SuperSU,而无需任何内核ramdisk调整。原因是SuperSU需要以root身份运行服务,以允许在SELinux保护的设备上不受限制的root访问。

以前,SuperSU将使用预装的AOSP flash_recovery服务(在OTSP安装后用于AOSP的更新恢复)来启动SuperSU守护程序(它实际上为请求它的应用程序提供根权限)。随着棒棒糖的发布,该服务被添加到受限的SELinux上下文中,这意味着它不再拥有对系统的纯访问权限。之前对的内核修改试图从此脚本中删除SELinux限制。

最新的SuperSU beta版Chainfire通过使用核心的“合子”服务解决了这个问题,该服务负责启动所有Java服务,从而启动设备上安装的所有应用程序。由于合子是安卓L上唯一可用的服务之一,在无限制的“初始”SELinux上下文中作为根启动,这使得它成为SuperSU操作中的主要目标。引导时,合子服务将其SELinux“init”上下文转换为最终(受限的)“合子”上下文。Chainfire已经成功修改了合子文件,使其在不受限制的“初始”上下文中以根用户身份运行代码,从而在不修改内核的情况下将SuperSU带回AndroidL。

这不是链火第一次寻求合子来解决这些问题。早期的2.23测试版使用Zygote作为规避其他SELinux问题的手段(这导致了root应用程序在Android L上崩溃)。这允许一些(但不是所有)不可操作的应用程序正常工作——其他应用程序需要开发人员进行一些更新。不幸的是,在查阅5.0 AOSP代码时,我发现谷歌已经打破了这种接管合子服务的方法。由于他之前所有接管合子的尝试都以失败告终,这是一个令人鼓舞的进步。

Chainfire急切地指出,SuperSU已经能够在运行的系统上修改SELinux策略很长时间了(并警告OEM SELinux策略可以轻松禁用,真正防止有意义且简单的根访问),以及如何进行任何修改。由于服务在不同的上下文中为不同的任务运行,所以合子必须小心制作,这增加了许多(令人讨厌的)小错误的可能性。这款全新的SuperSU beta 2.27是发烧友和其他技术人员可以用来找出问题所在的版本。手指交叉-没有意外的显示阻塞错误,这是一个可行的方法。

请注意——即使这个Beta版本成功了,而Zygote是获得root访问权限的首选方式,展望未来,整个过程也不会被只有一步之遥的Google破坏,这会让打了补丁的内核ramdisks成为root用户的未来。在Android上访问(因此不包括被引导加载程序锁定的设备根目录)。的确,作为一个一对一的人,因为SELinux在过去几个月中做出了相当大的改变,新的流程甚至可能不会在最新的AOSP构建中运行,但这些改变并不包含在零售设备中,但无疑将在未来的版本中发布。看来,修改后的内核ramdisk迟早是root所必需的,但在我们必须朝着这个方向前进之前,这个新的beta版可能会缩短执行时间。