在 Linux 中有一個(gè) chattr 指令,它可以用來(lái)設置文件的各種屬性,防止文件被刪除或是更改,即使是有管理者權限的時(shí)候也無(wú)法改動(dòng)。

在 Linux 系統中有時(shí)候我們會(huì )需要保護某些重要的文件,避免這些文件不小心被更改或是刪除,像是 /etc 下面的一些系統設置文件,我們可能會(huì )不希望系統的套件管理程序在升級套件時(shí)更改掉我們已經(jīng)設置好的設置檔,當然您也可以使用 chown 與 chmod 將重要的文件改成 root 管理者才能夠寫(xiě)入,不過(guò)這也很難預防您在使用 root 權限的時(shí)候誤刪文件的問(wèn)題。
chattr 是一個(gè)可以用來(lái)設置 Linux 文件屬性的指令,這些屬性跟一般使用 chmod 所設置的讀取(read)、寫(xiě)入(write)與執行(execute)不同,chattr 可以設置更多其他的屬性,這些屬性原本只有在 EXT 系列的文件系統(EXT2/3/4)有支援,而現在大部份 Linux 下面的文件系統都有支援了,如 XFS、Btrfs 與 ReiserFS 等。
chattr 指令是用來(lái)設置文件屬性用的,而 lsattr 指令則可用來(lái)查看文件的屬性,這兩個(gè)指令是包含在 e2fsprogs 套件之中,一般的 Linux 發(fā)行版通常都會(huì )預先安裝好。以下是使用教學(xué)與一些常用的范例。
基本使用方式
chattr [-RVf] [operator][attribute(s)] files...其中 operator 可以是 、- 或 =,后面再加上要設置的 attribute(s),這跟 chmod 指令的用法類(lèi)似,以下是一些常用的屬性:
chattr 還有許多比較不常用的屬性這里沒(méi)有列出來(lái),有興趣的人可以查閱 chattr 的在線(xiàn)手冊。
接著(zhù)示范如何查看一個(gè)文件的屬性,首先建立一個(gè)測試用的文件:
date > date.txt
接著(zhù)使用 lsattr 來(lái)查看這個(gè)文件的屬性:
lsattr date.txt
輸出會(huì )像這樣:
-------------e-- date.txt
這里的輸出跟 ls -l 的輸出類(lèi)似,如果是 - 則代表該屬性沒(méi)有被設置,如果有被設置的話(huà),就會(huì )出現對應的英文字母。
讓文件不可以被改動(dòng)
sudo chattr i date.txt
然后用 lsattr 檢查一下:
lsattr date.txt
輸出會(huì )像這樣:
----i--------e-- date.txt
我們可以測試一下用 rm 指令刪除這的文件:
rm date.txt
這時(shí)候應該就會(huì )出現這樣的信息:
rm: remove write-protected regular file ‘date.txt’?
就算回答 y,也還是會(huì )出現不可以改動(dòng)的錯誤信息:
rm: cannot remove ‘date.txt’: Operation not permitted
而且就算用管理者權限執行刪除的指令:
sudo rm date.txt
還是一樣:
rm: cannot remove ‘date.txt’: Operation not permitted
這樣就可以確保文件不會(huì )被誤刪。
如果真的要刪除這個(gè)文件,就先必須把 i 屬性拿掉才行:
sudo chattr -i date.txt
rm date.txt
如果需要將整個(gè)目錄底下所有的文件都加上 i 屬性,可以使用 -R 參數,例如:
sudo chattr -R i /etc
讓文件只能增加內容,不能刪除
有些重要的系統記錄檔也是常常會(huì )需要保護的對象,但這些紀錄檔會(huì )不斷的升級,無(wú)法直接使用 i 屬性,如果想要避免誤刪這類(lèi)的文件,可以使用 a 屬性,設置這個(gè)屬性可以讓文件只能增加內容,不可以刪除或覆寫(xiě),例如:
sudo chattr a /var/log/syslog
最后提醒一點(diǎn),如果您將設置有 i 或是 a 屬性的文件復制成另外一個(gè)新的文件時(shí),這些屬性并不會(huì )跟著(zhù)被復制,所以如果新的文件也需要被保護,就要重新設置。
聯(lián)系客服