歡迎光臨
每天分享高質量文章

如何在 Linux 系統中防止檔案和目錄被意外的刪除或修改 | Linux 中國

有時,我會不小心的按下 SHIFT+DELETE來刪除我的檔案資料。是的,我是個笨蛋,沒有再次確認下我實際準備要刪除的東西。
— Sk


致謝
編譯自 | https://www.ostechnix.com/prevent-files-folders-accidental-deletion-modification-linux/ 
 作者 | Sk
 譯者 | yizhuyan (yizhuoyan) ? ? 共計翻譯:5 篇 貢獻時間:59 天

有時,我會不小心的按下 SHIFT+DELETE來刪除我的檔案資料。是的,我是個笨蛋,沒有再次確認下我實際準備要刪除的東西。而且我太笨或者說太懶,沒有備份我的檔案資料。結果呢?資料丟失了!在一瞬間就丟失了。

這種事時不時就會發生在我身上。如果你和我一樣,有個好訊息告訴你。有個簡單又有用的命令列工具叫chattrChange Attribute 的縮寫),在類 Unix 等發行版中,能夠用來防止檔案和目錄被意外的刪除或修改。

透過給檔案或目錄新增或刪除某些屬性,來保證使用者不能刪除或修改這些檔案和目錄,不管是有意的還是無意的,甚至 root 使用者也不行。聽起來很有用,是不是?

在這篇簡短的教程中,我們一起來看看怎麼在實際應用中使用 chattr 命令,來防止檔案和目錄被意外刪除。

Linux中防止檔案和目錄被意外刪除和修改

預設,chattr 命令在大多數現代 Linux 作業系統中是可用的。

預設語法是:

  1. chattr [operator] [switch] [file]

chattr 具有如下運運算元:

◈ 運運算元 +,追加指定屬性到檔案已存在屬性中
◈ 運運算元 -,刪除指定屬性
◈ 運運算元 =,直接設定檔案屬性為指定屬性

chattr 提供不同的屬性,也就是 aAcCdDeijsStTu。每個字元代表一個特定檔案屬性。

◈ a – 只能向檔案中新增資料
◈ A – 不更新檔案或目錄的最後訪問時間
◈ c – 將檔案或目錄壓縮後存放
◈ C – 不適用寫入時複製機制(CoW)
◈ d – 設定檔案不能成為 dump 程式的備份標的
◈ D – 同步目錄更新
◈ e – extend 格式儲存
◈ i – 檔案或目錄不可改變
◈ j – 設定此引數使得當透過 mount 引數:data=ordered 或者 data=writeback 掛載的檔案系統,檔案在寫入時會先被記錄在日誌中
◈ P – project 層次結構
◈ s – 安全刪除檔案或目錄
◈ S – 即時更新檔案或目錄
◈ t – 不進行尾部合併
◈ T – 頂層目錄層次結構
◈ u – 不可刪除

在本教程中,我們將討論兩個屬性的使用,即 ai ,這個兩個屬性可以用於防止檔案和目錄的被刪除。這是我們今天的主題,對吧?來開始吧!

防止檔案被意外刪除和修改

我先在我的當前目錄建立一個file.txt檔案。

  1. $ touch file.txt

現在,我將給檔案應用 i 屬性,讓檔案不可改變。就是說你不能刪除或修改這個檔案,就算你是檔案的擁有者和 root 使用者也不行。

  1. $ sudo chattr +i file.txt

使用lsattr命令檢查檔案已有屬性:

  1. $ lsattr file.txt

輸出:

  1. ----i---------e---- file.txt

現在,試著用普通使用者去刪除檔案:

  1. $ rm file.txt

輸出:

  1. # 不能刪除檔案,非法操作

  2. rm: cannot remove 'file.txt': Operation not permitted

我來試試 sudo 特權:

  1. $ sudo rm file.txt

輸出:

  1. # 不能刪除檔案,非法操作

  2. rm: cannot remove 'file.txt': Operation not permitted

我們試試追加寫內容到這個文字檔案:

  1. $ echo 'Hello World!' >> file.txt

輸出:

  1. # 非法操作

  2. bash: file.txt: Operation not permitted

