如何使用chattr命令使Linux檔案屬性不可改變

如何使用chattr命令使Linux檔案屬性不可改變

你是否曾不小心刪除了一個重要的配置檔案或覆蓋了你需要的更改?Linux 提供了一個強大但鮮為人知的功能,可以幫助避免這些情況的發生:檔案不可更改性。

檔案不可更改意味著它不能被修改、刪除、重新命名或連結–即使是擁有 root 許可權的使用者。這為關鍵系統檔案或重要資料提供了額外的保護。

在本教學指南中,我們將介紹如何在 Linux 中使用 chattr 命令使檔案屬性不可更改,嘗試修改受保護檔案時會發生什麼,以及如何在需要時移除這種保護。

在Linux中使檔案不可更改

我們將使用 chattr(更改屬性)命令來使檔案不可更改。普通的檔案許可權只根據使用者許可權來限制訪問,而檔案屬性則不同,它可以阻止特定操作,不管是誰在嘗試。

命令語法

要使檔案不可更改,可以使用帶有 +i 標誌的 chattr 命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chattr +i filename.txt
<i></i>
sudo chattr +i filename.txt <i></i>
sudo chattr +i filename.txt

你需要 root 許可權(使用 sudo )才能更改檔案屬性,尤其是系統檔案。如果你不熟悉 sudo,請檢視我們的指南,瞭解如何在 Linux 中使用 sudo 命令

檔案不可變時會發生什麼?

一旦檔案被標記為不可變,一些操作就會出現“操作不允許”的錯誤:

  • 無法修改檔案內容
  • 不能重新命名檔案
  • 不能刪除檔案
  • 不能建立檔案的硬連結
  • 不能更改許可權或所有權

讓我們舉例說明修改不可變檔案時會發生什麼:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo chattr +i important.conf
$ rm important.conf
rm: cannot remove 'important.conf': Operation not permitted
$ mv important.conf renamed.conf
mv: cannot move 'important.conf' to 'renamed.conf': Operation not permitted
$ echo "new content" > important.conf
bash: important.conf: Operation not permitted
<i></i>
$ sudo chattr +i important.conf $ rm important.conf rm: cannot remove 'important.conf': Operation not permitted $ mv important.conf renamed.conf mv: cannot move 'important.conf' to 'renamed.conf': Operation not permitted $ echo "new content" > important.conf bash: important.conf: Operation not permitted <i></i>
$ sudo chattr +i important.conf
$ rm important.conf
rm: cannot remove 'important.conf': Operation not permitted
$ mv important.conf renamed.conf
mv: cannot move 'important.conf' to 'renamed.conf': Operation not permitted
$ echo "new content" > important.conf
bash: important.conf: Operation not permitted

請注意,即使檔案許可權正確,這些操作也會失敗。這就是不可變屬性的威力–它可以覆蓋正常的許可權檢查。

請記住,當檔案不可變時,即使是根使用者也不能修改它,直到不可變屬性被移除。

檢查檔案是否不可變

在嘗試修改檔案之前,你可能想檢查一下檔案是否設定了不可變屬性。你可以使用lsattr(屬性列表)命令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ lsattr filename.txt
----i--------e---- filename.txt
<i></i>
$ lsattr filename.txt ----i--------e---- filename.txt <i></i>
$ lsattr filename.txt
----i--------e---- filename.txt

i 標誌的存在表明檔案是不可變的。

何時刪除不可更改性

在以下情況下應移除不可更改性

  • 需要更新配置檔案
  • 正在進行系統維護
  • 升級會修改受保護檔案的軟體
  • 不再需要特定檔案的保護

好的做法是先移除不可更改性,然後進行修改,完成後再將檔案重新設定為不可更改。

移除檔案的不可更改性

當你需要更新或管理不可變檔案時,首先需要移除不可變屬性。這需要再次使用 chattr 命令,但要使用 -i 標誌:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chattr -i filename.txt
<i></i>
sudo chattr -i filename.txt <i></i>
sudo chattr -i filename.txt

刪除不可變屬性後,就可以執行所有正常的檔案操作了:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$ sudo chattr -i important.conf
$ echo "Updated content" > important.conf # Now works
$ mv important.conf renamed.conf # Now works
$ rm renamed.conf # Now works
<i></i>
$ sudo chattr -i important.conf $ echo "Updated content" > important.conf # Now works $ mv important.conf renamed.conf # Now works $ rm renamed.conf # Now works <i></i>
$ sudo chattr -i important.conf
$ echo "Updated content" > important.conf   # Now works
$ mv important.conf renamed.conf            # Now works
$ rm renamed.conf                          # Now works

