即便操做系統擁有再強壯的內核和再安全的用戶應用,若是一開始沒有把好關,那形成的損失要比一個不安全的內核更大,試想,國家安全局確定是再安全不過了,可是若是一個反動組織控制了國家安全局,那麼國安局將變成一個十分危險的地方,它將會給人民帶來災難。linux
在操做系統的意義上就是要提供一條所謂安全的路徑,該路徑的一端是用戶,另外一端是絕對可信的可信計算基(TCB),而安全原則促使這個可信路徑實現成爲一個能夠保證不會有任何實體監控和篡改信息的機制。任何須要安全的機構都須要這麼作,操做系統固然須要安全,之因此提供一條安全路徑是由於內核不能保證每一個用戶都是好人或者即便都是好人也不能保證用戶對安全很在乎,這樣其實能夠卸下用戶的不少負擔。操做系統原理上說只有內核在系統中是可信軟件,對於在intel的保護模式上運行的系統來講就是在0環運行的程序是可信,其實就是內核,而全部的用戶空間的程序都是不能保證安全的,也就是不可信的,如此一來,即便經銷商宣稱再安全的用戶應用,操做系統也不會認爲就是安全的,操做系統爲了提供給用戶一個單點進入的鑰匙,就利用了可信路徑,注意單點進入很重要,這樣對於驗證更加有效,大廈是安全的,安保十分不錯,可是必須在嘉賓進入大廈的時候進行單點監測,可是必須保證執行監測的人員是可信的,這好像進入了一個無限死循環,可是事實上沒有多少次重要會議會死循環在那或者大廈爆炸,這就是可信路徑的約定。操做系統既然不能保證用戶程序安全,那就要對用戶程序進行檢測,可是又不能每一個都檢測,因而在將權力轉交給一個計算機用戶的時候,必須保證轉交過程絕對安全,接下來轉交完畢之後用戶的安全策略就能夠發揮效用了,轉交過程就是在可信路徑中進行的,轉交在可信路徑下執行能夠給操做系統一個安全的單點驗證環境,保證執行單點驗證的執法程序是可信的而不是冒充的,這是進入一個系統最基本的。shell
各大操做系統都實現了可信路徑,好比windows的可信路徑實現爲ctrl/alt/del三鍵組合,運行於可信的0環的驅動隨後開啓一個專用的登陸桌面,而只有winlogon程序能夠訪問這個登陸桌面,從而保證沒有別的惡意程序能夠監控登陸過程。windows啓動後有三個桌面,一個是咱們使用的這個,一個是專用於登陸的,一個是屏保的,windows靠桌面的隔離實現了可信路徑,實際上是shell的隔離;linux的實現更加簡單易於理解,linux是基於統一的資源保護實現安全的,所以它沒有必要存在一些太過「策略」性的複雜的東西,感受可能會遇到安全問題的地方直接將訪問控制映射到經典的unix訪問控制上就能夠(想象一下,linux中就沒有全局鉤子),unix/linux的安全主要做用於被保護的對象而windows的安全主要做用於發起訪問的對象,這個區別致使了linux的可信路徑實現比windows簡單很多,因爲linux啓動的時候就是root根用戶,所以它所啓動的getty程序是絕對可信的,再者,此時剛剛從內核過來,剛開始/sbin/init進程,只要init進程可信那麼迄今爲止一切就是可信的,而/sbin/init是否被替換掉就是另一個問題了,既然init啓動的getty是可信的,那麼當你輸入用戶名後它啓動的login以及之後的登陸過程也是可信的,可是僅僅保證這些程序自己是可信的還不夠,由於你不能保證沒有惡意的程序在探測咱們的密碼輸入動做,好比在getty啓動以前可能啓動了一個***,這雖然不是安全自己的內容可是這裏有問題,所以還得防着一些,再者,getty自己若是被替換,那就真的很差辦了。要想作到登陸時沒有別的惡意進程監聽,此時可信路徑派上了用場,當你的alt/sysrq/k組合鍵被按下時,可信路徑就被打通了,它的打通靠的是殺死一切此終端的別的進程來實現的,雖然linux的作法有點粗暴,可是十分安全,若是本終端有惡意進程,那麼這個組合鍵一下去,一切就都被殺死了,但是linux的可信路徑看起來沒有windows安全,由於你再殺進程也會有漏網之魚,好比守護進程就沒有在任何終端,並且運行在同一個用戶可是不一樣終端下的惡意進程仍然能夠檢測登陸,因而linux必須加大可信路徑中殺死進程的約束強度,好比只要有進程打開了當前終端,那麼也一併殺死,如此一來就安全了,由於linux中,一切都是文件,因而一個進程是否打開了當前終端只須要檢測一下進程的打開文件就能夠了,一切都統一的進行,而且只要要監控終端,必然要先打開這個終端,linux又沒有windows中的全局鉤子之類的東西(linux不是消息驅動的),所以就相應的少了不少事。windows