從linux的1.1系列核心開始,ext2檔案系統就開始支援一些針對檔案和目錄的額外標記或者叫作屬性(attribute)。在2.2和2.4系列的內 核中,ext3檔案系統支援以下屬性的設定和查詢:
a
atime。告訴系統不要修改對這個檔案的最後訪問時間。
s
sync。一旦應用程式對這個檔案執行了寫操作,使系統立刻把修改的結果寫到磁碟。
a
i
immutable。系統不允許對這個檔案進行任何的修改。如果目錄具有這個屬性,那麼任何的程序只能修改目錄之下的檔案,不允 許建立和刪除檔案。
d
no dump。在進行檔案系統備份時,dump程式將忽略這個檔案。
c
compress。系統以透明的方式壓縮這個檔案。從這個檔案讀取時,返回的是解壓之後的資料;而向這個檔案中寫入資料時,數 據首先被壓縮之後,才寫入磁碟。
s
secure delete。讓系統在刪除這個檔案時,使用0填充檔案所在的區域。
u
undelete。當乙個應用程式請求刪除這個檔案,系統會保留其資料塊以便以後能夠恢復刪除這個檔案。
但是,雖然檔案系統能夠接受並保留指示每個屬性的標誌,但是這些屬性不一定有效,這依賴於核心和各種應用程式的版本。下表顯示每個版本支援的屬性標誌:
* 允許設定這個標誌並使設定生效
i 允許設定這個標誌但忽略其值
- 完全忽略這個標誌
1.0 1.2 2.0 2.2 2.4
a - - * * *
s * * * * *
a - * * * *
i - * * * *
d - * * * *
c i i i i i
s * * i i i
u i i i i i
雖然早期的核心版本支援安全刪除特徵,但是從1.3系列的核心開始,開發者拋棄的對這個特徵的實現,因為它似乎只能夠提高一點點 的安全性,而糟糕的是它會給不熟悉安全刪除繼承問題的使用者造成安全的假象。
在對具有a屬性的檔案進行操作時,a屬性可以提高一定的效能。而s屬性能夠最大限度的保障檔案的完整性。
本文將主要討論a屬性和i屬性,因為這兩個屬性對於提高檔案系統的安全性和保障檔案系統的完整性有很大的好處。同樣,一些開放 原始碼的bsd系統(如:freebsd和openbsd),在其ufs或者ffs實現中也支援類似的特徵。
2.使用什麼命令設定和顯示ext3檔案系統的屬性
lsattr命令只支援很少的選項,其選項如下:
-a
列出目錄中的所有檔案,包括以.開頭的檔案。
-d
以和檔案相同的方式列出目錄,並顯示其包含的內容。
-r
以遞迴的方式列出目錄的屬性及其內容。
-v
列出檔案版本(用於網路檔案系統nfs)。
chattr命令可以通過以下三種方式執行:
chattr +si test.txt
給test.txt檔案新增同步和不可變屬性。
chattr -ai test.txt
chattr =aia test.txt
使test.txt檔案只有a、i和a屬性。
最後,每個命令都支援-r選項,用於遞迴地對目錄和其子目錄進行操作。
3.ext3屬性和檔案許可權的區別
幾乎所有的系統管理員都理解unix風格檔案系統的許可權和所有者以及ls命令的顯示,例如
[root@typhoid nixe0n]# ls -al test*
-rw-rw-r-- 1 nixe0n users 0 nov 17 17:02 test.conf
-rw-rw-r-- 1 nixe0n users 0 nov 17 17:02 test.log
-rw-rw-r-- 1 nixe0n users 0 nov 16 19:41 test.txt
從ls的輸出結果看,這些檔案屬於使用者nixe0n,而nixe0n所在的使用者組是users。使用者nixe0n本人和users使用者組的成員尉有具有對檔案 的修改許可權,而其他的使用者只有讀取檔案的許可權。下面是lsattr命令的輸出:
輸出結果顯示,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屬性檔案進行修改,除非國旗動到單使用者狀態。
但是,由於引入了更為靈活的核心能力特徵 (kernel capabilities),以後的核心不再支援安全層。使用核心能力,也可以實現類似的 限制。工具lcap用來查詢和調整核心能力約束集(kernel capabilities bounding set)。在啟動指令碼中加入以下命令,就可以實現對具有i屬 性和a屬性檔案的保護:
lcap cap_linux_immutablelcap cap_sys_rawio
第乙個命令刪除任何使用者(包括超級使用者)對i標誌的修改能力。第二個命令刪除任何使用者(主要針對超級使用者)對塊裝置的原始訪問 (raw access)能力,防止一些技術高超的攻擊者直接修改檔案系統索引節點的immutable域。btw,在系統啟動時,cap_sys_rawio能 力應該直接刪除,這個能力是乙個非常大的潛在威脅。高明的攻擊者獲得了超級使用者許可權之後,通過/dev/kmem裝置可以直接修改核心 記憶體。通過這種方式,可以破壞系統的核心能力約束集(kernel capabilities bounding)。如果沒有任何引數,會列出核心支援的能力和目 前生效的核心能力。
一旦乙個核心能力被刪除,就只有在系統重新啟動,進入到單使用者模式才能刪除能力限制。
感興趣的讀者,可以從下面的連線中獲得更為詳細的能力方面的知識:
lcap - linux核心能力約束集編輯器(linux kernel capabilities bounding set editor)
4.我們應該使用chattr做什麼?
主機直接暴露在internet或者位於其它危險的環境,有很多shell帳戶或者提供http和ftp等網路服務,一般應該在安裝配置完成後使用 如下命令:
chattr -r +i /bin /boot /etc /lib /sbinchattr -r +i /usr/bin /usr/include /usr/lib /usr/sbin
chattr +a /var/log/messages /var/log/secure (...)
當然,如果使用這種安全措施,需要系統管理員修改管理方式。
rpm -qipl foopackage.rpm
/bin/sbin
/usr/bin
/usr/sbin
/usr/man
/lib
/etc
注意,如果你需要公升級/usr/sbin/someprogram,你應該去掉someprogram檔案以及目錄/usr/sbin的immutable屬性。
擴充套件ext3檔案的容量
1.使用dd建立1024m的塊檔案 原來的檔案為533m 命令 dd if dev zero of tmp test.ext3 bs 1024 count 1024000 說明 dd是linux unix下的乙個非常有用的命令,作用是用指定大小的塊拷貝乙個檔案.引數if 輸入檔案,of 輸出檔案,b...
ext3 檔案偏移 到 磁碟block
首先說明ext3檔案系統和ext2檔案系統的區別。ext3檔案系統是帶有日誌的ext2檔案系統,在設計時就秉承盡可能與ext2檔案系統相容的理念,因此他的檔案系統資料結構與ext2檔案系統的本質上是相同的。事實上可以把乙個ext3檔案系統解除安裝後做為ext2檔案系統重新安裝。反之也可以把建立日誌的...
ext3檔案系統反刪除利器 ext3grep
linux作為企業級伺服器,資料的安全性至關重要,任何資料德爾丟失和誤刪都是不可容忍的!最近我接觸到一款軟體 ext3grep,它可以恢復誤刪的資料,下面簡單講解一下這個軟體。ext3grep的恢復原理 利用ext3grep恢復檔案時並不依賴特定文字格式。首先ext3grep通過檔案系統的root ...