14. 系統保護 (System Protection)

系統保護(System Protection)

1.概述:

作業系統必須提供一些機制(mechanism)來確保系統執行的穩定,這方面又可以分成系統保護(System Protection)及系統安全(System Security)兩個範圍來探討.

而保護及安全最大的不同點在於保護相對而言探討較低階,較靠近硬體層面的問題,像是程式對於資源的存取權(access of programs to the resources),行程對於資源的存取權(access of processes to the resources),使用者對於資源的存取權(access of users to the resources).
而在此處所謂的資源(resources)通常是指檔案(files),記憶體空間(memory segments),和CPU時間.系統安全則是比較注重高階,較靠近使用者的問題,像是加密(encryption),驗證(authentication),攻擊(attacks)手法的判斷及預防.

以另一個角度來看,系統安全通常是防範對系統有意的傷害,系統保護則不只要防範有意的傷害,更要防止意外的發生.

2.保護的目的(Goals of Protection)
隨著現代作業系統越來越複雜,多元程式(multiprogramming)的作業系統通常也連帶著需要更高的保護.

系統保護的目的最主要就是提高可靠度(reliability).我們預期有不可靠的使用者(untrustworthy users),
他們可能故意的違反規則,但也能安全的共享檔案,目錄,或者更廣義的說就是相同實體命名空間(common physical name space).
因此我們需要在作業系統中訂定一些策略(policies),而這些策略通常是可變的隨著時間或者不同的應用.

在此要特別強調,機制(mechanism)跟策略(policies)都是在設計系統保護時相關的主題.
不過最大的不同點是策略只定義了系統保護該做什麼(what),而機制則明確的定義如何做(how).
因為策略通常是可變的,甚至每一個案例都不同.而因此需要不斷修改機制.
但是此處探討一些通用的機制可以來避免隨著策略改變而變更機制.

3.保護的原則(Principles of Protection)
在探討實際做法之前,先來看一些基本的原則.遵循這些原則將使系統保持一致且易懂.
其中最關鍵的就是最少特權原則(principle of least privilege).擁有最少的特權能使發生的傷害降到最低.

因此,現代的作業系統在提供系統呼叫或者服務時,會使用fine-grained access controls,當有需要權限時才開啟,並在不需要時就關閉.
而在管理使用者時使用最少特權原則的實例就是role-based access control (RBAC).對於每個使用者有各自的帳號,並只給予能夠滿足他們工作所需的檔案及指令.

第二個原則就是need-to-know principle,任何行程只能存取經過認證的資源,並且是完成任務所需的最少資源.

4.保護的範圍(Domain of Protection)
在討論保護範圍的同時,先將電腦系統劃分程硬體物件(hardware objects)像是CPU,記憶體,磁碟機等;和軟體物件(software objects)像是檔案,程式,信號(semaphores)等.各個不同的物件有著唯一的名稱並依照特性有不同的操作.因此,開始引進一個保護區(Protection domain)的觀念,每一個行程都只能在設定的保護區中執行.在保護區中定義了存取權 (access right)也就是這些物件(硬體或軟體)能運作的功能.

5.存取矩陣(Access Matrix)

保護模式在觀念上可以把它看成是一個矩陣,稱為存取矩陣(access matrix) 。其中列(row) 表示定義域,而行(column) 則代表處理物件。矩陣內每一個元素,都包含有一些存取權。由於處理物件的名稱已經表示在每一行上,因此在其存取權內,物件的名稱便可以省略不記。對於陣列元素 access(i ,j)所定義的,便是一個行程在定義域Di內,對處理物件Oj所能執行的運作項目。

 

6.以能力基礎的系統(Capability-Based Systems)
7.以程式語言基礎的保護(Language-Based Protection)

(1) 編譯器(Compiler) 為基礎的實行
 只需要做保護簡單的宣稱,而不是以一串對作業系統處理程序的呼叫寫出。
 保護需求的陳述可以與特別的作業系統所提供的設備無關。
 實行的方法不必由子系統的設計者提供。
 一個宣稱的標示很自然,因為存取特權與資料類型的語言觀念息息相關。

(2) Java 的保護
 因為Java的設計是在分散式環境中執行,Java虛擬機器 (或JVM)有許多內建的保護機制。
 Java程式是由類別 (classes) 所組成,每一個類別則是資料欄位和操作這些欄位的函數 (稱為方法,method) 的集合。Java虛擬機器 (Java virtual machine, JVM) 以回應產生此類別例證 (instance ,或object) 的要求。
 Java最新且最有用的特性是對網路上非信任類別的載入,以及在同一JVM中執行互不授信的類別。由於 Java的這些能力,保護是 Java最重要的地方。在同一個JVM執行的類別可能來自不同來源,而且可能有不同的信任度。因此,對於JVM行程強制執行保護是不夠的。
 對於開啟一個檔案的請求是否應該被允許,是取決於到底是那一個行程要求開檔。作業系統是缺乏這方面的資訊。