根和内核之间是什么关系?[关闭]


8

根据此问题的第一个答案的一部分:

从文件读取(内核必须检查权限是否允许您从所述文件读取,然后内核执行对磁盘的实际指令以读取文件)

它需要具有root特权才能更改对文件的权限。使用root特权,用户可以访问任何文件而无需担心权限。那么,根和内核之间是否存在任何关系?


问题太模糊/不清楚,无法回答。
psusi 2014年

这个问题实际上涉及几件事。可能需要阅读有关系统调用特权特权级别的信息。我不知道如何更好地表达这个问题。史蒂文·D不知何故明白我的意思。
罗恩·文斯

Answers:


13

首先,澄清一下:

它需要具有root特权才能更改对文件的权限。

man 2 chmod中我们可以看到,如果满足以下条件,则chmod()系统调用将返回EPERM(权限错误):

有效的UID与文件的所有者不匹配,并且该进程没有特权(Linux:它不具有CAP_FOWNER功能)。

这通常意味着你要么需要在文件或root用户的所有者。但是我们可以看到Linux的情况可能会更加复杂。

那么,根和内核之间是否存在任何关系?

正如您引用的文本所指出的那样,内核负责检查是否允许进行系统调用的进程的UID(即,以其运行方式运行的用户)执行所要求的操作。因此,root的超级能力来自以下事实:内核已被编程为始终允许root用户请求的操作(UID = 0)。

对于Linux,大多数发生的各种权限检查都会检查给定的UID是否具有必要的功能。功能系统允许对谁被允许执行操作进行更细粒度的控制。

但是,为了保留“ root”用户的传统UNIX含义,使用UID 0执行的进程具有所有功能。

请注意,虽然以UID = 0运行的进程具有超级用户特权,但它们仍必须通过系统调用接口向内核发出请求。

因此,即使以root身份运行,用户空间进程也仍然受到限制,因为它在“ 用户模式运行,而内核在“ 内核模式运行,这实际上是CPU本身的不同运行模式。在内核模式下,进程可以访问任何内存或发出任何指令。在用户模式下(在x86 CPU上实际上有许多不同的保护模式),一个进程只能访问其自己的内存,并且只能发出一些指令。因此,以root用户身份运行的用户空间进程仍然只能访问内核向其公开的内核模式功能。


我们应该说root或UID = 0拥有内核级特权吗?还是内核对根应用了任何限制?
罗恩·文斯

以UID = 0运行的进程具有超级用户特权;但是,它们仍然通过系统调用接口向内核发出请求。用户空间进程,即使以root用户身份运行,仍然受其功能的限制,因为它在“用户模式”下运行,而内核在“内核模式”下运行,而这实际上是CPU本身的不同运行模式。以root用户身份运行的用户空间进程仍然只能访问内核公开给它的内核模式功能。有关更多信息,请参见linfo.org/kernel_mode.html
2014年

我已经通过一些链接将我的赞扬添加到了答案中。
史蒂文D

您对Unix书籍有什么建议吗?
罗恩·文斯

哦..谢谢你告诉我。我仍在根据给出的答案进行文献综述。他们指出了想法和文献资料,但我还不确定要确定这些答案的对与错。
罗恩·文斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.