进程在用户态切换到内核态。那么进程会有root权限吗?

进程在用户态切换到内核态。那么进程会有root权限吗?

根据http://www.linfo.org/kernel_mode.html第 7 段:

当用户进程通过系统调用运行部分内核代码时,该进程暂时成为内核进程并处于内核模式。在内核模式下,该进程将拥有root(即管理)权限并可以访问关键系统资源。整个内核不是一个进程,而是进程的控制器,仅在内核模式下执行。当内核满足进程的请求时,它将进程返回到用户模式。

我对这条线不太清楚,

在内核模式下,该进程将拥有root(即管理)权限并可以访问关键系统资源。

为什么不以 root 身份运行的用户空间进程将拥有 root 权限?它与以 root 身份运行的用户空间进程有何不同?

答案1

root 和非 root 权限都是与用户空间相关的东西。例如,root 用户可以安装应用程序,而普通用户则不能。

然而,即使是 root 用户也有一些限制。这些限制是由操作系统的设计所施加的,它区分了用户空间和内核空间。例如,即使您是 root 用户,如果驱动程序未向您提供该选项,您也无法更改硬盘旋转的速度(您可以编写一个允许该功能的驱动程序,但即使那么您就不是直接访问硬件,而是通过驱动程序访问硬件)。

原因是硬件的实际控制都是在内核空间完成的,而用户空间访问它的方式是通过系统调用。内核空间不是用户的地方:)

为了回答你的问题,它不是获得root权限的进程,而是切换到内核模式,允许无限制地访问每个系统资源。但是,这种无限制的访问权限仅适用于在内核模式下运行的代码,因此您的进程没有它。它仅使用内核代码的调用。

运行在内核模式下的代码对系统的访问完全不受限制。

答案2

(我会尽量简短。)

理论上,特权有两个维度:

  • 计算机指令集架构(ISA),它保护机器的某些信息和/或功能。

  • 操作系统(操作系统)创建应用程序和通信的生态系统。其核心是内核,一个可以在 ISA 上运行且没有任何依赖关系的程序。

今天的操作系统执行许多截然不同的任务,以便我们可以像今天一样使用计算机。从非常(非常、非常)简化的角度来看,您可以将内核想象为计算机执行的唯一程序。应用程序、进程和用户都是操作系统(尤其是内核)创建的生态系统的产物。

当我们谈论相对于操作系统的用户(空间)权限时,我们谈论的是由操作系统管理、授予和执行的权限。例如,限制从特定目录获取数据的文件权限是由内核强制执行的。它查看与文件相关的一些 ID,解释一些代表权限的位,然后获取数据或拒绝这样做。

ISA 中的权限层次结构提供了内核用于其目的的工具。具体细节有很大差异,但总的来说有内核模式和用户模式,其中CPU执行的程序可以非常自由地执行I/O并使用ISA提供的指令。受到限制。

例如,当读取将数据写入特定内存地址的指令时,内核模式下的CPU可以简单地将数据写入特定内存地址,而在用户模式下,它首先执行一些检查以查看内存地址是否在可以写入数据的允许地址范围。如果确定该地址不可写入,通常 ISA 将切换到内核模式并开始执行另一个指令流,该指令流是内核的一部分,并且它将执行正确的操作(TM)。

这是确保一个程序不会干扰另一个程序的执行策略的一个示例...以便您当前访问的网页上的 JavaScript 无法使您的网上银行应用程序执行可疑交易...

请注意,在内核模式下,不会触发任何其他操作来强制执行正确的操作,假设在内核模式下运行的程序正在执行正确的操作。这就是为什么在内核模式下没有任何东西可以强迫程序遵守操作系统生态系统的抽象规则和概念。这就是为什么在内核模式下运行的程序与 root 用户一样强大。

从技术上讲,内核模式比仅仅作为操作系统上的 root 用户要强大得多。

相关内容