Linux
Linux 權限 UID 0 與 Ring 0
我正在為電腦安全考試而學習,並且我很難理解以下範例問題。
‘解釋在 x86 上在 ring 0 中執行和在 Linux 中作為 UID 0 執行之間的區別。舉一個例子,說明每個人都可以實現,但另一個人不能。’
我目前的理解是 x86 上的 ring 0 是最高特權的作業系統級別,核心程式碼在 ring 0 中執行。UID 0 是基本上可以執行任何東西的 linux 超級使用者。以我目前對這些概念的理解,我不明白如何回答這個問題。
請注意,這不是一個家庭作業問題,也不是我要評分的東西,它只是學習材料。
你的理解是正確的。“Ring 0”是處理器核心模式的 x86 術語。“Running in ring 0”的意思是“核心程式碼”。
在安全性方面,一個程序(在任何 UID 下)可以完成的所有事情都可以由核心完成。有些事情從核心程式碼中做起來很不方便,例如打開一個文件,但它們是可能的。
相反,在正常情況下,如果你可以執行 UID 0 下的程式碼,那麼你可以通過載入核心模組來執行核心程式碼。因此,在典型配置下,UID 0 和核心級別之間沒有安全屏障。然而,在程序中執行的程式碼仍然受到處理器使用者模式的限制:對外圍設備(包括磁碟、網路等)的每次訪問仍然必須通過系統呼叫。可以將機器配置為具有並非全能的 UID 0,例如:
- 禁用核心模組的載入。
- 使用諸如SELinux之類的安全框架從程序中獲取權限:UID 0 不一定勝過那些,例如,可以使用 UID 0 創建一個訪客帳戶,但在正確的 SELinux 策略下基本上沒有權限。
- 使用者命名空間中的 UID 0僅具有命名空間創建者的權限。