目录:
我们喜欢收到你的问题。 当我们可以互相帮助时,这总是一件好事,我们在寻找答案时自己学习东西。 虽然我们找不到时间来回答所有这些问题,但有时会出现一个问题,值得详细解答。
“根是什么意思?” 是其中一个问题。 对于我们中的一些人来说,这个概念可能很简单,但对于许多没有花时间摆弄Android或任何其他基于权限的操作系统的人来说,可以提出一些问题。 我会尽力尽力回答他们。
权限
在我们定义root之前,了解它存在的原因以及它是如何工作的很重要。 这是因为Android在文件结构中使用权限(确切地说是基于Linux的权限)。 每个文件,每个文件夹和每个分区都有一组权限。 这些权限决定谁可以读取文件(查看或访问内容而不更改它们),写入文件(能够更改该文件的内容,或在文件夹或分区内创建新文件)并执行文件(如果文件是可以运行的类型,则运行该文件,如应用程序)。 这是基于用户和权限完成的 - 某些用户具有访问权限,而没有正确权限的用户则无法访问。
首次设置手机并首次打开手机时,系统会为您分配一个用户ID。 如果其他用户通过Google登录,则会为他们分配 不同的 用户ID。 当您的手机上安装了应用时,它还会分配一个自己的用户ID。 系统本身是用户,需要在手机上运行的其他进程可能拥有自己的用户ID。 对Android上的任何文件都可以执行任何操作的一切都是用户。
用户和权限系统是Android如何跟踪谁可以做什么的。
假设您安装了一个消息传递应用程序。 安装时会为其分配一个用户ID。 它还可以在您自己的数据分区上获得一个位置,只有它可以访问。 您有权执行该应用程序,当应用程序运行时,它有权访问自己的数据文件夹和文件。 该应用还可以请求访问地址簿或SD卡或照片库等内容的权限。 如果您对这些请求说“是”(或者如果您同意旧版Android的权限),则应用程序的用户ID被授予对这些内容的数据文件的权限,这意味着它可以查看数据文件夹及其内容并可能更改他们或添加新文件。 该应用无法访问任何没有“查看”权限的数据文件。 这意味着(在我们的示例中)它不能执行诸如查看设置数据库或访问其他应用程序的数据文件夹之类的操作。 沙箱这个术语通常用于此 - 应用程序是沙盒的,只能在他们有权访问的沙箱中播放。
对于程序和可以运行的文件(如应用程序),适用相同的权限模型。 您的用户ID有权在您登录时运行您安装的应用程序。系统用户有权运行它们,而其他系统级用户可以访问应用程序或应用程序使用的某些进程。 其他应用无法启动他们无权启动的应用。 如果您添加了辅助用户,则他们无权访问您的应用或文件,反之亦然。 手机上有文件,文件夹和应用程序,您的用户ID 无权 查看,更改或运行。 通常Android的那些部分需要系统级权限(系统用户ID)来执行任何操作,并且您不是系统用户或具有系统级权限的用户。
切换权限
虽然技术上可能会改变手机启动的方式以及用于启动正在运行的系统并为用户ID提升权限的文件,但这既不安全也不实用。 但Android(以及大多数基于Unix或Linux的系统)拥有所谓的root用户,并支持SubstituteUser二进制文件(将二进制文件视为小应用程序)来更改用户ID。 这些用于在核心级别管理系统。
因为制作手机的人不希望您轻松访问root用户ID - 并非所有原因都是自私的,因为它也可以保护您和您的私人数据 - 所以SubstituteUser二进制文件不包含在大多数版本的Android系统。 没有SubstituteUser,我们无法切换用户ID。 顺便说一句,Android中的大多数系统级别的东西都有类似的简单名称。 核心安全性(引导加载程序和/或内核本身中的文件)也是以防止您作为SELinux的一部分切换用户ID的方式构建的(安全性 - 增强型Linux - 告诉您名称很简单)内核模块。 一些手机(三星的Knox浮现在脑海中)有进一步的保护,几乎所有制造Androids的公司都要求,为了进行更改,需要解锁引导加载程序,以便可以更改这些文件并允许您切换用户ID 。 有些手机,比如BlackBerry Priv甚至更进一步,如果我们改变任何东西都不会启动(即使我们可以)。
要成为root用户,您需要一种方法来更改您的用户ID。
一旦我们通过所有这些 - 通过通过授权方式解锁引导加载程序或使用某种利用 - 我们可以将SU二进制文件(SubstituteUser)放置在它被调用运行时可以运行的位置 - 这称为PATH。 如果任何应用程序在您的用户ID的PATH中,它将在不告知系统确切位置的情况下运行。 您还需要确保SU二进制文件位于您的用户ID有权执行(运行)文件的位置。 任何其他应用(Google Play都有大量需要root权限的应用)也需要相同的访问权限。 当您使用方法根电话时,所有这些都由构建根方法的人员整理出来。
一旦到位,我们就可以运行SU二进制文件(或者另一个应用程序可以运行SU二进制文件)。
获得root访问权限
这就是root的用武之地.SU二进制文件在运行时使用标志来告诉系统你要切换到的用户ID。 例如,如果我在我的Ubuntu计算机上运行SU二进制文件,就像这个“su Jim -c nano”,我将以用户Jim的身份运行nano命令(在提供Jim的密码之后)。 如果您运行没有标志或参数的SU二进制文件,它会将您切换到root用户。 通常您需要提供密码,但由于“root”是Android上未使用的用户,因此它没有密码。 运行命令“su”将切换到用户root,并为您分配用户ID 0,并将您置于根组中。 你现在是超级用户。
作为超级用户,您可以对Android上的任何文件,文件夹或分区执行任何操作。 无论如何,我们的意思是任何东西。 您可以删除英国媒体报道应用程序,也可以删除打破手机的基本系统文件。 您还可以对硬件执行操作,例如更改CPU频率并永久毁坏您的手机。
Root是超级用户,可以做任何事情。 我们的意思是什么。
应用可以做同样的事情。 SU被放置在应用程序PATH中的位置,任何应用程序都可以调用它并运行它。 该应用程序具有超级用户权限,可以对手机上任何位置的任何文件执行任何操作。 这就是为什么制作手机的人真的不希望你拥有这种级别的访问权限,而且允许你解锁引导加载程序并更改内容的公司仍默认不会在手机上放置SU二进制文件。 拥有root权限无法控制谁或什么可以使用它对您的手机软件和您的个人数据是危险的。
这就是为什么您需要安装一个应用程序,强迫您在您或其他应用程序尝试调用超级用户权限时允许root访问权限。 大多数情况下,当您为手机使用root方法时,将包括一些其他有用的二进制文件,如BusyBox工具集。 如果你手工完成,你需要自己安装一个。 在Google Play中,Chainfire的SuperSU是一个很好的开始。
什物
许多手机和一些root方法做的事情有点不同(Android 4.3带来了很多变化)并且需要脚本或守护进程(你会看到像daemonsu或su.d这样的单词),而不是仅仅删除SU二进制文件。 这些用于调用SubstituteUser,因此您可以像原始二进制方法一样切换到root用户。 了解如何根植手机的人已将所有这些分类,并且在面向用户方面也会如此。
也有可能“临时”一些机器人。 这意味着您可以拥有超级用户权限并执行一些您需要执行的操作,但重新启动会从根访问权限开始。 同样,您可以拥有一个“shell-root”,您只能通过计算机中的adb访问root用户。
最后,我想强调的是,如果你有这些问题,你需要考虑你是否准备好拥有一个扎根的Android。 当我们说使用超级用户访问破坏你的手机很容易,我们不是在开玩笑。 没有理由感到羞耻的是,你需要做一些阅读或者在做一些可能会破坏你的手机或随机使用胭脂应用访问你所有数据的事情之前再问几个问题。
这就是我们的目的。