試試 sudo 特權:

  1. $ sudo echo 'Hello World!' >> file.txt

輸出:

  1. # 非法操作

  2. bash: file.txt: Operation not permitted

你應該註意到了,我們不能刪除或修改這個檔案,甚至 root 使用者或者檔案所有者也不行。

要撤銷屬性,使用 -i 即可。

  1. $ sudo chattr -i file.txt

現在,這不可改變屬性已經被刪除掉了。你現在可以刪除或修改這個檔案了。

  1. $ rm file.txt

類似的,你能夠限制目錄被意外刪除或修改,如下一節所述。

防止目錄被意外刪除和修改

建立一個 dir1 目錄,放入檔案 file.txt

  1. $ mkdir dir1 && touch dir1/file.txt

現在,讓目錄及其內容(file.txt 檔案)不可改變:

  1. $ sudo chattr -R +i dir1

命令中,

◈ -R – 遞迴使 dir1 目錄及其內容不可修改
◈ +i – 使目錄不可修改

現在,來試試刪除這個目錄,要麼用普通使用者,要麼用 sudo 特權。

  1. $ rm -fr dir1

  2. $ sudo rm -fr dir1

你會看到如下輸出:

  1. # 不可刪除'dir1/file.txt':非法操作

  2. rm: cannot remove 'dir1/file.txt': Operation not permitted

嘗試用 echo 命令追加內容到檔案,你成功了嗎?當然,你做不到。

撤銷此屬性,輸入:

  1. $ sudo chattr -R -i dir1

現在你就能想平常一樣刪除或修改這個目錄內容了。

防止檔案和目錄被意外刪除,但允許追加操作

我們現已知道如何防止檔案和目錄被意外刪除和修改了。接下來,我們將防止檔案被刪除但僅僅允許檔案被追加內容。意思是你不可以編輯修改檔案已存在的資料,或者重新命名這個檔案或者刪除這個檔案,你僅可以使用追加樣式開啟這個檔案。

為了設定追加屬性到檔案或目錄,我們像下麵這麼操作:

針對檔案:

  1. $ sudo chattr +a file.txt

針對目錄:

  1. $ sudo chattr -R +a dir1

一個檔案或目錄被設定了 a 這個屬性就僅僅能夠以追加樣式開啟進行寫入。

新增些內容到這個檔案以測試是否有效果。

  1. $ echo 'Hello World!' >> file.txt

  2. $ echo 'Hello World!' >> dir1/file.txt

檢視檔案內容使用cat命令

  1. $ cat file.txt

  2. $ cat dir1/file.txt

輸出:

  1. Hello World!

你將看到你現在可以追加內容。就表示我們可以修改這個檔案或目錄。

現在讓我們試試刪除這個檔案或目錄。

  1. $ rm file.txt

輸出:

  1. # 不能刪除檔案'file.txt':非法操作

  2. rm: cannot remove 'file.txt': Operation not permitted

讓我們試試刪除這個目錄:

  1. $ rm -fr dir1/

輸出:

  1. # 不能刪除檔案'dir1/file.txt':非法操作

  2. rm: cannot remove 'dir1/file.txt': Operation not permitted

刪除這個屬性,執行下麵這個命令:

針對檔案:

  1. $ sudo chattr -R -a file.txt

針對目錄:

  1. $ sudo chattr -R -a dir1/

現在,你可以想平常一樣刪除或修改這個檔案和目錄了。

更多詳情,檢視 man 頁面。

  1. man chattr

總結

保護資料是系統管理人員的主要工作之一。市場上有眾多可用的免費和收費的資料保護軟體。幸好,我們已經擁有這個內建命令可以幫助我們去保護資料被意外的刪除和修改。在你的 Linux 系統中,chattr 可作為保護重要系統檔案和資料的附加工具。

然後,這就是今天所有內容了。希望對大家有所幫助。接下來我將會在這提供其他有用的文章。在那之前,敬請期待。再見!


via: https://www.ostechnix.com/prevent-files-folders-accidental-deletion-modification-linux/

作者:SK[2] 譯者:yizhuoyan 校對:wxy

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

贊(0)

分享創造快樂