sud*_*008 21 unix linux sudo operating-system linux-kernel
在类UNIX系统中,我们有一个用户模式和一个内核模式.有些指令在用户模式下无法访问.但是,当我们这样做时sudo,我们可以访问操作系统的许多关键部分,执行关键操作.
我的问题是:当程序在sudo模式下执行时,整个程序是否以内核模式运行?或者,sudo模式只是一个管理用户,其权力仅仅是内核可以执行的操作的子集?
Bas*_*tch 20
是的,sudo与内核模式之间存在巨大差异.
内核模式与CPU模式有关.大多数处理器(特别是所有处理器都运行一个普通的Linux内核,而不是μCLinux),例如笔记本电脑内的英特尔处理器有多种操作模式,至少有两种:特权(或管理程序)模式,可以使用所有机器指令(包括大多数不安全的,如配置MMU的那些,禁用中断,停止机器,执行物理 I/O,即在网络上发送字节,或打印机或磁盘)以及禁止某些机器指令的用户模式(特别是物理的) I/O指令,MMU配置,中断禁用等...)
在Linux上,只有内核代码(包括内核模块)在内核模式下运行.其他一切都处于用户模式.
应用程序(甚至以root身份运行的命令)在用户模式下执行,并通过系统调用(这是应用程序与内核交互的唯一方式)与Linux内核交互,系统调用(2)中列出.因此,应用程序代码看到一个" 虚拟机 "能够执行系统调用并执行用户模式指令.内核管理身份验证和凭据(请参阅凭据(7)和功能(7) ...)
sudo只是给一个命令(使用setuid技术)root权限(即用户ID 0).然后,一些更多的系统调用是可能的......但是命令(即运行该命令的进程)仍在用户模式下运行并使用虚拟内存并具有其地址空间.
Kev*_*nko 13
没有sudo模式这样的东西.只有用户空间和内核空间.
正如您所说,内核模式可以执行CPU提供的任何指令,并对硬件执行任何操作.用户模式程序可能只访问映射到正在运行的进程的内存,并且阻止它们进行任何直接硬件访问.通过系统调用机制,用户模式程序可以调用内核代码,该内核代码将代表它执行硬件访问并将结果返回到用户空间.
在用户空间中,对非root root用户(作为用户ID号0)有其他限制.例如,他们只能访问某些文件,并且他们只能侦听编号大于1024的TCP端口.运行sudo将以root用户身份启动进程,root用户没有这些限制.
但是以root用户身份运行的进程(via sudo)仍然在用户空间中运行,并且仍然受到所暗示的所有相同限制.