使用者模式下的程序切換到核心模式。那麼程序會有root權限嗎?
根據第 7 段中的http://www.linfo.org/kernel_mode.html :
當使用者程序通過系統呼叫執行部分核心程式碼時,該程序暫時成為核心程序並處於核心模式。在核心模式下,該程序將擁有root(即管理)權限和對關鍵系統資源的訪問權。整個核心,它不是一個程序,而是一個程序的控制器,只在核心模式下執行。當核心滿足程序的請求時,它會將程序返回到使用者模式。
我不清楚這條線,
在核心模式下,該程序將擁有root(即管理)權限和對關鍵系統資源的訪問權。
不是以root身份執行的使用者空間程序怎麼會有root權限?它與以 root 身份執行的使用者空間程序有何不同?
(我會盡量簡短。)
理論上,特權有兩個維度:
- 電腦的指令集架構(ISA),它保護機器的某些資訊和/或功能。
- 作業系統( OS) 為應用程序和通信創建生態系統。它的核心是核心,一個可以在 ISA 上執行而沒有任何依賴關係的程序。
今天的作業系統執行許多非常不同的任務,因此我們可以像今天一樣使用電腦。在非常(非常,非常)簡化的視圖中,您可以將核心想像為電腦執行的唯一程序。應用程序、程序和使用者都是作業系統特別是核心創建的生態系統的產物。
當我們談論與作業系統相關的使用者(空間)權限時,我們談論的是由作業系統管理、授予和強制執行的權限。例如,限制從特定目錄獲取數據的文件權限是由核心強制執行的。它查看與文件關聯的一些 ID,解釋一些代表特權的位,然後獲取數據或拒絕這樣做。
ISA 中的權限層次結構提供了核心用於其目的的工具。具體細節差異很大,但一般來說有核心模式,其中 CPU 執行的程序可以非常自由地執行 I/O 並使用 ISA 提供的指令和使用者模式,其中 I/O 和指令是約束。
例如,當讀取指令以將數據寫入特定記憶體地址時,核心模式下的 CPU 可以簡單地將數據寫入特定記憶體地址,而在使用者模式下,它首先執行一些檢查以查看記憶體地址是否在允許寫入數據的地址範圍。如果確定該地址可能不會被寫入,通常情況下,ISA 將切換到核心模式並開始執行另一個指令流,這是核心的一部分,它會做正確的事情(TM)。
這是確保一個程序不干擾另一個程序的執行策略的一個範例……因此,您目前訪問的網頁上的 javascript 無法使您的網上銀行應用程序執行可疑交易……
請注意,在核心模式下,不會觸發其他任何事情來強制執行正確的事情,假設在核心模式下執行的程序正在做正確的事情。這就是為什麼在核心模式下,沒有什麼可以強製程序遵守作業系統生態系統的抽象規則和概念。這就是為什麼在核心模式下執行的程序與 root 使用者一樣強大的原因。
從技術上講,核心模式比僅僅作為作業系統上的 root 使用者強大得多。
root 和非 root 權限都是與使用者空間相關的東西。例如,root 使用者可以安裝應用程序,而普通使用者不能。
但是,即使是 root 使用者也有一些限制。這些限制是由作業系統的設計強加的,確實區分了使用者空間和核心空間。例如,即使您是 root 使用者,如果沒有通過驅動程序向您提供該選項,您也無法更改硬碟旋轉的速度(您可以編寫允許該功能的驅動程序,但即使那麼您不是直接訪問硬體,而是通過驅動程序訪問)。
原因是硬體的實際控制都是在核心空間中完成的,而使用者空間訪問它的方式是通過系統呼叫。核心空間不是使用者的地方:)
要回答您的問題,它不是獲得 root 權限的程序,而是切換到允許無限制訪問每個系統資源的核心模式。但是,這種無限制訪問僅適用於在核心模式下執行的程式碼,因此您的程序沒有它。它只使用核心程式碼的呼叫。
在核心模式下執行的程式碼可以完全不受限制地訪問系統。