首頁 > 軟體

如何在Linux下建立一個不可變更的檔案

2020-06-16 18:00:09

假如你想對Linux中的一些重要檔案做防寫,這樣它們就不能被刪除或者被篡改成之前的版本或者其他東西,或者在其他情況下,你可能想避免某些組態檔被軟體自動修改。使用chownchmod命令修改檔案的歸屬關係或者許可權位是處理這種情況的一個解決方法,但這並不完美,因為這樣無法避免有root許可權的操作。這時chattr就派上用場了。

chattr是一個可以設定或取消檔案的標誌位的Linux命令,它和標準的檔案許可權(讀、寫、執行)是分離的。與此相關的另一個命令是lsattr,它可以顯示檔案的哪些標誌位被設定上了。最初只有EXT檔案系統(EXT2/3/4)支援chattrlsattr所管理的標誌位,但現在很多其他的原生的Linux檔案系統都支援了,比如XFS、Btrfs、ReiserFS等等。

在這個教學中,我會示範如果使用chattr來讓Linux中的檔案不可變更。

chattrlsattr命令是e2fsprogs包的一部分,它在所有現代Linux發行版都預裝了。

下面是chattr的基本語法。

  1. $ chattr [-RVf][操作符][標誌位]檔案...

其中操作符可以是“+”(把選定的標誌位新增到標誌位列表)、“-”(從標誌位列表中移除選定的標誌位)、或者“=”(強制使用選定的標誌位)。

下面是一些可用的標誌位。

  • a: 只能以追加模式開啟。
  • A: 不能更新atime(檔案存取時間)。
  • c: 當被寫入磁碟時被自動壓縮。
  • C: 關掉“寫時複製”。
  • i: 不可變更。
  • s: 通過自動歸零來安全刪除。(LCTT 譯註:一般情況檔案被刪後內容不會被修改,改標誌位會使得檔案被刪後原有內容被“0”取代)

“不可變更”標誌位

為了讓一個檔案不可變更,你需要按照如下方法為這個檔案新增“不可變更”標誌位。例如,對/etc/passwd檔案做防寫:

  1. $ sudo chattr +i /etc/passwd

注意設定或取消一個檔案的“不可變更”標誌位是需要root使用者許可權的。現在檢查該檔案“不可變更”標誌位是否被新增上了。

  1. $ lsattr /etc/passwd

一旦檔案被設定為不可變更,任何使用者都將無法修改該檔案。即使是root使用者也不可以修改、刪除、覆蓋、移動或者重新命名這個檔案。如果你想再次修改這個檔案,需要先把“不可變更”標誌位取消了。

用如下命令取消“不可變更”標誌位:

  1. $ sudo chattr -i /etc/passwd

如果你想讓一個目錄(比如/etc)連同它下邊的所有內容不可變更,使用“-R”選項:

  1. $ sudo chattr -R +i /etc

“只可追加”標誌位

另一個有用的的標誌位是“只可追加”,它只允許檔案內容被追加的方式修改。你不能覆蓋或者刪除一個設定了“只可追加”標誌位的檔案。這個標誌位在你想避免紀錄檔檔案被意外清理掉的情況很有用。

和“不可變更”標誌位類似,你可以使用如下命令讓檔案變成“只可追加”模式:

  1. $ sudo chattr +a /var/log/syslog

注意當你複製一個“不可變更”或者“只可追加”的檔案到其他地方後,新檔案不會保留這些標誌位!

 

結論

在這個教學中,我展示了如何使用chattrlsattr命令來管理額外的檔案標誌位,來避免檔案被篡改(意外或者其他情況)的方法。注意你不能將chattr作為一個安全措施,因為“不可變更”標誌位可以很容易被取消掉。解決這個問題的一個可能的方式是限制chattr命令自身的可用性,或者去掉CAPLINUXIMMUTABLE核心權能標誌。關於chattr以及可用的標誌位的更多細節,請參考它的man手冊。

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-05/117712.htm


IT145.com E-mail:sddin#qq.com