[譯] 如何在Linux下建立一個不可變動的文件

假如你想對Linux中的一些重要文件作寫保護,這樣它們就不能被刪除或者被篡改爲以前的版本或者其餘東西,或者在其餘狀況下,你可能想避免某些配置文件被軟件自動修改。使用chownchmod命令修改文件的歸屬關係或者權限位是處理這種狀況的一個解決方法,但這並不完美,由於這樣沒法避免有root權限的操做。這時chattr就派上用場了。html

chattr是一個能夠設置或取消文件的標誌位的Linux命令,它和標準的文件權限(讀、寫、執行)是分離的。與此相關的另外一個命令是lsattr,它能夠顯示文件的哪些標誌位被設置上了。最初只有EXT文件系統(EXT2/3/4)支持chattrlsattr所管理的標誌位,但如今不少其餘的原生的Linux文件系統都支持了,好比XFS、Btrfs、ReiserFS等等。linux

在這個教程中,我會示範若是使用chattr來讓Linux中的文件不可變動。git

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

下面是chattr的基本語法。安全

$ chattr [-RVf] [操做符][標誌位] 文件...

其中操做符能夠是「+」(把選定的標誌位添加到標誌位列表)、「-」(從標誌位列表中移除選定的標誌位)、或者「=」(強制使用選定的標誌位)。微信

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

  • a: 只能以追加模式打開。
  • A: 不能更新atime(文件訪問時間)。
  • c: 當被寫入磁盤時被自動壓縮。
  • C: 關掉「寫時複製」。
  • i: 不可變動。
  • s: 經過自動歸零來安全刪除。(LCTT 譯註:通常狀況文件被刪後內容不會被修改,改標誌位會使得文件被刪後原有內容被「0」取代)

「不可變動」標誌位

爲了讓一個文件不可變動,你須要按照以下方法爲這個文件添加「不可變動」標誌位。例如,對/etc/passwd文件作寫保護:翻譯

$ sudo chattr +i /etc/passwd

注意設置或取消一個文件的「不可變動」標誌位是須要root用戶權限的。如今檢查該文件「不可變動」標誌位是否被添加上了。日誌

$ lsattr /etc/passwd

一旦文件被設置爲不可變動,任何用戶都將沒法修改該文件。即便是root用戶也不能夠修改、刪除、覆蓋、移動或者重命名這個文件。若是你想再次修改這個文件,須要先把「不可變動」標誌位取消了。code

用以下命令取消「不可變動」標誌位:

$ sudo chattr -i /etc/passwd

若是你想讓一個目錄(好比/etc)連同它下邊的全部內容不可變動,使用「-R」選項:

$ sudo chattr -R +i /etc

「只可追加」標誌位

另外一個有用的的標誌位是「只可追加」,它只容許文件內容被追加的方式修改。你不能覆蓋或者刪除一個設置了「只可追加」標誌位的文件。這個標誌位在你想避免日誌文件被意外清理掉的狀況頗有用。

和「不可變動」標誌位相似,你可使用以下命令讓文件變成「只可追加」模式:

$ sudo chattr +a /var/log/syslog

注意當你複製一個「不可變動」或者「只可追加」的文件到其餘地方後,新文件不會保留這些標誌位!

結論

在這個教程中,我展現瞭如何使用chattrlsattr命令來管理額外的文件標誌位,來避免文件被篡改(意外或者其餘狀況)的方法。注意你不能將chattr做爲一個安全措施,由於「不可變動」標誌位能夠很容易被取消掉。解決這個問題的一個可能的方式是限制chattr命令自身的可用性,或者去掉CAP_LINUX_IMMUTABLE內核權能標誌。關於chattr以及可用的標誌位的更多細節,請參考它的man手冊。


via: http://xmodulo.com/make-file-...

做者:Dan Nanni
譯者:goreliu
校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出

付費解決 Windows、Linux、Shell、C、C++、AHK、Python、JavaScript、Lua 等領域相關問題,靈活訂價,歡迎諮詢,微信 ly50247。

相關文章
相關標籤/搜索