Answers:
首先,澄清一下:
它需要具有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用户身份运行的用户空间进程仍然只能访问内核向其公开的内核模式功能。