为什么我可以在没有root的情况下删除主目录中root拥有的文件?


40

因此,我今天早些时候在服务器上进行了一些维护,发现我能够删除主目录中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]$

我的问题是,如何-rw-r--r--在不是root用户的情况下删除root拥有并具有权限的文件?


6
您可以删除目录中指向该文件的条目,因为您对该目录具有写权限。您不必删除文件;该文件可能在其他地方有另一个硬链接。
user253751 2015年

2
有趣的扩展名:您还可以重命名文件或对其进行硬链接。
彼得说恢复莫妮卡

11
请重新考虑你的接受的答案的选择,因为当前是彻头彻尾的误导:你是不是不准做任何基于目录的权限,蚂蚁在它里面的内容
克苏鲁2015年

@Cthulhu完成!感谢大家对本问答的所有评论,这里肯定有很多有用的信息!
卡尔·贝内特

Answers:


34

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

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

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


1
因此,权限位于inode上,或者权限位于与inode 的链接上,而我只是删除该链接(因此,仅删除了该链接的链接,因此inode不再存在)?
卡尔·贝内特

3
权限在索引节点上。通过创建到文件的硬链接,更改该文件的权限,然后检查原始文件的权限,可以轻松地验证这一点。
Wouter Verhelst

但是,假设其中有一个目录和一个文件都属于root,该目录位于用户拥有的目录中。那您将无法删除它们,对吗?
njzk2 2015年

1
它是ext2,ext3和ext4特有的属性。示例:sudo touch test_file;sudo chattr +i test_file;rm -f test_file请参阅:man chattr
Mircea Vutcovici 2015年

1
不可变属性可保护文件,即使是从根目录进行的任何更改。
Mircea Vutcovici 2015年

19

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


46
不完全是。例如,OP将无法修改该根所有者文件。关键是,删除文件被视为对文件的操作,而是对目录的操作(删除指向文件的指针),这就是为什么目录权限很重要的原因。
克苏鲁2015年

1
@Cthulhu,所以您可以删除一个根目录拥有的文件,然后创建一个新的具有相同名称的文件吗?
KDEx

3
@Morgoroth是的,您可以,但是不再是同一文件了。再举一个(也许更明显)的示例,如果该文件属于根目录并且只有其所有者可以读取,则您将无法读取目录中的文件。
克苏鲁2015年

@inetknght应该予以澄清。我了解您正在尝试将文件本身作为实体进行处理,但这还不清楚。例如,您无法修改其内容。而且您没有提及可能会压倒目录权限的属性。
Mike S

1
@captcha那是因为vi先将文件保存在临时副本中,然后删除原始文件,然后将副本重命名为原始文件(或类似名称)。
Cthulhu
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.