![行程在用戶態切換到核心態。那麼進程會有root權限嗎?](https://rvso.com/image/52106/%E8%A1%8C%E7%A8%8B%E5%9C%A8%E7%94%A8%E6%88%B6%E6%85%8B%E5%88%87%E6%8F%9B%E5%88%B0%E6%A0%B8%E5%BF%83%E6%85%8B%E3%80%82%E9%82%A3%E9%BA%BC%E9%80%B2%E7%A8%8B%E6%9C%83%E6%9C%89root%E6%AC%8A%E9%99%90%E5%97%8E%EF%BC%9F.png)
根據http://www.linfo.org/kernel_mode.html第 7 段:
當用戶進程透過系統呼叫運行部分內核程式碼時,該進程暫時成為內核進程並處於核心模式。在核心模式下,該進程將擁有root(即管理)權限並且可以存取關鍵系統資源。整個核心不是一個進程,而是進程的控制器,僅在核心模式下執行。當核心滿足進程的請求時,它將進程返回到用戶模式。
我對這條線不太清楚,
在核心模式下,該進程將擁有root(即管理)權限並且可以存取關鍵系統資源。
為什麼不以 root 身分運行的使用者空間進程將擁有 root 權限?它與以 root 身分運行的使用者空間進程有何不同?
答案1
root 和非 root 權限都是與使用者空間相關的東西。例如,root 使用者可以安裝應用程序,而普通使用者則不能。
然而,即使是 root 使用者也有一些限制。這些限制是由作業系統的設計所施加的,它區分了使用者空間和核心空間。例如,即使您是 root 用戶,如果驅動程式未向您提供該選項,您也無法更改硬碟旋轉的速度(您可以編寫一個允許該功能的驅動程序,但即使那麼您就不是直接存取硬件,而是透過驅動程式存取硬體)。
原因是硬體的實際控制都是在核心空間完成的,而用戶空間存取它的方式是透過系統呼叫。核心空間不是使用者的地方:)
為了回答你的問題,它不是獲得root權限的進程,而是切換到核心模式,允許無限制地存取每個系統資源。但是,這種無限制的存取權限僅適用於在核心模式下運行的程式碼,因此您的進程沒有它。它僅使用內核代碼的呼叫。
在核心模式下運行的程式碼對系統的存取完全不受限制。
答案2
(我會盡量簡短。)
理論上,特權有兩個維度:
電腦指令集架構(ISA),它保護機器的某些資訊和/或功能。
這作業系統(作業系統)創建應用程式和通訊的生態系統。其核心是內核,一個可以在 ISA 上運行且沒有任何依賴關係的程式。
今天的作業系統執行許多截然不同的任務,以便我們可以像今天一樣使用電腦。從非常(非常、非常)簡化的角度來看,您可以將核心想像為電腦執行的唯一程式。應用程式、進程和使用者都是作業系統(尤其是核心)所創建的生態系統的產物。
當我們談論相對於作業系統的使用者(空間)權限時,我們談論的是由作業系統管理、授予和執行的權限。例如,限制從特定目錄取得資料的檔案權限是由核心強制執行的。它會查看與文件相關的一些 ID,解釋一些代表權限的位,然後取得資料或拒絕這樣做。
ISA 中的權限層次結構提供了核心用於其目的的工具。具體細節有很大差異,但總的來說有核心模式和使用者模式,其中CPU執行的程式可以非常自由地執行I/O並使用ISA提供的指令。
例如,當讀取將資料寫入特定記憶體位址的指令時,核心模式的CPU可以簡單地將資料寫入特定記憶體位址,而在使用者模式下,它首先執行一些檢查以查看記憶體位址是否在可以寫入資料的允許位址範圍。如果確定該位址不可寫入,通常 ISA 將切換到核心模式並開始執行另一個指令流,則該指令流是核心的一部分,並且它將執行正確的操作(TM)。
這是確保一個程式不會幹擾另一個程式的執行策略的一個範例...以便您目前造訪的網頁上的 JavaScript 無法讓您的網路銀行應用程式執行可疑交易...
請注意,在核心模式下,不會觸發任何其他操作來強制執行正確的操作,假設在核心模式下運行的程式正在執行正確的操作。這就是為什麼在核心模式下沒有任何東西可以強迫程式遵守作業系統生態系統的抽象規則和概念。這就是為什麼在核心模式下運行的程式與 root 用戶一樣強大。
從技術上講,核心模式比僅僅作為作業系統上的 root 用戶要強大得多。