第十一章 用chattr提高ext2文件係統的安全
簡介
眾所周知,Linux內核中有大量安全特征。其中有很多的特征有著廣泛的應用,但是絕大多數的係統管理員(包括一些資深係統管理員)都忽略了EXT2文件係統的屬性(attribute)。Linux的這種安全特征甚至遠沒有Lids和Tripwire等外部安全工具受關注。本文將詳細介紹EXT2文件係統的屬性已經如何使用這個特征保護係統的安全。
1.什麼是ext2的屬性(attribute)
從Linux的1.1係列內核開始,ext2文件係統就開始支持一些針對文件和目錄的額外標記或者叫作屬性(attribute)。在2.2和2.4係列的內核中,ext2文件係統支持以下屬性的設置和查詢:
A
Atime。告訴係統不要修改對這個文件的最後訪問時間。
S
Sync。一旦應用程序對這個文件執行了寫操作,使係統立刻把修改的結果寫到磁盤。
a
AppendOnly。係統隻允許在這個文件之後追加數據,不允許任何進程覆蓋或者截斷這個文件。如果目錄具有這個屬性,係統將隻允許在這個目錄下建立和修改文件,而不允許刪除任何文件。
i
Immutable。係統不允許對這個文件進行任何的修改。如果目錄具有這個屬性,那麼任何的進程隻能修改目錄之下的文件,不允許建立和刪除文件。
d
Nodump。在進行文件係統備份時,dump程序將忽略這個文件。
c
Compress。係統以透明的方式壓縮這個文件。從這個文件讀取時,返回的是解壓之後的數據;而向這個文件中寫入數據時,數據首先被壓縮之後,才寫入磁盤。
s
SecureDelete。讓係統在刪除這個文件時,使用0填充文件所在的區域。
Undelete。當一個應用程序請求刪除這個文件,係統會保留其數據塊以便以後能夠恢複刪除這個文件。
但是,雖然文件係統能夠接受並保留指示每個屬性的標誌,但是這些屬性不一定有效,這依賴於內核和各種應用程序的版本。下表顯示每個版本支持的屬性標誌:
*允許設置這個標誌並使設置生效
i允許設置這個標誌但忽略其值
-完全忽略這個標誌
1.01.22.02.22.4
A--***
S*****
a-****
i-****
d-****
ciiiii
s**iii
uiiiii
雖然早期的內核版本支持安全刪除特征,但是從1.3係列的內核開始,開發者拋棄的對這個特征的實現,因為它似乎隻能夠提高一點點的安全性,而糟糕的是它會給不熟悉安全刪除繼承問題的用戶造成安全的假象。
在對具有A屬性的文件進行操作時,A屬性可以提高一定的性能。而S屬性能夠最大限度的保障文件的完整性。
本文將主要討論a屬性和i屬性,因為這兩個屬性對於提高文件係統的安全性和保障文件係統的完整性有很大的好處。同樣,一些開放源碼的BSD係統(如:FreeBSD和OpenBSD),在其UFS或者FFS實現中也支持類似的特征。
2.使用什麼命令設置和顯示ext2文件係統的屬性
在任何情況下,標準的ls命令都不會一個文件或者目錄的擴展屬性。ext2文件係統工具包中有兩個工具--chattr和lsattr,專門用來設置和查詢文件屬性。因為ext2是標準的Linux文件係統,因此幾乎所有的發布都有e2fsprogs工具包。如果由於某些原因,係統中沒有這個工具,你可以從以下地址下載這個工具包的源代碼編譯並安裝:
http://sourceforge.net/projects/e2fsprogs
lsattr命令隻支持很少的選項,其選項如下:
-a
列出目錄中的所有文件,包括以.開頭的文件。
-d
以和文件相同的方式列出目錄,並顯示其包含的內容。
-R
以遞歸的方式列出目錄的屬性及其內容。
-v
列出文件版本(用於網絡文件係統NFS)。
chattr命令可以通過以下三種方式執行:
chattr+Sitest.txt
給test.txt文件添加同步和不可變屬性。
chattr-aitest.txt
把文件的隻擴展(append-only)屬性和不可變屬性去掉。