防止在Linux中意外删除或者修改文件和文件夹

时间:2020-03-21 11:46:37  来源:igfitidea点击:

在Linux中,一个有用的命令行实用程序,称为“ chattr”,用于防止文件和文件夹在Linux中意外删除或者修改。

Chattr是“更改属性 Change Attribute ”的缩写,将某些属性应用于/删除Linux系统中的文件或者文件夹。
因此,没有人可以以root用户身份意外或者有意删除或者修改文件和文件夹。

使用Chattr防止在Linux中意外删除或者修改文件和文件夹

默认情况下,Chattr已预装在许多Linux操作系统中。
因此,让我们不必理会安装。

chattr命令的默认语法为:

chattr [operator] [switch] [filename]

chattr具有以下运算符:

  • 运算符“ +”使所选属性添加到文件的现有属性中。
  • 运算符“-”使它们被删除。
  • 运算符“ =”使它们成为文件唯一的属性。

Chattr具有不同的属性,即aAcCdDeijsStTu。
每个字母将特定属性应用于文件,如下所示。

  • 一个-仅添加,
  • A-没有及时更新,
  • c-压缩,
  • C-写入时无副本,
  • d-没有转储,
  • D-同步目录更新,
  • e-范围格式,
  • 我-一成不变,
  • j-数据日志,
  • P-项目层次结构,
  • s-安全删除,
  • S-同步更新
  • t-没有 tail合并,
  • T-目录层次结构的顶部,
  • 你-无法删除。

在本教程中,我们将讨论两个属性的用法,即a,i,它们用于防止删除文件和文件夹。

防止在Linux中意外删除文件

让我在当前目录中创建一个名为file.txt的文件。

$touch file.txt

或者,

$> file.txt

现在,我将应用“ i”属性,该属性使文件不可变。
这意味着即使我们是文件所有者和root用户,也无法删除,修改文件。

$sudo chattr +i file.txt

我们可以使用以下命令检查文件属性:

$lsattr file.txt

输出示例:

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

现在,尝试以普通用户或者sudo权限删除文件。

$rm file.txt

输出示例:

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

让我尝试使用sudo命令:

$sudo rm file.txt

输出示例:

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

让我们尝试在文本文件中添加一些内容。

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

输出示例:

bash: file.txt: Operation not permitted

即使我们尝试以GUI模式从文件管理器中删除文件,也无法删除它。

如我们在上述输出中所注意到的,即使以root用户身份,我们也无法删除或者修改文件。

要撤消属性,只需使用“ -i”开关,如下所示。

$sudo chattr -i file.txt

现在,不可变属性已被删除。
现在,我们可以根据需要修改或者删除文件。

$echo 'Hello World!' >> file.txt
$cat file.txt
Hello World!
$rm file.txt

同样,我们可以限制目录,以防意外删除或者修改目录,如下一节所述。

防止在Linux中意外删除和修改文件夹

在该目录中创建一个名为dir1的目录和一个名为file.txt的文件。

$mkdir dir1 && touch dir1/file.txt

现在,使用以下命令使该目录及其内容(file.txt)不可变:

$sudo chattr -R +i dir1

其中:

  • -R-将使dir1及其内容递归不可变。
    • i-使目录不可变。

现在,尝试以普通用户或者使用sudo用户删除目录。

$rm -fr dir1
$sudo rm -fr dir1

我们将获得以下输出:

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

尝试使用“ echo”命令在文件中添加一些内容。

要撤消属性,请运行:

$sudo chattr -R -i dir1

现在,我们可以照常删除或者修改此目录的内容。

防止意外删除文件和文件夹,但允许在Linux中进行追加操作

现在我们知道如何防止意外删除和修改文件和文件夹。
接下来,我们将防止删除文件和文件夹,但仅允许在追加模式下写入文件。
这意味着我们无法编辑,修改文件中的现有数据,重命名文件以及删除文件。
我们只能以追加模式打开文件进行写入。

要将添加模式归因设置为文件/目录,请执行以下操作:

对于文件:

$sudo chattr +a file.txt

对于目录:

$sudo chattr -R +a dir1

设置了'a'属性的文件/文件夹只能在追加模式下打开以进行写入。

在文件中添加一些内容以检查其是否有效。

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

使用cat命令检查文件内容:

$cat file.txt
$cat dir1/file.txt

输出示例:

Hello World!

如我们所见,我们可以添加内容。
这意味着我们可以修改文件和文件夹。

让我们尝试立即删除文件或者文件夹。

$rm file.txt

输出:

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

让我们尝试删除该文件夹:

$rm -fr dir1/

或者尝试使用sudo:

$sudo rm -fr dir1/

输出示例:

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

要删除属性,请运行以下命令:

对于文件:

$sudo chattr -R -a file.txt

对于目录:

$sudo chattr -R -a dir1/

现在,我们可以照常删除或者修改文件和文件夹。

有关更多详细信息,请参见手册页。

$man chattr