为什么非root用户可以删除root创建的文件?


24

给定非root用户“ joshua”,以root用户身份在joshua的主目录(/ home / johsua /)中创建了一个名为“ foo”的文件;它看起来像这样:

-rw-r--r--  1 root   root       0 12-19 21:00 foo

然后将其删除为约书亚,我可以成功删除它。

我希望约书亚没有足够的权限删除它。是某种“权限继承”吗?我的平台是Debian 5.0.7。


1)这是题外话。2)我非常怀疑您是否能够以非root用户身份将其删除,而无需进行sudo其他特权升级。您可能忽略了一些东西。
DarkDust 2011年

16
@DarkDust文件是其父目录中的一个条目。如果你有一个目录写权限,你可以在它删除文件,无论谁拥有这些文件(除非粘位也上的目录设置)

@nos:愚蠢的我,你是对的。
DarkDust 2011年

1
其父目录中的条目是对文件的引用。它不是文件本身。(否则,如何将文件硬链接到多个目录?)
David Schwartz

@DavidSchwartz是正确的,但是从目录中删除文件是关于删除目录结构中的引用。
mc0e 17-4-23

Answers:


43

用户没有删除文件,系统删除了文件。用户只是从自己的目录中删除了文件。系统删除了该文件,因为其参考计数降至零。碰巧的是,用户从目录中删除文件时恰巧将其引用计数降至零。(如果文件被硬链接到另一个目录,或者打开了文件的句柄,则不会被删除。)

当参考计数降至零时,系统会自动删除文件。文件的所有者没有关系。除了文件所有者以外,还有许多人可以将文件的引用计数降低为零。

从目录中删除文件(称为“取消链接”)是对该目录的一项操作。取消链接文件会减少其引用计数。

同样,所有者以外的其他用户可以关闭未链接到任何目录的文件的最后一个句柄。关闭该句柄也将删除该文件,因为引用计数将再次降至零。


1
当然rm,由于rm“ remove”的缩写,该命令有些混乱,并且训练了用户以将其rm视为“删除”操作。许多用户rm每天都在不知道其实际执行的操作是“取消链接”而不是“删除”的情况下使用。结果,许多用户在首次遇到该行为时就感到惊讶,这并不令人感到意外。
丹尼尔·普赖登2011年

对于许多人来说,这绝对是令人惊讶的。rm实际上,至少该命令确实从目录中删除了文件或目录。在Windows中,调用命令的情况更糟del,因为它曾经用于删除文件,但是在现代Windows计算机(自NT4起)上,它也是取消链接操作。
大卫·史瓦兹

“用户没有删除文件,系统删除了文件”这没有任何意义。“系统”不能代表非特权用户进行需要特权访问的更改。这样,该答案将无法解释为什么如果当前目录仅由root拥有和可写,那么同一用户为什么不能做同样的事情。@kerrek在下面的回答是准确而简洁的。
FractalSpace '18

@FractalSpace嗯?系统可以代表无特权的用户进行需要特权访问的更改,并且始终如此。例如,更改磁盘上的字节需要特权访问。但是,如果用户可以修改文件,则系统将决定修改磁盘上的某些字节,即使该用户本身无权修改这些字节也是如此。用户无法修改内核内存,但是在代表用户执行时内核可以修改。系统通过决定执行其用户无法直接授权的操作来进行操作。
大卫·史瓦兹

是。最终,一切都由“系统”完成。但是,在通过为该特定“用户空间”设置的严格权限分离规则之前就不会这样做。在这种情况下,例如,“系统”没有作为一般规则执行操作,而是遵循在“父目录”上设置的权限。OP问题中此问题的关键部分。
FractalSpace

0

首先猜测:要删除文件,您需要对包含的文件夹具有写权限。因此,尝试/ home / johsua / foo / bar,将755赋给foo,将644赋给bar。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.