如果一個計算機系統有多個使用者,並且允許多個進程並行執行,那麼資料存取應當加以控制。為此,可以通過機制確保只有經過作業系統授權,進程才可使用相應資源,如檔案、記憶體、CPU 及其他資源。
例如,記憶體定址硬體確保一個進程僅可在自己的地址空間內執行,定時器確保沒有進程可以一直佔用 CPU 而不釋放它。裝置控制暫存器不能被使用者存取,因而保護了各種外圍裝置的完整性。
因此,
保護(protection)是一種機制,用於控制進程或使用者存取計算機系統的資源。這種機制必須提供手段,以便指定控制和實施控制。
通過檢測元件子系統之間介面的差錯隱患,保護可以提高可靠性。介面錯誤的早期檢測通常能夠防止已發生故障的子系統影響其他正常的子系統。一個未受保護的資源無法抵禦未授權的或不勝任的使用者使用(或誤用)。支援保護的系統提供手段,以便辨別授權使用和未授權使用,後續章節將會討論相關內容。
一個系統可以擁有足夠的保護,但是仍然容易出錯和發生不當存取。例如,現有一個認證(向系統標識自己的手段)資訊被盜的使用者,他的資料可能被複製或刪除,儘管檔案和記憶體的保護仍在繼續。防止系統不受外部或內部的攻擊是安全(security)的工作。這些攻擊的範圍很廣,如病毒和蠕蟲、拒絕服務攻擊(用盡所有系統資源以致合法使用者無法使用)、身份偷竊、服務偷竊(未授權的系統使用)等。為阻止這些攻擊,有些系統讓作業系統來完成,其他系統讓策略或額外軟體來完成。隨著安全事件的急劇增長,作業系統安全問題的研發發展迅猛。
保護和安全要求系統能夠區分所有使用者。大多數的作業系統採用一個列表,以便維護使用者名稱稱及其關聯使用者標識(UserlD,UID)。按照 Windows 的說法,這稱為安全舊(Secure ID, SID)。這些數位 ID 對每個使用者來說是唯一的,當一個使用者登入到系統時,認證階段確定使用者的合適 ID。該使用者 ID 與所有該使用者的進程和執行緒相關聯。當該 ID 需要為使用者可讀時,它就會通過使用者名稱稱列表而轉換成使用者名稱稱。
有些環境希望區分使用者集合而非單個使用者。例如,UNIX 系統的某個檔案的所有者可對檔案進行所有操作,而有些選定的使用者集合只能讀取檔案。為此,需要定義一個組名稱以及屬於該組的使用者集。組功能的實現可以採用一個系統級的列表,以維護組名稱和組標識(group identifier)。一個使用者可以屬於一個或多個組,這取決於作業系統的設計決策。使用者的組 ID 也包含在每個相關的進程和執行緒中。
對於正常系統使用,使用者 ID 和組 ID 就足夠了。不過,使用者有時需要升級特權(escalate privilege),來獲得某個活動的額外許可。例如,使用者可能需要存取某個受限裝置。作業系統提供多種方法,允許升級特權。例如,在 UNIX 系統中,程式的 setuid 屬性允許按程式檔案所有者的使用者 ID 而不是當前的使用者 ID 來執行該程式,該進程會按有效 UID(effective UID)執行,直至它關掉額外特權或終止。