檔案不可更改性的實際用例

讓檔案不可變不僅僅是一個很酷的技巧,對於系統管理員和有安全意識的使用者來說,它還有一些實際應用:

1. 保護關鍵配置檔案

/etc/passwd/etc/shadow 和 /etc/hosts 等系統配置檔案包含重要資訊。讓它們不可更改,可以防止意外或惡意更改,以免危及系統。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chattr +i /etc/passwd /etc/shadow /etc/hosts
<i></i>
sudo chattr +i /etc/passwd /etc/shadow /etc/hosts <i></i>
sudo chattr +i /etc/passwd /etc/shadow /etc/hosts

切記在需要合法更新時暫時刪除不變性,之後再重新應用。

2. 防止意外刪除檔案

我們都有過不小心刪除重要檔案的經歷。對於你很少更改但一直需要的檔案,不可更改性可以讓你高枕無憂:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chattr +i ~/Documents/important_records.pdf
<i></i>
sudo chattr +i ~/Documents/important_records.pdf <i></i>
sudo chattr +i ~/Documents/important_records.pdf

3. 加固防範惡意軟體

有些惡意軟體試圖修改系統檔案或配置檔案。透過使關鍵系統檔案不可更改,可以防止惡意軟體成功入侵系統,即使它以某種方式獲得了更高的許可權。

4. 管理生產環境

在穩定性至關重要的生產環境中,可以使部署配置不可變,以防止意外更改導致中斷:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chattr +i /etc/nginx/nginx.conf
sudo chattr +i /etc/apache2/apache2.conf
<i></i>
sudo chattr +i /etc/nginx/nginx.conf sudo chattr +i /etc/apache2/apache2.conf <i></i>
sudo chattr +i /etc/nginx/nginx.conf
sudo chattr +i /etc/apache2/apache2.conf

5. 保護啟動檔案

使引導檔案不可變有助於防止引導扇區惡意軟體,並確保系統啟動可靠:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
sudo chattr +i /boot/grub/grub.cfg
<i></i>
sudo chattr +i /boot/grub/grub.cfg <i></i>
sudo chattr +i /boot/grub/grub.cfg

6. 建立只寫一次的檔案

對於建立後永遠不能更改的日誌或記錄(出於合規或安全原因),可以建立檔案、新增內容,然後使其不可變:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
echo "Initial log entry: $(date)" > audit_log.txt
sudo chattr +i audit_log.txt
<i></i>
echo "Initial log entry: $(date)" > audit_log.txt sudo chattr +i audit_log.txt <i></i>
echo "Initial log entry: $(date)" > audit_log.txt
sudo chattr +i audit_log.txt

請記住,不變性不能取代備份!雖然它可以防止修改或刪除,但無法防止硬體故障或其他可能損壞儲存的問題。

小結

帶有不可變標誌的 chattr 命令為保護 Linux 系統中的重要檔案提供了一種簡單而強大的方法。只需使用兩個命令 chattr +i (使檔案不可變)和 chattr -i(刪除不可變),你就能為最重要的檔案新增額外的保護層。

這項功能的特別之處在於

  • 不受檔案許可權或使用者許可權的限制
  • 可防止意外和惡意操作
  • 可根據需要輕鬆應用和刪除
  • 無需額外安裝軟體(內建在 Linux 中)

雖然不能取代良好的備份實踐或適當的系統管理,但檔案不變性是 Linux 安全工具包中的一個重要工具。它建立了一個簡單的“鎖”,需要特意操作才能移除,可以防止許多常見的檔案災難。

其他有用的檔案屬性

除了不變性,chattr 命令還提供了其他一些有用的屬性:

  • a(僅限附加):開啟檔案只能用於新增資料,不能編輯現有內容
  • s(安全刪除):刪除檔案時,資料塊清零並寫入磁碟
  • A(無時間更新):訪問檔案時,檔案的訪問時間記錄不會被修改
  • c(壓縮):檔案在磁碟上自動壓縮,讀取時自動解壓縮

下一次,當你有一個重要的配置檔案需要保護,或者只是想確保你不會不小心刪除你的納稅記錄時,請記住 chattr +i 的簡單功能。它可能會拯救你的一天!

評論留言