根和內核之間是什麼關係?

根和內核之間是什麼關係?

基於第一個答案的部分內容這個問題:

從檔案讀取(核心必須檢查權限是否允許您從該檔案讀取,然後核心對磁碟執行實際指令以讀取該檔案)

它需要具有 root 權限才能更改檔案的權限。憑藉 root 權限,使用者可以存取任何文件,而無需擔心權限問題。那麼,root 和 kernel 有什麼關係嗎?

答案1

首先澄清一下:

它需要具有 root 權限才能更改檔案的權限。

人 2 chmod我們可以看到,如果滿足以下條件,chmod() 系統呼叫將傳回 EPERM(權限錯誤):

有效 UID 與檔案擁有者不匹配,且該進程沒有特權(Linux:它沒有 CAP_FOWNER 功能)。

這通常意味著您任何一個需要是文件的擁有者或 root 使用者。但我們可以看到Linux中的情況可能會更複雜一些。

那麼,root 和 kernel 有什麼關係嗎?

正如您引用的文本所指出的那樣,核心負責檢查進行系統呼叫的進程(即運行它的用戶)的 UID 是否允許執行它所要求的操作。因此,root 的超能力來自於這樣一個事實:核心已被編程為始終允許 root 使用者 (UID=0) 請求的操作。

對於 Linux,大多數發生的各種權限檢查都會檢查給定的 UID 是否具有必要的權限能力。能力系統可以更細緻地控制誰可以做什麼。

然而,為了保留「root」使用者的傳統 UNIX 意義,以 UID 0 執行的進程具有所有功能。

請注意,雖然以 UID=0 運行的進程具有超級使用者權限,但它們仍然必須透過系統呼叫介面向核心發出請求。

因此,用戶空間進程,即使以 root 身份運行,它的功能仍然受到限制,因為它運行在“使用者模式“並且內核正在運行”核心模式「這實際上是CPU本身不同的操作模式。在核心模式下,進程可以存取任何記憶體或發出任何指令。在用戶模式下(在x86 CPU上實際上有許多不同的保護模式),進程只能訪問它擁有自己的內存,並且只能發出一些指令,因此以root 身份運行的用戶空間進程仍然只能訪問內核向其公開的內核模式功能。

相關內容