第十一章 用chattr提高ext2文件係統的安全(2 / 3)

chattr=aiAtest.txt

使test.txt文件隻有a、i和A屬性。

最後,每個命令都支持-R選項,用於遞歸地對目錄和其子目錄進行操作。

3.ext2屬性和文件權限的區別

幾乎所有的係統管理員都理解UNIX風格文件係統的權限和所有者以及ls命令的顯示,例如:

[root@typhoidnixe0n]#ls-altest*

-rw-rw-r--1nixe0nusers0Nov1717:02test.conf

-rw-rw-r--1nixe0nusers0Nov1717:02test.log

-rw-rw-r--1nixe0nusers0Nov1619:41test.txt

從ls的輸出結果看,這些文件屬於用戶nixe0n,而nixe0n所在的用戶組是users。用戶nixe0n本人和users用戶組的成員尉有具有對文件的修改權限,而其他的用戶隻有讀取文件的權限。下麵是lsattr命令的輸出:

[root@typhoidnixe0n]#lsattr-atest*

---i--------test.conf

----a-------test.log

------------test.txt

輸出結果顯示,test.log隻能被添加,而test.conf文件不準修改。在UNIX係統中,如果一個用戶以root的權限登錄,文件係統的權限控製將無法對root用戶和以root權限運行的進程進行任何的限製。這樣對於UNIX類的操作係統,如果攻擊者通過遠程或者本地攻擊獲得root權限將可能對係統造成嚴重的破壞。而ext2文件係統可以作為最後一道防線,最大限度地減小係統被破壞的程度,並保存攻擊者的行蹤。ext2屬性是由sys_open()和sys_truncate()等係統調用檢查和賦予的,不受用戶識別號和其他因素的影響,在任何情況下,對具有不可修改(immutable)屬性的文件的進行任何修改都會失敗,不管是否是root用戶進行的修改。

但是,還有一個問題是root權限的用戶可以通過刪除i屬性實現對文件的修改。這種防護隻不過給獲得root權限的攻擊者加了一點小麻煩罷了,係統的安全性並沒有根本性的提高。

在2.1之前的內核版本中,存在一個安全層(securelevel)的特征。使用安全層可以解決上述問題,因為如果係統的安全層大於0,內核將不允許對任何文件的i屬性進行修改。這些版本的內核由sysctl命令的"kernel.securelevel"變量進行控製。如果在啟動時,這個變量的值被設置為1或者更大的值,內核將不允許對具有i屬性和a屬性文件進行修改,除非國旗動到單用戶狀態。

但是,由於引入了更為靈活的內核能力特征(kernelcapabilities),以後的內核不再支持安全層。使用內核能力,也可以實現類似的限製。工具lcap用來查詢和調整內核能力約束集(kernelcapabilitiesboundingset)。在啟動腳本中加入以下命令,就可以實現對具有i屬性和a屬性文件的保護:

lcapCAP_LINUX_IMMUTABLE

lcapCAP_SYS_RAWIO

第一個命令刪除任何用戶(包括超級用戶)對i標誌的修改能力。第二個命令刪除任何用戶(主要針對超級用戶)對塊設備的原始訪問(rawaccess)能力,防止一些技術高超的攻擊者直接修改文件係統索引節點的immutable域。BTW,在係統啟動時,CAP_SYS_RAWIO能力應該直接刪除,這個能力是一個非常大的潛在威脅。高明的攻擊者獲得了超級用戶權限之後,通過/dev/kmem設備可以直接修改內核內存。通過這種方式,可以破壞係統的內核能力約束集(kernelcapabilitiesbounding)。如果沒有任何參數,會列出內核支持的能力和目前生效的內核能力。

一旦一個內核能力被刪除,就隻有在係統重新啟動,進入到單用戶模式才能刪除能力限製。

感興趣的讀者,可以從下麵的連接中獲得更為詳細的能力方麵的知識:

LCAP-Linux內核能力約束集編輯器(LinuxKernelCapabilitiesBoundingSetEditor)

http://pw1.netcom.com/~spoon/lcap/

4.我們應該使用chattr做什麼?

主機直接暴露在Internet或者位於其它危險的環境,有很多shell帳戶或者提供HTTP和FTP等網絡服務,一般應該在安裝配置完成後使用如下命令: