【问题标题】:Is there a difference between sudo mode and kernel mode?sudo 模式和内核模式有区别吗?
【发布时间】:2014-03-12 17:47:31
【问题描述】:

在类似 UNIX 的系统中,我们有用户模式和内核模式。有些指令在用户模式下无法访问。但是,当我们执行sudo 时,我们可以访问我们操作系统的许多关键部分,执行关键操作。

我的问题是:当一个程序在sudo模式下执行时,整个程序是在内核模式下运行的吗?还是sudo 模式只是一个管理用户,其权限只是内核可以执行的操作的子集?

【问题讨论】:

  • 这是管理员模式,不是内核模式。
  • 不,以超级用户身份运行的用户空间进程仍然是用户空间进程,而不是在内核上下文中运行的东西。但是,超级用户可能具有更改内核代码的能力,例如通过要求内核加载模块或修改启动时加载内核的存储。最后,在某些情况下,超级用户可能能够执行将原始硬件或内存暴露给用户空间访问的调用,然后可能从用户空间做一些通常只能从内核空间完成的事情。
  • 每个用户空间进程都在特定的用户帐户下运行。 root 本质上只是另一个用户帐户;它恰好比其他用户帐户拥有更多权限。根进程仍然在用户空间(或执行系统调用时在内核空间)运行。

标签: linux unix linux-kernel operating-system sudo


【解决方案1】:

是的,sudokernel 模式之间的巨大差异。

内核模式与CPU modes 相关。大多数处理器(特别是所有处理器都运行一个通用的 Linux 内核,而不是 µCLinux 一个),例如您的笔记本电脑中的 Intel 处理器有多种操作模式,至少有两种:特权(或 supervisor)模式,所有 machine 指令都是可能的(包括最不安全的,例如配置 @ (特别是物理 I/O 指令、MMU 配置、中断禁用等...)

在 Linux 上,只有内核代码(包括内核模块)在内核模式下运行。 其他一切都处于用户模式。

应用程序(甚至以 root 身份运行的命令)在用户模式下执行,并通过system calls 与 Linux 内核交互(这是应用程序与内核交互的唯一方式)在syscalls(2) 中列出。所以应用程序代码看到一个“virtual machine”能够进行系统调用和执行用户模式指令。内核管理身份验证和凭据(参见credentials(7) & capabilities(7) ...)

sudo 只是给一个命令(使用setuid 技术)root 权限(即用户 id 0)。然后,可以进行更多的系统调用...但是该命令(即运行该命令的process)仍在用户模式下运行,并使用virtual memory 并具有其address space

【讨论】:

    【解决方案2】:

    没有sudo 模式这样的东西。只有用户空间和内核空间。

    正如您所说,内核模式可以执行 CPU 提供的任何指令并对硬件执行任何操作。用户模式程序只能访问映射到正在运行的进程的内存,并且它们被阻止任何直接的硬件访问。通过系统调用机制,用户态程序可以调用内核代码,内核代码将代表它执行硬件访问并将结果返回给用户空间。

    在用户空间中,对非 root 用户有额外的限制(root 是用户 ID 号 0)。例如,他们只能访问某些文件,并且只能监听编号为 1024 以上的 TCP 端口。运行sudo 将以 root 用户身份启动一个进程,该用户没有这些限制。

    但是以 root 用户身份运行的进程(通过sudo)仍然在用户空间中运行,并且仍然受到所有相同的限制。

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 2017-03-05
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多