Unix系統(tǒng)文件系統(tǒng)安全
unix文件系統(tǒng)概述
unix文件系統(tǒng)是unix系統(tǒng)的心臟部分,提供了層次結(jié)構(gòu)的目錄和文件.文件系統(tǒng)將磁盤空間劃分為每1024個字節(jié)一組,稱為塊(block)(也有用512字節(jié)為一塊的,如:sco xenix).編號從0到整個磁盤的最大塊數(shù).全部塊可劃分為四個部分,塊0稱為引導(dǎo)塊,文件系統(tǒng)不用該塊;塊1稱為專 用塊,專用塊含有許多信息,其中有磁盤大小和全部塊的其他兩部分的大小.從塊2開始是i節(jié)點表,i節(jié)點表中含有i節(jié)點,表的塊數(shù)是可變的,后面將做討論.i節(jié)點表之后是空閑存儲塊(數(shù)據(jù)存儲塊),可用于存放文件內(nèi)容.文件的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)是十分不同的,邏輯結(jié)構(gòu)是用戶敲入cat命令后所看到的文件,用戶可得到表示文件內(nèi)容的字符流.
物理結(jié)構(gòu)是文件實際上怎么存放在磁盤上的存儲格式.用戶認(rèn)為自己的文件是邊疆的字符流,但實際上文件可能并不是以邊疆的方式存放在磁盤上的,長于一塊的文件通常將分散地存放在盤上.然而當(dāng)用戶存取文件時,unix文件系統(tǒng)將以正確的順序取各塊,給用戶提供文件的邏輯結(jié)構(gòu)。
當(dāng)然,在unix系統(tǒng)的某處一定會有一個表,告訴文件系統(tǒng)怎么將物理結(jié)構(gòu)轉(zhuǎn)換為邏輯結(jié)構(gòu).這就涉及到i節(jié)點了.i節(jié)點是個64字節(jié)長的表,含有有關(guān)一個文件的信息,其中有文件大小,文件所有者,文件存取許可方式,及文件為普通文件,目錄文件還是特別文件等.在i節(jié)點中最重要的一項是磁盤地址表.該表中有13個塊號.前10個塊號是文件前10塊的存放地址.這10個塊號能給出一個至多10塊長的文件的邏輯結(jié)構(gòu),文件將以塊號在磁盤地址表中出現(xiàn)的順序依次取相應(yīng)的塊。
當(dāng)文件長于10塊時又怎樣呢?磁盤地址表中的第十一項給出一個塊號,這個塊號指出的塊中含有256個塊號,至此,這種方法滿足了至多長于266塊的文件(272,384字節(jié)).如果文件大于266塊,磁盤地址表的第十二項給出一個塊號,這個塊號指出的塊中含有256個塊號,這256個塊號的每一個塊號又指出一塊,塊中含256個塊號,這些塊號才用于取文件的內(nèi)容.磁盤地址中和第十三項索引尋址方式和第十二項類似,只是多一級間接索引。
這樣,在unix系統(tǒng)中,文件的最大長度是16,842,762塊,即17,246,988,288字節(jié),有幸是是unix系統(tǒng)對文件的最大長度(一般為1到2m字節(jié))加了更實際的限制,使用戶不會無意中建立一個用完整個磁盤窨所有塊的文件.文件系統(tǒng)將文件名轉(zhuǎn)換為i節(jié)點的方法實際上相當(dāng)簡單.一個目錄實際上是個含有目錄表的文件:對于目錄中的每個文件,在目錄表中有一個入口項,入口項中含有文件名和和文件相應(yīng)的i節(jié)點號.當(dāng)用戶敲入cat xxx時,文件系統(tǒng)就在當(dāng)前目錄表中查找名為xxx的入口項,得到和文件xxx相應(yīng)的i節(jié)點號,然后開始取含有文件xxx的內(nèi)容的塊。
保持系統(tǒng)安全
考慮系統(tǒng)中一些關(guān)鍵的薄弱環(huán)節(jié):
a. 系統(tǒng)是否有modem?電話號碼是否公開
b. 系統(tǒng)是否連接到?更有什么系統(tǒng)也連接到該網(wǎng)絡(luò)
c. 系統(tǒng)管理員是否使用未知來處或來處不可靠的程式
d. 系統(tǒng)管理員是否將重要信息放在系統(tǒng)中
e. 系統(tǒng)的用戶是熟悉系統(tǒng)的使用還是新手
f. 用戶是否非常重視關(guān)心安全
g. 用戶的管理部門是否重視安全
保持系統(tǒng)文件安全的完整性.檢查所有系統(tǒng)文件的存取許可,所有具有suid許可的程式都是非法者想偷換的選擇對象.
要特別注意設(shè)備文件的存取許可.
要審查用戶目錄中具有系統(tǒng)id/系統(tǒng)小組的suid/sgid許可的文件.
在未檢查用戶的文件系統(tǒng)的suid/sgid程式和設(shè)備文件之前,不要安裝用戶的文件系統(tǒng).
將磁盤的備份存放在安全的地方.
設(shè)置口令時效,如果能存取unix的源碼,將加密口令和信息移到僅對root可讀的文件中,并修改系統(tǒng)的口令處理子程式.這樣可增加口令的安全.修改passwd,使passwd能刪去口令打頭和末尾的數(shù)字,然后根據(jù)spell詞典和/etc/passwd中用戶的個人信息,檢查用戶的新口令,也檢查用戶新口令中子串等于登錄名的情況.如果新口令是spell詞典中的單詞,或/etc/passwd中的入口項的某項值,或是登錄名的子串,passwd將不允許用戶改動口令.
記錄本系統(tǒng)的用戶及其授權(quán)使用的系統(tǒng).
查出久未使用的登錄戶頭,并取消該戶頭.
確保沒有無口令的登錄戶頭.
啟動記帳系統(tǒng).
查出不尋常的系統(tǒng)使用情況,如大量的占用磁盤,大量的使用cpu時間,大量的進程,大量的使用su的企圖,大量無效的登錄,大量的到某一系統(tǒng)的網(wǎng)絡(luò)傳輸,奇怪的uucp請求.
修改shell,使其等待了一定時間而無任務(wù)時終止運行.
修改login,使其打印出用戶登錄的最后時間,三次無效登錄后,將通訊線掛起,以便系統(tǒng)管理員能檢查出是否有人試圖非法進入系統(tǒng).確保login不讓root在除控制臺外的所有地方登錄.
修改su,使得只有root能以過期口令通過su進入某一戶頭.
當(dāng)安裝來源不可靠的軟件時,要檢查源碼和makefile文件,查看特別的子程式調(diào)用或命令.
即使是安裝來源可靠的軟件,也要檢查是否有suid(sgid)程式,確認(rèn)這些許可的確是必要的.如果可能,不要讓這些程式具有系統(tǒng)id(或組)的suid(sgid)許可,而應(yīng)該建立一個新用戶(或給)供該軟件運行.
如果系統(tǒng)在辦公室中,門應(yīng)上鎖,將重要數(shù)據(jù)保存在軟盤上或帶上,并鎖起來.
將secure,perms和所有其他做安全檢查的shell程式存取許可置為僅執(zhí)行,更好的是將這些shell程式存于可拆卸的介質(zhì)上.
記住,只要系統(tǒng)有所有人都可調(diào)用的撥號線,系統(tǒng)就不可能真正的安全.系統(tǒng)管理員能非常好地防止系統(tǒng)受到偶然的破壞.不過那些有耐心,有計劃,知道自己在干什么的破壞者,對系統(tǒng)直接的有預(yù)謀的攻擊卻常常能成功.
如果系統(tǒng)管理員認(rèn)為系統(tǒng)已泄密,則應(yīng)當(dāng)設(shè)法查出肇事者.若肇事者是本系統(tǒng)的用戶,和用戶的管理部門聯(lián)系,并檢查該用戶的文件,查找所有可疑的文件,然后對該用戶的登錄小心地監(jiān)督幾個星期.如果肇事者不是本系統(tǒng)的用戶,可讓本公司采取合法的措施,并需求所有的用戶改動口令,讓用戶知道出了安全事故,用戶們應(yīng)當(dāng)檢查自己的文件是否有被竄改的跡象.如果系統(tǒng)管理員認(rèn)為系統(tǒng)軟件已被更改了,就應(yīng)當(dāng)從原版系統(tǒng)帶(或;軟盤)上重裝入所有系統(tǒng)軟件,保持系統(tǒng)安全比道歉更好.
unix系統(tǒng)設(shè)備文件
unix系統(tǒng)和邊在本系統(tǒng)上的各種設(shè)備之間的通訊,通過特別文件來實現(xiàn)就程式而言,磁盤是文件,modem是文件,甚至內(nèi)存也是文件.所有連接到系統(tǒng)上的設(shè)備都在/dev目錄中有一個文件和其對應(yīng).當(dāng)在這些文件上執(zhí)行i/o操作時,由unix系統(tǒng)將i/o操作轉(zhuǎn)換成實際設(shè)備的動作.例如,文件/dev/mem是系統(tǒng)的內(nèi)存,如果cat這個文件,實際上是在終端顯示系統(tǒng)的內(nèi)存.為了安全起見,這個文件對普通用戶是不可讀的.因為在任一給定時間,內(nèi)存區(qū)可能含有用戶登錄口令或運行程式的口令,某部分文件的編輯緩沖區(qū),緩沖區(qū)可能含有用ed -x命令解密后的文本,及用戶不愿讓其他人存取的種種信息.在/dev中的文件通常稱為設(shè)備文件,用ls /dev命令能看看系統(tǒng)中的一些設(shè)備:
acuo 呼叫自動撥號器
console 系統(tǒng)控制臺
dsknn 塊方式操作磁盤分區(qū)
kmem 核心內(nèi)存
mem 內(nèi)存
lp 打印機
mto 塊方式操作磁帶
rdsknn 流方式操作的磁盤分區(qū)
rmto 流方式操作的磁帶
swap 交換區(qū)
syscon 系統(tǒng)終端
ttynn 終端口
x25 網(wǎng)絡(luò)端口
等等
unix文件系統(tǒng)的/etc/mknod命令
用于建立設(shè)備文件.只有root能使用這個命令建立設(shè)備文件.其參數(shù)是文件名,字母c或b分別代表字符特別文件或塊特別文件,主設(shè)備號,次設(shè)備號.塊特別文件是像磁帶,磁盤這樣一些以塊為單位存取數(shù)據(jù)的設(shè)備.字符特別文件是如像終端,打印機,modem,或其他所有和系統(tǒng)通訊時,一次傳輸一個字符的設(shè)備,包括模仿對磁盤進行字符方式存取的磁盤驅(qū)動器.
主設(shè)備號指定了系統(tǒng)子程式(設(shè)備驅(qū)動程式),當(dāng)在設(shè)備上執(zhí)行i/o時,系統(tǒng)將調(diào)用這個驅(qū)動程式.調(diào)用設(shè)備驅(qū)動程式時,次設(shè)備號將傳遞給該驅(qū)動程式(次設(shè)備規(guī)定具體的磁盤驅(qū)動器,帶驅(qū)動器,信號線編號,或磁盤分區(qū)).每種類型的設(shè)備一般都有自己的設(shè)備驅(qū)動程式.
unix文件系統(tǒng)將主設(shè)備號和次設(shè)備號存放在i節(jié)點中的磁盤地址表內(nèi),所以沒有磁盤空間分配給設(shè)備文件(除i節(jié)點本身占用的磁盤區(qū)外).當(dāng)程式試圖在設(shè)備文件上執(zhí)行i/o操作時,系統(tǒng)識別出該文件是個特別文件,并調(diào)用由主設(shè)備號指定的設(shè)備驅(qū)動程式,次設(shè)備號作為調(diào)用設(shè)備驅(qū)動程式的參數(shù).
【編輯推薦】