Sudo模式和内核模式有区别吗?

0tdrvxhp  于 2022-10-17  发布在  Unix
关注(0)|答案(2)|浏览(140)

在类似于Unix的系统中,我们有一个用户模式和一个内核模式。有些指令在用户模式下无法访问。然而,当我们执行sudo时,我们可以访问操作系统的许多关键部分,执行关键操作。
我的问题是:当一个程序在sudo模式下执行时,整个程序是否在内核模式下运行?或者,sudo模式仅仅是一个管理用户,其权限仅仅是内核可以执行的操作的子集?

72qzrwbm

72qzrwbm1#

是的,sudokernel模式有很大的不同。
内核模式与CPU modes相关。大多数处理器(特别是所有处理器都运行通用的Linux内核,而不是µCLinux内核),例如您笔记本电脑中的英特尔处理器有几种操作模式,至少有两种:特权(或管理)模式,其中所有机器指令都是可能的(包括最不安全的指令,如配置MMU、禁用interrupts、停止机器、执行物理I/O,即在网络上或向打印机或磁盘发送字节)和user mode模式,其中禁止某些机器指令(特别是物理I/O指令、MMU配置、中断禁用等)。
在Linux上,只有内核代码(包括内核模块)在内核模式下运行。其他一切都处于用户模式。
应用程序(甚至是以根用户身份运行的命令)在用户模式下执行,并通过syscalls(2)中列出的system calls(这是应用程序与内核交互的唯一方式)与Linux内核交互。因此,应用程序代码看到一个能够执行系统调用和执行用户模式指令的“virtual machine”。内核管理身份验证和凭据(参见credentials(7)capabilities(7)...)
sudo只是(使用setuid技术)向命令提供根用户(即用户id 0)的权限。然后,更多的系统调用是可能的..。但该命令(即运行该命令的process)仍在用户模式下运行,并使用virtual memory并具有其address space

xwbd5t1u

xwbd5t1u2#

没有sudo模式这回事。只有用户空间和内核空间。
正如您所说,内核模式可以执行CPU提供的任何指令,并对硬件执行任何操作。用户模式程序只能访问Map到运行进程的内存,并且它们被阻止进行任何直接硬件访问。通过系统调用机制,用户模式程序可以调用内核代码,内核代码将代表其执行硬件访问,并将结果返回到用户空间。
在用户空间中,对非根用户(root是用户ID号0)有其他限制。例如,它们只能访问某些文件,并且只能侦听编号大于1024的TCP端口。运行sudo将以根用户身份启动一个进程,该用户没有实施这些限制。
但是作为根用户(通过sudo)运行的进程仍然在用户空间中运行,并且仍然受到所有相同的限制。

相关问题