本文從系統管理員的角度討論安全問題.系統管理員是管理系統的人:啓動系統,中止系統運行,安裝新軟件,增長新用戶,刪除老用戶,以及完成保持系統發展和運行的平常事務工做.
1.安全管理
安全管理主要分爲四個方面:
(1)防止未受權存取:這是計算機安全最重要的問題:未被使用系統的人進入系統.用戶意識,良好的口令管理(由系統管理員和用戶雙方配合),登陸活動記錄和報告,用戶和網絡活動的週期檢查,這些都是防止未受權存取的關鍵.
(2)防止泄密:這也是計算機安全的一個重要問題.防止已受權或未受權的用戶相互存取相互的重要信息.文件系統查賬,su登陸和報告,用戶意識,加密都是防止泄密的關鍵.
(3)防止用戶拒絕系統的管理:這一方面的安全應由操做系統來完成.一個系統不該被一個有意試圖使用過多資源的用戶損害.不幸的是,UNIX不能很好地限制用戶對資源的使用,一個用戶可以使用文件系統的整個磁盤空間,而
UNIX基本不能阻止用戶這樣作.系統管理員最好用PS命令,記賬程序df和du週期地檢查系統.查出過多佔用CUP的進程和大量佔用磁盤的文件.
(4)防止丟失系統的完整性:這一安全方面與一個好系統管理員的實際工做(例如:週期地備份文件系統,系統崩潰後運行fsck檢查,修復文件系統,當有新用戶時,檢測該用戶是否可能使系統崩潰的軟件)和保持一個可靠的操做系 統有關(即用戶不能常常性地使系統崩潰).
本文其他部分主要涉及前兩個問題,第三個問題在"安全查賬"一節討論.
2.超級用戶
一些系統管理命令只能由超級用戶運行.超級用戶擁有其餘用戶所沒有的特權,超級用戶無論文件存取許可方式如何,均可以讀,寫任何文件,運行任何程序.系統管理員一般使用命令: /bin/su 或以 root 進入系統從而成爲超級用戶.在後面文章中以#表示應敲入必須由超級用戶運行的命令,用$表示應敲入由全部其餘用戶運行的命令.
3.文件系統安全
(1)UNIX文件系統概述
UNIX文件系統是UNIX系統的心臟部分,提供了層次結構的目錄和文件.文件系統將磁盤空間劃分爲每1024個字節一組,稱爲(block)(也有用512字節爲一塊的,如:SCO XENIX).編號從0到整個磁盤的最大塊數.所有塊可劃分爲四個部分,塊0稱爲引導塊,文件系統不用該塊;塊1稱爲專用塊,專用塊含有許多信息,其中有磁盤大小和所有塊的其它兩部分的大小.從塊2開始是i節點表,i節點表中含有i節點,表的塊數是可變的,後面將作討論.i節點表以後是空閒存儲塊(數據存儲塊),可用於存放文件內容.文件的邏輯結構和物理結構是十分不一樣的,邏輯結構是用戶敲入cat命令後所看到的文件,用戶可獲得表示文件內容的字符流.物理結構是文件實際上如何存放在磁盤上的存儲格式.用戶認爲本身的文件是邊疆的字符流,但實際上文件可能並非以邊疆的方式存放在磁盤上的,長於一塊的文件一般將分散地存放在盤上.然而當用戶存取文件時,UNIX文件系統將以正確的順序取各塊,給用戶提供文件的邏輯結構. 固然,在UNIX系統的某處必定會有一個表,告訴文件系統如何將物理結構轉換爲邏輯結構.這就涉及到i節點了.i節點是一個64字節長的表,含有有關一個文件的信息,其中有文件大小,文件全部者,文件存取許可方式,以及文件爲普通文件,目錄文件仍是特別文件等.在i節點中最重要的一項是磁盤地址表.該表中有13個塊號.前10個塊號是文件前10塊的存放地址.這10個塊號能給出一個至多10塊長的文件的邏輯結構,文件將以塊號在磁盤地址表中出現的順序依次取相應的塊.當文件長於10塊時又怎樣呢?磁盤地址表中的第十一項給出一個塊號,這個塊號指出的塊中含有256個塊號,至此,這種方法知足了至多長於266塊的文件(272,384字節).若是文件大於266塊,磁盤地址表的第十二項給出一個塊號,這個塊號指出的塊中含有256個塊號,這256個塊號的每個塊號又指出一塊,塊中含256個塊號,這些塊號才用於取文件的內容.磁盤地址中和第十三項索引尋址方式與第十二項相似,只是多一級間接索引.這樣,在UNIX系統中,文件的最大長度是16,842,762塊,即17,246,988,288字節,有幸是是UNIX系統對文件的最大長度(通常爲1到2M字節)加了更實際的限制,使用戶不會無心中創建一個用完整個磁盤窨全部塊的文件. 文件系統將文件名轉換爲i節點的方法實際上至關簡單.一個目錄其實是一個含有目錄表的文件:對於目錄中的每一個文件,在目錄表中有一個入口項,入口項中含有文件名和與文件相應的i節點號.當用戶敲入cat xxx時,文件系統就在當前目錄表中查找名爲xxx的入口項,獲得與文件xxx相應的i節點號,而後開始取含有文件xxx的內容的塊.
(2)設備文件
UNIX系統與邊在本系統上的各類設備之間的通信,經過特別文件來實現, 就程序而言,磁盤是文件,MODEM是文件,甚至內存也是文件.全部鏈接到系統上的設備都在/dev目錄中有一個文件與其對應.當在這些文件上執行I/O操做時,由UNIX系統將I/O操做轉換成實際設備的動做.例如,文件/dev/mem是系統的內存,若是cat這個文件,其實是在終端顯示系統的內存.爲了安全起見,這個文件對普通用戶是不可讀的.由於在任一給定時間,內存區可能含有用戶登陸口令或運行程序的口令,某部分文件的編輯緩衝區,緩衝區可能含有用ed -x命令解密後的文本,以及用戶不肯讓其餘人存取的種種信息. 在/dev中的文件一般稱爲設備文件,用ls /dev命令能夠看看系統中的一些設備:
acuo 呼叫自動撥號器
console 系統控制檯
dsknn 塊方式操做磁盤分區
kmem 核心內存
mem 內存
lp 打印機
mto 塊方式操做磁帶
rdsknn 流方式操做的磁盤分區
rmto 流方式操做的磁帶
swap 交換區
syscon 系統終端
ttynn 終端口
x25 網絡端口
等等
(3)/etc/mknod命令
用於創建設備文件.只有root能使用這個命令創建設備文件.其參數是文件名,字母c或b分別表明字符特別文件或塊特別文件,主設備號,次設備號.塊特別文件是像磁帶,磁盤這樣一些以塊爲單位存取數據的設備.字符特別文件是如像終端,打印機,MODEM,或者其它任何與系統通信時,一次傳輸一個字符的設備,包括模仿對磁盤進行字符方式存取的磁盤驅動器.主設備號指定了系統子程序(設備驅動程序),當在設備上執行I/O時,系統將調用這個驅動程序.調用設備驅動程序時,次設備號將傳遞給該驅動程序(次設備規定具體的磁盤驅 動器,帶驅動器,信號線編號,或磁盤分區).每種類型的設備通常都有本身的設備驅動程序.文件系統將主設備號和次設備號存放在i節點中的磁盤地址表內,因此沒有磁盤空間分配給設備文件(除i節點自己佔用的磁盤區外).當程序試圖在設備文件上執行I/O操做時,系統識別出該文件是一個特別文件,並調用由主設備號指定的設備驅動程序,次設備號做爲調用設備驅動程序的參數.
(4)安全考慮
將設備處理成文件,使得UNIX程序獨立於設備,即程序沒必要必定要了解正使用的設備的任何特性,存取設備也不須要記錄長度,塊大小,傳輸速度,網絡協議等這樣一些信息,全部煩人的細節由設備驅動程序去關心考慮,要存取設備,程序只須打開設備文件,而後做爲普通的UNIX文件來使用.從安全的觀點來看這樣處理很好,由於任何設備上進行的I/O操做只通過了少許的渠道(即設備文件).用戶不能直接地存取設備.因此若是正確地設置了磁盤分區的存取許可,用戶就只能經過UNIX文件系統存取磁盤.文件系統有內部安全機制(文件許可).不幸的是,若是磁盤分區設備得不正確,任何用戶都可以寫一個程序讀磁盤分區中的每一個文件,做法很簡單:讀一i節點,而後以磁盤地址表中塊號出現的順序,依次讀這些塊號指出的存有文件內容的塊.故除了root之外,決不要使盤分區對任何人可寫.由於全部者,文件存取許可方式這樣一些信息存放於i節點中,任何人只要具備已安裝分區的寫許可,就能設置任何文件的SUID許可,而無論文件的全部者是誰,也沒必要用chmod()命令,還可避過系統創建的安全檢查.以上所述對內存文件mem,kmem和對換文件swap也是同樣的.這些文件含有用戶信息,一個"耐心"的程序能夠將用戶信息提取出來.要避免磁盤分區(以及其它設備)可讀可寫,應當在創建設備文件前先用umask命令設置文件創建屏蔽值.通常狀況下,UNIX系統上的終端口對任何人都是可寫的,從而使用戶能夠用write命令發送信息.雖然write命令易引發安全方面的問題,但大多數用戶以爲用write獲得其餘用戶的信息很方便,因此係統將終端設備的存取許可設置成對全部用戶可寫./dev目錄應當是755存取許可方式,且屬root全部.不容許除root外的任何用戶讀或寫盤分區的原則有一例外,即一些程序(一般是數據庫系統)要求對磁盤分區直接存取,解決這個問題的經驗的盤分區應當由這種程序專用(不安裝文件系統),並且應當告知使用這種程序的用戶,文件安全保護將由程序本身而不是UNIX文件系統完成.
(5)find命令
find命令用於搜索目錄樹,並對目錄樹上的全部文件執行某種操做,參數是目錄名錶(指出從哪些起點開始搜索),還可給出一個或多個選項,規定對每一個文件執行什麼操做.
find . -print 將列出當前工做目錄下的目錄樹的每個文件.
find / -user bob -print 將列出在系統中可找到的屬於bob用戶的全部文件.
find /usr/bob -perm 666 -print 將列出/usr/bob目錄樹下全部存取許可爲666的文件.若將666改成-666則將列出全部具備包含了666在內的存取許可方式的文件(如777).
find /usr/bob -type b -print 將列出/usr/bob目錄樹下全部塊特別文件(c爲字符特別文件).
find / -user root -perm -4000 -exec ls -l {} \; 是一個較複雜一點的命令,-exec COMMAND \;容許對所找到的每一個文件運行指定的命令COMMAND.若COMMAND中含有{},則{}將由find所找到的文件名替換.COMMAND必須以\;結束.
以上舉例介紹find的用法,各選項可組合使用以達到更強的功能.
(6)secure程序
系統管理員應當作一個程序以按期檢查系統中的各個系統文件,包括檢查設備文件和SUID,SGID程序,尤爲要注意檢查SUID,SGID程序,檢查/etc/passwd和/etc/group文件,尋找久未登陸的戶頭和校驗各重要文件是否被修改.
(源程序清單將在從此發表)
(7)ncheck命令 用於檢查文件系統,只用一個磁盤分區名做爲參數,將列出i