內容
介紹
X Window如何工作
未設防的X Window
走進安全
主機認證
標志認證
主機認證
使用xhost
好處
缺點
標志認證
xauth程序
xdm程序(X Display Manager)
沒有xdm時產生"magic cookie"值
Xrsh in X11R5
好處
缺點
Xterm的缺陷
X安全
介紹
在各種環境中,X Windows深受用戶們的歡迎。它的客戶/服務器模型使得用戶能夠靈活、強有力的和計算機之間進行交互。然而,它功能強大的同時是以犧牲它的安全性來獲取的。如果不能夠正確管理X Windows,將會出現一系列弱點。這篇文章正是揭示這些安全問題以及解決方法的。
X Windows如何工作
一個圖形用戶界面竟是一個潛在而嚴重的安全缺陷,這一點讓人感到迷惑。所以對於新手,讓我們來看看X Windows是如何工作的,以及它如何又產生問題。
X Windows使用了一個底層叫做X協議的協議。這個協議既能夠用在單個的計算機上,又能夠用在計算機網絡上。它沒有被捆綁在操作系統裡而是能夠用在多個平台上。X Windows利用網
絡通信的客戶/服務器模式。這個模式能夠使用戶在一個地方運行程序,而又在其它地方控制這個程序。
與平常的客戶/服務器形式相反,用戶實際上直接在X Server上工作,X Server提供屏幕、鍵盤以及鼠標。之所以叫做Server是因為它為客戶端產生輸入,並管理向客戶端輸出。X 客戶端是一些應用程序,比如xterm,emacs,xclock等等。他們接收和處理輸入並輸出。
在大多數情況,服務器和客戶端運行在同一台機器上。但是X協議是十分具有擴展性的,它有許多培植文件。實際上,X終端是一個屏幕,鍵盤和鼠標沒有計算能力。即使X server運行在一台主機上,客戶端也可以運行在其他主機上,即使那台主機在其他建築或國家裡。
那麼,如何處理計算機安全問題?可以連接到X server的客戶端應該被仔細控制。因為可以多個客戶端能夠連接到一個X server上,因此要保證這些客戶端的行為能夠被正確處理。如果一個客戶能夠向另一個客戶發送信息或者截獲發往另一個客戶的信息,那麼這個系統就是有缺陷的。
未設防的X Windows
一些X server與X client通訊的的例子包括下列:
X終端改變----字體管理、鼠標靈敏度、顏色和鍵盤映射。
X事件 ----包括鍵盤和鼠標等。
X數據 ---- 影響到X終端的改變,包括輸出文本、建立窗口、在屏幕上畫圖等。
任何連接到X Server的客戶程序都能夠潛在的改變X的通訊。這可能包括下列:
改變會話參數。
建立/銷毀窗口----你在窗口莫名其妙的消失之前是否保存好了費力寫的文檔?
捕捉X事件----比如在一個xterm窗口讀取鍵盤敲擊信息,這很可能就會把他人的帳號與密碼得到。
產生X事件 ----比如說發送一些鍵盤敲擊序列到EMACS窗口。
明顯的,X servers有與生具來的危險性。更壞的是:許多X server在缺省時允許來自任何地方的主機連向它。
走進安全
什麼是處理X server安全問題最好的辦法?有兩種可以著手的方法:主機認證和標志認證。
下面一一列出。
主機認證
主機認證是用IP地址來標志允許或禁止一個客戶端。一旦有一個用戶登錄到X server上,一個叫做xhost的程序用來控制來自那個IP的客戶允許連接。但是大多數主機支持多個一台客戶機上用戶,所以不可能控制在某一台客戶機,允許他上而別人不行。
標志認證
第二種方法是校驗每個客戶機所提供的標志。這個工作由一個叫做"xauth"的程序來完成:每一個客戶都被給予一個叫做"magic cookie"的東西,它必須向X server提供一個隨機值來獲得進入權利。
The second form of authentication is to verify each client based on the token they offer. Using a program called xauth, each client is given a "magic cookie," a random value which it must offer to the X Server to be allowed Access.
主機認證
當然了,X安全用的最廣的機制就是"xhost"程序。雖然用起來很簡單,但是很不靈活。
使用xhost
xhost使用起來很簡單。每一個X Server維護著一個主機列表,裡面寫著那台主機可以進入,那台不可以。xhost程序用來改變這個列表,命令行語法如下:
顯示允許連接X Server的主機列表:
xhost
增加一個主機:
xhost +bar.foo.org
於是, 任何在bar.foo.org上的用戶或程序都能夠與X server通訊。
刪除一個主機:
xhost -bar.foo.org
使X server向全世界開放:
xhost +
訪問控制被再次允許:
xhost -
利用xhost,我們可以給某一個客戶機在與X server連接的短暫時間內的權限打開,當客戶機連上之後再取消這個權限,這樣,雖然這個權限被取消掉了,但此時的通訊還能夠進行。
優點:
xhost訪問控制機制的確十分容易使用,它只需要簡單的參數即可。
缺點:
xhost的簡單既帶來好處又帶來壞處:從一個客戶機所來的用戶要麼全部允許,要麼全部拒絕,而不能更細的分類----你能他不能。在許多環境裡,可能有大量的用戶在使用同一台客戶機,因此這種機制就不能夠勝任。
遺憾的是,許多X server,象NCD Servers,SGI system 以及Macintosh X,他們的X server的訪問權限在缺省下是關閉的,對於不熟悉X server缺點的用戶,用主機認證機制會帶來安全問題。
Xhost比標志認證有更高的優先級。任何用戶可以在把自己的機器加入到xhost的訪問列表中而不顧自己的權限。
標志認證
X server可以通過利用"magic cookie"來控制用戶級的對X server的訪問。這是一個機器可以識別的、隨機產生的代碼。一個X client必須在被X server允許訪問之前向X server提供相同的"magic cookie"值。這個值被存在文件".Xauthority"中,它既可以在每次會話的開始對於只是想登陸到一台機器上的用戶來說,這個增強的安全機制是透明的。每一個由特定用戶啟動的客戶端能夠發現這個"magic cookie"並且用此來訪問X server。但是, 許多用戶工作在許多個機器上,那麼,一個在遠程機器上的X client如何知道這個"magic cookie"呢?
下來就要介紹xauth這個程序的功能了。
xauth
xauth程序用來編輯和顯示用戶的"magic cookie"認證信息。一旦"magic cookie"顯示成可度的形式,它就可以被送到遠程主機上。在遠程主機上,xauth被再次用來引入這些"magic cookie"到".Xauthority"文件中。假設遠程主機用戶目錄下的".rhost"文件已經為本用戶的rsh的使用准備好了,我們用下面的命令:
xauth extract - $DISPLAY rsh ahost.foo.org xauth merge -
第一條命令打印所處的機器裡"magic cookie"值到標准輸出。這些信息被通過管道用rsh命令調用xauth引入到ahost.foo.org。於是能夠在ahost.foo.org這個機器上運行X client。重要的是要將".Xauthority"文件的權限設置正確。
X Display Manager
xdm是一個客戶端程序,能夠提供登錄畫面並能夠同時連接多個X Server。當一個用戶進行這種登陸時,xdm將一個"magic cookie"值寫到用戶自己目錄下的".Xauthority"文件裡。X server並不常常僅僅充當獨立的一個角色,它們同時也可擔任X終端的角色,此時它須運行xdm來提供初始的登陸畫面。xdm提供對"magic cookie"值的認證,這個認證必須首先通過配置 "/usr/lib/X11/xdm/xdm/xdm-config"文件的這一條打開。
DisplayManager*authorize:true
用這個,xdm每次在用戶登錄時產生一個新的"magic cookie"值,並且把它保存在這些用戶的".Xauthority"文件中。
如果不用xdm,仍然可以用這種認證機制,下面就要談到:
非利用xdm產生一個"magic cookie"值
Xdm用來管理".Xauthority"文件,但是如果不用xdm,仍然可以用"magic cookie"認證機制。
唯一的問題是:在許多X11 Server上,用戶需要產生一個"magic cookie"值(OpenWindows是一個例外:這個值在啟動時自動產生)。這工作可以通過各種方法來完成。例如,如果有Korn shell,它裡面內建有一個隨機數產生器:
randomkey=`ksh -c echo $(( $RANDOM * $RANDOM * 2 ))`
xauth add ${HOST}:0.$randomkey
還有,用時間可以產生一個隨機值:
randomkey=`date +"%y%m%d%H%M%S"`
xauth add ${HOST}:0 . $randomkey
Xrsh in X11R5
Xrsh是一個X11R5提供的腳本,它存在於"contrib/clients/xrsh"目錄下,對於任何想要經過rsh在遠程運行客戶程序的用戶來說,這是一個十分順手的腳本,它利用xauth自動拷貝cookie code到遠程的機器上,例如,運行在foo主機上的xterm程序,鍵入:
xrsh -auth xauth foo xterm
好處:
現在可以按照用戶方式進行認證了。在一個主機有多人用的情況下,用這種方式進行認證很有必要。
缺點:
xdm和xauth程序對於用戶和管理員來說,運行和維護起來很費時。需要在用戶觀點對X客戶/服務器模式有深的了解。
Xterm的缺陷
xterm用來提供給用戶一個命令提示符。因