如何借助chattr命令讓重要文件免遭刪除
譯文市面上有許許多多的工具和方法,可以保護你的文件和文件夾,以免被不小心刪除。chattr命令就是其中之一。這個命令行實用工具可以更改ext2/ext3/ext4文件系統(tǒng)上的文件屬性。它可以防止你的重要文件被不小心刪除。即便你對文件擁有全面的權(quán)限,但如果這些文件由chattr加以保護,你還是無法刪除它們。
語法
# chattr [運算符] [參數(shù)選項符] [文件名]
運算符
+ 將所選擇的屬性添加到文件的現(xiàn)有屬性中; - 刪除所選擇的屬性; = 讓所選擇的屬性成為文件擁有的唯一屬性。
參數(shù)選項符
R--遞歸更改文件夾及其內(nèi)容的屬性。 a--擁有"a"屬性的文件只能在追加模式下打開,以便進行寫操作。 只有超級用戶或擁有CAP_LINUX_IMMUTABLE功能的進程才能設(shè)置或清除這個屬性。 i--擁有"i"屬性的文件無法被修改:該文件無法被刪除或更名,無法為該文件創(chuàng)建鏈接, 也無法將數(shù)據(jù)寫入到該文件。只有超級用戶或擁有CAP_LINUX_IMMUTABLE功能的進程才 能設(shè)置或清除這個屬性。
參數(shù)選項符"a"和"i"之間的區(qū)別在于,擁有"a"屬性的文件可以追加內(nèi)容,而擁有"i"屬性的文件無法追加內(nèi)容。你可以使用lsattr命令,查看文件的屬性。#p#
用法
我們不妨在/home/sk目錄下創(chuàng)建名為unixmen1和unixmen2的樣本文件:
sk@sk:~$ touch unixmen1 unixmen2
示例1:帶"i"參數(shù)選項符的chattr
sk@sk:~$ sudo chattr +i unixmen1
查看文件unixmen1的屬性:
sk@sk:~$ sudo lsattr unixmen1 ----i--------e-- unixmen1
好了,現(xiàn)在已為unixmen1文件設(shè)置了屬性。接下來憑借根用戶權(quán)限,試圖刪除該文件。
sk@sk:~$ sudo rm -f unixmen1 rm: cannot remove 'unixmen1': Operation not permitted
你看到,就算你擁有根用戶權(quán)限,也無法刪除該文件。
試著將一些內(nèi)容追加到unixmen1文件:
sk@sk:~$ cat >> unixmen1 bash: unixmen1: Permission denied sk@sk:~$ sudo cat >> unixmen1 bash: unixmen1: Permission denied
當(dāng)文件由chattr保護時,無論你是超級用戶,還是普通用戶,都無法追加任何內(nèi)容。
刪除文件屬性:
sk@sk:~$ sudo chattr -i unixmen1
現(xiàn)在將一些內(nèi)容添加到unixmen1文件:
sk@sk:~$ cat >> unixmen1 Welcome to Unixmen Network
按CTRL+D組合鍵,保存并退出該文件。
現(xiàn)在,你可以沒有任何限制地追加內(nèi)容了。使用下面這個命令,顯示該文件的內(nèi)容:
sk@sk:~$ cat unixmen1 Welcome to Unixmen Network
另外,現(xiàn)在你還可以刪除該文件。無論你是超級用戶還是普通用戶,那都沒有關(guān)系:
sk@sk:~$ rm -f unixmen1
或者:
sk@sk:~$ rm unixmen1
請注意:我在上面一個示例中沒有使用sudo。#p#
示例2:帶"a"參數(shù)選項符的chattr
正如我在前面提到的那樣,參數(shù)選項符"a"和"i"之間的區(qū)別主要在于,你可以為帶"a"參數(shù)選項符的文件追加內(nèi)容,卻無法為用"i"參數(shù)選項符創(chuàng)建的文件追加任何內(nèi)容:
sk@sk:~$ sudo chattr +a unixmen2
將一些內(nèi)容追加到unixmen2文件:
sk@sk:~$ cat >> unixmen2 Hello welcome to unixmen network
按CTRL+D組合鍵,保存并退出該文件?,F(xiàn)在你可以追加內(nèi)容了,但無法刪除該文件:
sk@sk:~$ rm -f unixmen2 rm: cannot remove 'unixmen2': Operation not permitted sk@sk:~$ sudo rm -f unixmen2 rm: cannot remove 'unixmen2': Operation not permitted
使用下面這個命令,清除屬性:
sk@sk:~$ sudo chattr -a unixmen2
現(xiàn)在,試著刪除該文件:
sk@sk:~$ rm unixmen2
文件將不受任何限制地被刪除。#p#
示例3:帶"R"參數(shù)選項符的chattr
假設(shè)我有一個名為unixmen的目錄。該文件夾里面含有名為file1、file2和file3的幾個文件:
sk@sk:~$ mkdir unixmen sk@sk:~$ cd unixmen/ sk@sk:~/unixmen$ touch file1 file2 file3 sk@sk:~/unixmen$ cd .. sk@sk:~$ ls unixmen/ file1 file2 file3
帶"i"參數(shù)選項符,為unixmen文件夾及其內(nèi)容設(shè)置屬性:
sk@sk:~$ sudo chattr -R +i unixmen/
這里,"R"參數(shù)選項符用來遞歸更改目錄unixmen及其內(nèi)容的屬性。
試著刪除文件夾unixmen或者其內(nèi)容:
sk@sk:~$ rm -fr unixmen/ rm: cannot remove 'unixmen/file1': Permission denied rm: cannot remove 'unixmen/file2': Permission denied rm: cannot remove 'unixmen/file3': Permission denied sk@sk:~$ sudo rm -fr unixmen/ rm: cannot remove 'unixmen/file1': Permission denied rm: cannot remove 'unixmen/file2': Permission denied rm: cannot remove 'unixmen/file3': Permission denied
你看到,無論你是根用戶還是普通用戶,都無法刪除文件夾或其內(nèi)容。如果你使用"i"參數(shù)選項符,也無法將任何內(nèi)容追加到unixmen文件夾里面的文件:
sk@sk:~$ cat >> unixmen/file1 bash: unixmen/file1: Permission denied
想刪除unixmen文件夾及其內(nèi)容的屬性,只要執(zhí)行下面這個命令:
sk@sk:~$ sudo chattr -R -i unixmen/
現(xiàn)在你可以更改、刪除或修改該文件夾及其內(nèi)容了。
正如我們在示例2中看到的那樣,只有當(dāng)你用"a"參數(shù)選項符設(shè)置了文件夾屬性后,才能將內(nèi)容追加到文件:
sk@sk:~$ sudo chattr -R +a unixmen/
將內(nèi)容追加到文件:
sk@sk:~$ cat >> unixmen/file1
Hello Welcome
按CTRL+D組合鍵,保存并退出該文件。
顯示file1的內(nèi)容:
sk@sk:~$ cat unixmen/file1 Hello Welcome
不過,你無法刪除文件夾或文件:
sk@sk:~$ rm -fr unixmen/ rm: cannot remove 'unixmen/file1': Operation not permitted rm: cannot remove 'unixmen/file2': Operation not permitted rm: cannot remove 'unixmen/file3': Operation not permitted sk@sk:~$ sudo rm -fr unixmen/ rm: cannot remove 'unixmen/file1': Operation not permitted rm: cannot remove 'unixmen/file2': Operation not permitted rm: cannot remove 'unixmen/file3': Operation not permitted
#p#
示例4:防止用戶更改密碼
該示例還將幫助你防止用戶更改密碼。眾所周知,/etc/shadow文件為用戶帳戶存儲著采用加密格式的實際密碼,同時存儲著與用戶密碼有關(guān)的額外屬性。它存儲著安全用戶帳戶信息。所以,我們不妨對該文件進行寫保護,以防密碼被人更改:
sk@sk:~$ sudo chattr +i /etc/shadow
現(xiàn)在,更改當(dāng)前用戶密碼(比如sk):
sk@sk:~$ sudo passwd sk Enter new UNIX password: Retype new UNIX password: passwd: Authentication token manipulation error passwd: password unchanged
現(xiàn)在退出系統(tǒng),以用戶"sk"的身份再次登錄。不過,你無法用新密碼登錄進去,仍需要用原來那個密碼才能登錄。
使用下面這個命令,查看/etc/shadow文件的屬性:
sk@sk:~$ sudo lsattr /etc/shadow ----i--------e-- /etc/shadow
想恢復(fù)原有屬性,只要鍵入下面這個命令:
sk@sk:~$ sudo chattr -i /etc/shadow
我希望,你會喜歡上這個命令,并使用該命令保護文件,防止被不小心刪除。想了解關(guān)于chattr命令的更多信息,請參閱參考手冊頁。
sk@sk:~$ man chattr
原文地址: http://www.unixmen.com/secure-and-prevent-files-from-accidental-deletion-with-chattr/