天天看點

(轉)Linux的chattr與lsattr指令詳解

PS:有時候你發現用root權限都不能修改某個檔案,大部分原因是曾經用chattr指令鎖定該檔案了。chattr指令的作用很大,其中一些功能是由​​Linux​​核心版本來支援的,不過現在生産絕大部分跑的​​linux​​系統都是2.6以上核心了。通過chattr指令修改屬性能夠提高系統的安全性,但是它并不适合所有的目錄。chattr指令不能保護/、/dev、/tmp、/var目錄。lsattr指令是顯示chattr指令設定的檔案屬性。

這兩個指令是用來檢視和改變檔案、目錄屬性的,與chmod這個指令相比,chmod隻是改變檔案的讀寫、執行權限,更底層的屬性控制是由chattr來改變的。

chattr指令的用法:chattr [ -RVf ] [ -v version ] [ mode ] files…

最關鍵的是在[mode]部分,[mode]部分是由+-=和[ASacDdIijsTtu]這些字元組合的,這部分是用來控制檔案的

屬性。

​ + :在原有參數設定基礎上,追加參數。 - :在原有參數設定基礎上,移除參數。 = :更新為指定參數設定。 A:檔案或目錄的 atime (access time)不可被修改(modified), 可以有效預防例如手提電腦磁盤I/O錯誤的發生。 S:硬碟I/O同步選項,功能類似sync。 a:即append,設定該參數後,隻能向檔案中添加資料,而不能删除,多用于伺服器日志檔案安全,隻有root才能設定這個屬性。 c:即compresse,設定檔案是否經壓縮後再存儲。讀取時需要經過自動解壓操作。 d:即no dump,設定檔案不能成為dump程式的備份目标。 i:設定檔案不能被删除、改名、設定連結關系,同時不能寫入或新增内容。i參數對于檔案 系統的安全設定有很大幫助。 j:即journal,設定此參數使得當通過mount參數:data=ordered 或者 data=writeback 挂 載的檔案系統,檔案在寫入時會先被記錄(在journal中)。如果filesystem被設定參數為 data=journal,則該參數自動失效。 s:保密性地删除檔案或目錄,即硬碟空間被全部收回。 u:與s相反,當設定為u時,資料内容其實還存在磁盤中,可以用于undeletion。 各參數選項中常用到的是a和i。a選項強制隻可添加不可删除,多用于日志系統的安全設定。而i是更為嚴格的安全設定,隻有superuser (root) 或具有CAP_LINUX_IMMUTABLE處理能力(辨別)的程序能夠施加該選項。 ​

應用舉例:

1、用chattr指令防止系統中某個關鍵檔案被修改:

​# chattr +i /etc/resolv.conf​

然後用mv /etc/resolv.conf等指令操作于該檔案,都是得到Operation not permitted 的結果。vim編輯該檔案時會提示W10: Warning: Changing a readonly file錯誤。要想修改此檔案就要把i屬性去掉: chattr -i /etc/resolv.conf

# lsattr /etc/resolv.conf

會顯示如下屬性

​----i-------- /etc/resolv.conf​

2、讓某個檔案隻能往裡面追加資料,但不能删除,适用于各種日志檔案:

​# chattr +a /var/log/messages​

技術連結