如何在Linux下創建一個不可變更的文件
在這個教程中,我會示範如果使用chattr
來讓Linux中的文件不可變更。
chattr
和lsattr
命令是e2fsprogs包的一部分,它在所有現代Linux發行版都預裝了。
下面是chattr
的基本語法。
$ chattr [-RVf] [操作符][標誌位] 文件...
其中操作符可以是「+」(把選定的標誌位添加到標誌位列表)、「-」(從標誌位列表中移除選定的標誌位)、或者「=」(強制使用選定的標誌位)。
下面是一些可用的標誌位。
- a: 只能以追加模式打開。
- A: 不能更新atime(文件訪問時間)。
- c: 當被寫入磁碟時被自動壓縮。
- C: 關掉「寫時複製」。
- i: 不可變更。
- s: 通過自動歸零來安全刪除。(LCTT 譯註:一般情況文件被刪後內容不會被修改,改標誌位會使得文件被刪後原有內容被「0」取代)
「不可變更」標誌位
為了讓一個文件不可變更,你需要按照如下方法為這個文件添加「不可變更」標誌位。例如,對/etc/passwd文件做防寫:
$ sudo chattr +i /etc/passwd
注意設置或取消一個文件的「不可變更」標誌位是需要root用戶許可權的。現在檢查該文件「不可變更」標誌位是否被添加上了。
$ lsattr /etc/passwd
一旦文件被設置為不可變更,任何用戶都將無法修改該文件。即使是root用戶也不可以修改、刪除、覆蓋、移動或者重命名這個文件。如果你想再次修改這個文件,需要先把「不可變更」標誌位取消了。
用如下命令取消「不可變更」標誌位:
$ sudo chattr -i /etc/passwd
如果你想讓一個目錄(比如/etc)連同它下邊的所有內容不可變更,使用「-R」選項:
$ sudo chattr -R +i /etc
「只可追加」標誌位
另一個有用的的標誌位是「只可追加」,它只允許文件內容被追加的方式修改。你不能覆蓋或者刪除一個設置了「只可追加」標誌位的文件。這個標誌位在你想避免日誌文件被意外清理掉的情況很有用。
和「不可變更」標誌位類似,你可以使用如下命令讓文件變成「只可追加」模式:
$ sudo chattr +a /var/log/syslog
注意當你複製一個「不可變更」或者「只可追加」的文件到其他地方後,新文件不會保留這些標誌位!
結論
在這個教程中,我展示了如何使用chattr
和lsattr
命令來管理額外的文件標誌位,來避免文件被篡改(意外或者其他情況)的方法。注意你不能將chattr
作為一個安全措施,因為「不可變更」標誌位可以很容易被取消掉。解決這個問題的一個可能的方式是限制chattr
命令自身的可用性,或者去掉CAPLINUXIMMUTABLE內核權能標誌。關於chattr
以及可用的標誌位的更多細節,請參考它的man手冊。
via: http://xmodulo.com/make-file-immutable-linux.html
作者:Dan Nanni 譯者:goreliu 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive