如何解决删除文件在Linux上不允许的操作

时间:2020-02-23 14:31:01  来源:igfitidea点击:

有时有必要防止包括root用户在内的所有用户删除文件。这通常是通过更改Linux文件系统上的文件属性来完成的。在Linux和其他Unix系统中用于更改文件属性的工具是chattr

符号模式的格式为+-= [acdeijstuADST]。符号模式的格式为+-= [acdeijstuADST],并且它们选择了新的属性
文件。运算符+导致添加选定的属性
到文件的现有属性-导致将它们删除=使其成为文件唯一的属性。

请参阅以下所有字母的说明:

a - append only
c - compressed
d - no  dump
e - extent  format
i -  immutable
j - data journalling
s - secure deletion
t - no tail-merging
u - undeletable
A - no  atime  updates
D - synchronous directory updates
S - synchronous updates
T - top  of  directory  hierarchy

当目录或者文件设置了不可变属性时,尝试删除基础文件时会出现错误PermissionPermission。如果在文件上设置了属性i(不可变位),即使是root也无法修改它。

模拟删除文件在Linux上不允许的操作

在/tmp下创建目录

mkdir /tmp/testdir

触摸目录中的文件

touch /tmp/testdir/testfile

设置仅追加属性

sudo chattr +a /tmp/testdir/testfile

对于文件夹及其内容,请使用-R选项进行递归更改

sudo chattr -R +a /tmp/testdir/

查看文件属性

$lsattr /tmp/testdir/testfile
-----a---------- testdir/testfile

尝试删除文件夹

$rm -f /tmp/testdir/testfile 
rm: cannot remove ‘testfile’: Operation not permitted

删除仅添加属性

sudo chattr -a /tmp/testdir/testfile

我们现在应该可以删除该文件

rm -f /tmp/testdir/testfile

对于不可变属性(i),其工作原理相同。

sudo chattr -i /tmp/testdir/testfile 
rm -f /tmp/testdir/testfile