默认情况下,设备的用户无权访问某些root
对象(例如/data
目录)。然而,尽管这些物体是禁止进入的,但在我看来,这些物体的存在是有原因的;最终运行以访问这些对象的某个进程root
,否则它们为什么会存在。
但我对 UNIX 和 Android 的经验很少,想问一下:用户可以root
在尚未“root”的 Android 设备上运行吗?在什么情况下进程可以发起root
级操作? (例如操作系统更新?)。root
在所有情况下都必须提供密码吗?
虽然我会尝试自己回答这个问题,但“UNIX”和“Android”的所有内容看起来都需要阅读很多内容,而且我不确定在哪里可以找到我的具体问题的答案。
答案1
某些程序和服务从 Android 上的 /system 运行,以 root 身份运行 - 一些 root 技术涉及注入命令以重新挂载 /system 到这些“程序”中。如果 /system 不以 rw 方式挂载,则添加的程序无法以 root 身份运行。就 /data 而言,每个应用程序都被赋予了自己的用户 ID,并且存储应用程序数据的 /data/data 文件夹被赋予了权限,以便仅允许该用户进行任何访问(基本上是 chmod 700)。当然,需要一个根级进程来创建它,这又是从 /system 运行的。
答案2
您的第一个假设不一定正确,因为"objects"
或更准确地说,文件或可执行文件可以拥有这些权限,这样普通用户/进程就无法执行或读取它们,但话虽这么说,Android 手机上有多个进程正在运行拥有root
特权。
我认为了解 Android 只是底层的 Linux 系统非常重要,即您在手机上看到的所有内容与 Ubuntu 或 Fedora 等 Linux 系统没有太多共同点,即您不能像root
大多数操作系统那样只运行命令安装在真实硬件上的库存 Android 映像。也根本不需要输入root
密码(据我所知 Android 没有设置 root 密码),因为 Android 不是一个多用户系统。
由于您的手机上已经有普通用户,因此可能会利用/攻击系统本身来获得 root 权限,例如,对于 2.1 等较旧的 Android 系统,这已成功完成。
我认为你应该看看如何获取 Android 设备的 root 权限问题,它可能有助于简化和解释一些事情。
答案3
root 设备意味着能够以 root 身份运行任意程序。因此根据定义,如果计算机没有 root,则无法以 root 身份运行程序。 Android 设备上有一些程序以 root 身份运行。但你无法控制他们的行为。
Android 不是 UNIX 操作系统。内核与Linux相同,但其余部分不同。就内核而言,以root身份运行程序只有三种方式:
- 它可以由内核直接调用。当内核完成启动后,它会
init
以 root 身份调用该程序。连接设备还可能导致内核在某些配置中以 root 身份运行程序。 - 它可以由本身以 root 身份运行的程序调用。
- 它可能是一个设定值属于 root 的可执行文件。
在 UNIX 系统上,诸如su
和 之类的程序sudo
是 setuid root。它们可以由任何用户调用,并决定(根据谁调用它们、输入什么密码等)是否以 root 身份运行 shell 或其他程序或返回错误状态。执行授权的是这些程序,而不是内核。内核只处理数字用户 ID,不处理用户帐户和密码。
标准的Android系统没有任何用户帐户(用户ID用于隔离应用程序,而不是隔离用户)。它不使用unix意义上的基于密码的授权(它可以使用PIN或其他身份验证方法来验证系统的唯一用户)。 root Android 设备意味着安排某个 shell 以 root 身份运行,通常是为了adb shell
给您一个以 root 身份运行的 shell。由于该设备只有一个用户,因此仍然没有 root 密码。