为什么我可以在我的主目录中删除 root 拥有的文件而不是 root?

Car*_*ett 45 security linux permissions

因此,我今天早些时候在我的服务器上进行了一些维护,并注意到我能够删除主目录中 root 拥有的文件。

我能够重现一个示例:

[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 20:59 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ sudo touch file-owned-by-root
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-r--r--.  1 root     root        0 Oct  5 21:00 file-owned-by-root
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$ rm file-owned-by-root
rm: remove write-protected regular empty file ‘file-owned-by-root’? y
[cbennett@nova ~/temp]$ ls -al
total 8
drwxrwxr-x.  2 cbennett cbennett 4096 Oct  5 21:00 .
drwxr-xr-x. 22 cbennett cbennett 4096 Oct  5 20:58 ..
-rw-rw-r--.  1 cbennett cbennett    0 Oct  5 20:58 my-own-file
[cbennett@nova ~/temp]$
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何能够删除由 root 拥有并具有权限的文件-rw-r--r--,而我不是 root?

Mir*_*ici 38

权限、内容和所有属性都是 inode 的一部分。名称在目录条目中。权限不会递归继承(除非您在 Posix ACL 中使用默认值)。

当您删除一个文件时,在内部您只需删除从目录条目到 inode 的硬链接。当所有硬链接都被删除并且 inode 未被使用时,文件系统将回收空间。无论在文件上设置了哪些权限,您只需要对该文件夹的写权限(不可变的 ext 权限除外)。空文件夹也一样。

删除非空文件夹时,您需要对要删除的文件夹及其父文件夹具有写权限。

  • 权限在 inode 上。通过创建文件的硬链接,更改其权限,然后检查原始文件的权限,可以轻松验证这一点。 (3认同)
  • 它是特定于 ext2、ext3 和 ext4 的属性。示例:`sudo touch test_file;sudo chattr +i test_file;rm -f test_file`参见:`man chattr` (2认同)

小智 21

当您拥有目录时,您可以根据目录的权限对它和其中的内容执行任何操作。因此,尽管不拥有该文件,您仍然可以删除它,因为您对文件所在的目录具有读/写权限。

  • 不完全是。例如,OP 将无法修改该根拥有的文件。问题是,删除文件*不被视为对文件的操作,而是对目录的操作(删除指向文件的指针),这就是为什么对目录的权限很重要的原因。 (49认同)
  • @Morgoroth 是的,您可以,但这将不再是同一个文件。对于另一个(也许更明显的)示例,如果目录中的文件属于根目录并且只有其所有者可以读取它,则您将无法读取该文件。 (3认同)