來源:IT專家網 作者:Tina
Unix操作系統的安全性是眾所周知的。但是如果要你說出Unix系統到底安全在哪裡,估計也沒有人能夠說出一個所以然來。筆者也一下子不能夠把Unix系統的安全特性向大家娓娓道來。筆者這裡僅僅舉Unix系統安裝設計方面的三個小細節。估計從這個三個小細節中,大家看到Unix工程師在系統安全性與便利性方面所做的努力。
一、同一個命令不同用戶不同的權限。
Date命令是Unix系統的一個常用命令,其顯示了系統的日期與時間。但是不同的用戶角色其具有不同的功能。如是系統管理員用戶,則可以通過這個命令來更改系統時間。但是如果執行這個命令的用戶是系統普通用戶,那麼這個命令則只能夠顯示時間,而無法更改時間。也就是說,默認情況下,只有系統管理員才可以更改系統時間,但是修改時間與查看時間用的是同一個命令。系統會自動去判斷當前用戶是否有修改時間的權利。
這就是Unix系統中一個很有用的安全特性。一方面類似的功能采用同一個命令,方便了系統管理員的操作與維護;另一方面系統會自動對命令的權限進行審查,以保障用戶只能夠利用命令進行與自己權限相符合的操作。從這裡可以看出,Unix系統不僅在安全上有保障,其更加看重與安全和便利的一種結合。不會為了安全,而犧牲管理維護的便利性。
大家都知道,隨意更改系統的日期可能會給系統造成很大的負面影響,會使得一些作業計劃混亂。如系統當前可能有多個進程在後台運行,此時系統會根據進程的優先性、管理員定義的作業計劃等等安排好了這些命令進程執行的時間進度表,規定在某個特定的時刻啟動這些作業或者進程。此時如果允許一個非管理員員用戶隨意更改系統時間,則系統中的作業可能會亂了套。如系統管理員為了系統的安全,設置了每天中午12點30分對系統中的重要文件進行備份。如果在中午12點的時候普通用戶修改了時間,把時間從12點改為了1點。那麼此時系統就不會對系統重要文件進行備份。若不幸的是,在第二天上午由於一些意外導致系統硬盤損壞或者其他系統故障,那麼由於前一天沒有正常備份,則損壞的文件將無法修復。可以隨意更改系統時間會導致很多難以預料的結果。
所以從這個date命令中就可以看出,Unix系統在安全設計上確實比其他操作系統略高一籌。同一個命令不同帳戶具有不同的操作功能,這讓Unix系統在安全與便利上達到了同一。
二、不提示具體的出錯信息。
Unix系統跟其他操作系統一樣,也是通過賬戶名與密碼來保證操作系統的基本安全性。但是,筆者認為Unix在這方面可能考慮的更全面一點。
Unix系統是一個多用戶操作系統。通常情況下,Unix系統只允許擁有帳號和密碼的用戶登錄。用戶的帳號列表往往有系統管理員來進行維護。系統管理員授予用戶使用計算機的權限,並為其計統帳號、口令等信息。當系統出現提示信息要求用戶登錄時,用戶只能夠輸入系統管理員所提供的正確用戶名與密碼之後才能夠登陸到操作系統。如當系統出現了logon提示符之後,就表示該系統終端允許某個用戶通過帳號與密碼進行登錄。在輸入賬戶名之後,按下回車鍵之後,就需要輸入密碼。系統會要求用戶輸入准確的密碼來進行身份驗證。萬一用戶輸入密碼錯誤後(用戶名准確),此時系統只會含糊的提示“login incorrect”(登陸不准確)。而不會提示用戶到底錯在哪裡,是錯在密碼錯誤又或者是用戶名輸入錯誤。
這個含糊的提示,將會給非法攻擊者造成一定的障礙。由於非法攻擊者不知道到底是密碼錯誤又或者是賬戶名錯誤,這會增加對方攻擊的成本。或者說,這個提示對於攻擊者來說,或多或少有一些欺騙性。但是,這個措施卻可以很明顯的提高系統的安全性。或許有些員工會抱怨這麼設計友好性太差。不僅會欺騙攻擊者,而且也會欺騙普通的用戶。不過從安全性來說,這個安全措施仍然是必要的。
另外值得一提的是,在用戶登錄時,Unix系統還跟其他操作系統一樣,提供了一種更高級別的安全措施。即當用戶登錄到Unix系統時,根據系統安全策略,可以讓用戶強制更改管理員所賦予的口令。此時用戶最好能夠立即更改默認口令,設置一個只有自己知道的口令(連管理員可能都不知道)。畢竟賬戶名或者口令若太多人知道的話,會給操作系統帶來一定的安全隱患。
當Unix系統在登陸時如果用戶名或者密碼驗證錯誤,系統不會提供詳細的出錯信息,從而不讓非法攻擊者找到出錯的原因,增加其攻擊的難度。其實這些類似的安全措施,在Unix系統中是比比皆是。在後續的文章中,筆者可能還會多次談到這個安全特性。從這個小小的安全設計中,就可以看出Unix操作系統的安全確實不是吹的。
三、輸出中不帶有相應的表頭。
利用命令who可以顯示當前登陸用戶的詳細信息,如用戶名、登陸的途徑、登陸時間等內容。在Linux系統中也有類似的功能。不過兩個系統有差異。
在Unix系統中如果執行了who命令之後,會以如下類似的格式顯示。
$ who
Oracle console May 10 12:05(:0)
Oracle pts/1 May 10 12:15(:0:0)
這個結果表示當前系統的登陸者有兩個,都為Oracle(操作系統允許同一個賬戶通過不同的渠道登陸到操作系統,這也是Unix系統的一個特性。在Linux操作系統中也可以實線類似的功能,但是在微軟操作系統中好像不行。)後面會顯示用戶登錄的途徑、登陸系統的時間等等。但是讓很多Unix系統的初學者感到困擾的就是,在輸出結果中竟然沒有一個相應的表頭來說明各個列的含義。這一點可能讓人看起來覺得Unix操作系統不怎麼友好,但是卻可以保障Unix系統的安全性。如一些Unix系統的高級安全策略都是基於這個特性所實現的。
另外,由於這個用戶信息具有非常重要的價值,故對此進行一些安全的防護就具有更大的現實意義。如系統管理員可以從who命令的輸出結果中抽取一部分數據供下一個命令使用。如筆者筆者經常利用這個內容給系統當前登陸的用戶發送郵件。為此筆者設計了一個小程序,在每個星期五的時候(利用date命令從輸出結果中抽取每個星期五的日期)向系統當前登陸的賬戶(利用who命令抽取其中的user-id一列的數值),然後通過mailx命令可以給當前所有已登陸的賬戶發送郵件。系統工程師可以通過一些簡單的命令實現類似負責的維護功能,這也是Unix系統跟其他操作系統的優勢所在。
除了發送郵件,系統工程師還可以利用這個who命令顯示的結果實現其他一些功能,如發送信息給當前登陸用戶要求起保存當前作業並注銷操作系統、甚至強制斷開用戶與本機的連接等等。故如果不對who的結果信息作一定程度的保護的話,那麼就將給Unix系統帶來很大的安全威脅。
其實除了who命令之外,Unix系統類似的情況還有很多。正是這一個個的細節考慮,才保障了整個Unix系統的安全。從這一方面來說,Unix系統有時候即使犧牲了界面的友好性,來實現系統的安全性,也是可以接受的。