允许用户删除文件但不允许读取它

允许用户删除文件但不允许读取它

是否有任何权限配置允许用户删除文件但不能读取或写入文件?

答案1

文件的权限决定了谁可以读、写或执行该文件。它的父目录的权限决定了谁可以删除它,因为在 POSIX 中,删除文件类似于写入其父目录,实际上与删除的文件本身没有任何关系。

因此,一个文件可能是不可读和不可写的,但任何可以在其父目录中写入的人都可以删除它:

mkdir a
chmod 777 a
touch a/b
chmod 000 a/b

b在目录中生成一个文件a,除了任何人都root无法读取或写入b,但任何人都可以删除b

(请注意,任何人都可以替换b。)

答案2

是的,这是可能的。删除某些内容所需的唯一写入操作是删除相应的索引节点,该索引节点需要在父目录中写入的权限(它的定义如下POSIX)。

您实际上不需要更改该文件的任何内容。一旦文件的引用计数器为 0,文件就被视为已删除。引用计数器等于指向该文件的 inode 数量加上该文件的打开文件处理程序数量。如果文件未被使用,则后者将为 0。因此,一旦删除该文件所具有的 1 个索引节点(如果不存在其他硬链接),该文件就会被删除。

一个例子:

创建一个新目录并进入其中:

mkdir /tmp/test
cd /tmp/test

然后变成root

sudo su

请注意,在下一个命令前面写入sudo将不起作用,因为它是需要由 完成的写入操作root。用户执行echo并不重要。

然后创建一个新文件,更改其权限,然后再次退出 root shell。

echo some content > someFile
chmod 600 someFile
exit

让你显示目录的内容:

ll

输出将如下所示,仅使用您的用户名而不是christoph

total 12
drwxrwxr-x  2 christoph christoph 4096 Oct  8 14:27 ./
drwxrwxrwt 13 root      root      4096 Oct  8 14:25 ../
-rw-------  1 root      root        13 Oct  8 14:27 someFile

最后1一行意味着只有 1 个 inode 指向该文件。因此,删除该 1 个条目后,如果没有任何程序打开该文件,该文件就会消失(如果是,则在这些程序关闭或终止后该文件就会消失)。情况通常如此,但并非总是如此。看https://en.wikipedia.org/wiki/Hard_link了解更多信息。

正如您所看到的,您对该文件没有读取或写入权限,但对该目录有写入权限(当前目录用句点 ( .) 表示)。这意味着您可以通过删除该文件

rm someFile

但会警告该文件已被写保护:

rm: remove write-protected regular file 'someFile'?

只需y输入“yes”并按 Enter 键即可。

然后,文件就消失了:

$ ll
total 8
drwxrwxr-x  2 christoph christoph 4096 Oct  8 14:27 ./
drwxrwxrwt 13 root      root      4096 Oct  8 14:27 ../

相关内容