Linux sudo模式和内核模式之间有区别吗?

Linux sudo模式和内核模式之间有区别吗?,linux,unix,linux-kernel,operating-system,sudo,Linux,Unix,Linux Kernel,Operating System,Sudo,在类UNIX系统中,我们有用户模式和内核模式。有些说明在用户模式下无法访问。然而,当我们做sudo时,我们可以访问操作系统的许多关键部分,执行关键操作 我的问题是:当一个程序在sudo模式下执行时,整个程序是否在内核模式下运行?或者说,sudo模式只是一个管理用户,其权限仅仅是内核可以执行的操作的子集?没有sudo模式。只有用户空间和内核空间 正如您所说,内核模式可以执行CPU提供的任何指令,并对硬件执行任何操作。用户模式程序只能访问映射到正在运行的进程的内存,并且禁止直接访问硬件。通过系统调用

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


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

没有
sudo
模式。只有用户空间和内核空间

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

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


但是作为根用户运行的进程(通过
sudo
)仍然在用户空间中运行,并且仍然受到暗示的所有相同限制。

是的,
sudo
和模式之间存在巨大差异

内核模式与。大多数处理器(尤其是所有运行普通Linux内核的处理器,而不是单一的)例如笔记本电脑中的英特尔处理器都有几种操作模式,至少有两种:特权(或)模式,其中所有机器指令都是可能的(包括最不安全的指令,如配置、禁用、停止机器、执行物理I/O(即在网络上发送字节或发送到打印机或磁盘)以及禁止某些机器指令(特别是物理I/O指令、MMU配置、中断禁用等)的指令。)

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

应用程序(甚至以root用户身份运行的命令)正在用户模式下执行,并通过中列出的(这是应用程序与内核交互的唯一方式)与Linux内核交互。因此,应用程序代码会看到“”能够进行系统调用和执行用户模式指令。内核管理身份验证和凭据(请参阅&…)


sudo
只是简单地给一个命令(使用技术)root权限(即用户id 0)。然后,可能会有更多的系统调用…但是命令(即运行该命令)仍然在用户模式下运行,并使用和拥有它的。

这是管理模式,而不是内核模式。不,作为超级用户运行的用户空间进程仍然是用户空间进程,而不是在内核上下文中运行的进程。但是,超级用户可能有能力更改内核代码,例如,通过请求内核加载模块或修改引导时从中加载内核的存储器。最后,在某些情况下,超级用户可能能够执行将原始硬件或内存暴露给用户空间访问的调用,并且随后可能从用户空间执行一些通常只能从内核空间执行的操作。每个用户空间进程在特定的用户帐户下运行de>root本质上只是另一个用户帐户;它恰好拥有比其他用户帐户更多的权限。root进程仍然在用户空间(或在执行系统调用时在内核空间)中运行。