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