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

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

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

是的, sudo和内核模式之间的巨大差异。

内核模式与CPU模式有关 。 大多数处理器(尤其是所有运行通用Linux内核,而不是μCLinux的处理器),例如您的笔记本电脑中的英特尔处理器有多种操作模式,至少有两种:特权(或超级用户 )模式,其中所有机器指令都是可能的大多数不安全的,比如那些配置MMU ,禁止中断 ,停止机器,做物理 I / O(即在网络上发送字节,或者在打印机或磁盘上发送字节),以及禁止某些机器指令的用户模式 I / O指令,MMU配置,中断禁止等等)

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

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

sudo只是给一个命令(使用setuid技术)的根权限(即用户ID 0)。 然后,一些更多的系统调用是可能的…但命令(即运行该命令的进程 )仍在用户模式下运行,并使用虚拟内存,并有其地址空间 。

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

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

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

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