Linux 權限 UID 0 與 Ring 0

Linux 權限 UID 0 與 Ring 0

我正在準備電腦安全考試,我正在努力理解以下範例問題。

'解釋一下在 x86 上的 Ring 0 中運行和在 Linux 中以 UID 0 運行之間的區別。舉一個例子,說明其中一個可以實現,但另一個不能實現的功能。'

我目前的理解是,x86 上的 Ring 0 是最高特權的作業系統級別,核心程式碼在 Ring 0 中運行。以我目前對這些概念的理解,我不知道該如何回答這個問題。

請注意,這不是作業問題,也不是我評分的依據,它只是學習材料。

答案1

你的理解是正確的。 「Ring 0」是 x86 術語,表示處理器的核心模式。 「運行在ring 0」的意思是「核心程式碼」。

在安全性方面,進程(在任何UID下)可以完成的所有事情都可以由核心完成。有些事情從核心程式碼中做起來非常不方便,例如打開文件,但它們是可能的。

相反,在正常情況下,如果你可以在UID 0下運行程式碼,那麼你可以透過載入核心模組來運行核心程式碼。因此,在典型配置下,UID 0 和核心層級之間不存在安全屏障。然而,在進程中運行的程式碼仍然受到處理器用戶模式的限制:對外圍設備(包括磁碟、網路等)的每次存取仍然必須透過系統呼叫。電腦可以配置為具有不強大的 UID 0,例如:

  • 禁用內核模組的載入。
  • 用一個安全框架例如SELinux從流程中剝奪特權:UID 0 不一定能勝過這些,例如,可以使用 UID 0 建立來賓帳戶,但使用正確的 SELinux 策略基本上沒有特權。
  • UID 0 在使用者命名空間僅具有命名空間創建者的權限。

相關內容