想到之前被婊的經驗,所以特別寫上這篇。
Linux 裡面有一個內建的指令 chattr,這個指令其實蠻婊人的,chattr 是用來處理檔案屬性,和一般我們用 chmod、chown 的方式不同 (r、w、x)
chattr 常用屬性:
- a:只能以附加的方式寫入(append only)。
- c:自動壓縮(compressed),Linux 核心會自動把檔案的內容先壓縮後,再寫入硬碟,而在讀取但內容時,Linux 核心也會自動進行解壓縮。
- d:在使用 dump 時,這種檔案會被排除(no dump)。
- i:檔案不可以被更動(immutable),不可以寫入、刪除、建立連結檔等。
- s:安全刪除檔案(secure deletion),當檔案被刪除時,系統會將所有硬碟上的檔案內容用 0 取代,確保檔案資料確實刪除。
- A:不要更新檔案存取時間(no atime updates)。
- C:關閉 copy-on-write(no copy on write)。
- S:當檔案內容更動時,馬上同步寫入硬碟(synchronous updates)。
但其中 -i 這個參數能夠賦予檔案不可被更動的權限(immutable)
$ sudo chattr +i text.txt
透過 ls 是無法看到 chattr +i 的權限,必須用 lsattr 來查看:
$ sudo lsattr text.txt ----i--------e-- text.txt
會出現 i 這個屬性
當你用 root 打開 text.txt 的話都只有 read only 的權限
要再次解鎖只能用 chattr 把 i 屬性拿掉
$ sudo chattr -i text.txt
相同性質的還有 -a,或是加上 -R 讓整個目錄生效。
本質上 chattr 是一個不錯的工具,但當你的系統是多人管理的環境,而其中一人使用了這個 chattr +i 而未告知的話,其他管理者若沒有經驗就會處於使用 root 也沒有權限編輯的窘境