是否有任何权限配置允许用户删除文件但不能读取或写入文件?
答案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 ../