用户可以删除其主目录中的根拥有文件,或者控制在用户可写目录中修改文件的规则是什么?


0

试试这个代码

root /home/user $ touch hehehe

然后作为普通用户

user ~ $ rm -f hehehe

我们的用户可以删除其主目录中的根拥有文件。这不仅适用于它们的主目录,也适用于它们可写的任何目录。

现在试试

root /home/user $ mkdir -p testdir

user ~ $ rm -rf testdir

也工作。然而:

root /home/user $ mkdir -p testdir/childdir
user ~ $ rm -rf testdir/childdir

失败,所以我们的用户显然无法删除可写目录中的非空的不可写目录。

根据我的理解,这三个测试用例都应该失败。但显然当一个目录是可写的时,这会使用户在其内容方面具有一些非平凡的功能。

关于用户拥有的文件系统权限,可以执行哪些原始文件系统操作(createdelete等等)的确切规则是什么?


您具有可以从中删除条目的目录的写入权限。在最新的示例中,您将尝试从没有写访问权限的目录中删除目录,因此它会失败。
Seth

Answers:


3

答案变得非常清楚,一旦你明白在所有兼容UNIX的文件系统中,文件不是存在于目录中的东西,而是完全独立的东西。目录只是文件链接的集合(这就是系统调用从目录中删除文件的原因unlink())。当没有文件链接(refcount为零)时,文件本身就会死亡。

这有一些含义:

  • 同一个文件可以很好地存在于文件系统上的多个目录中
  • 您的问题:从目录中删除文件(或子目录)(删除指向它的链接)或创建指向它的链接不是对文件的操作,而是对目录的操作。这意味着,文件的权限是无关紧要的,它是目录的权限,即计数。

我仍然不明白为什么testdir可以从用户拥有的目录中删除但testdir/childdir不能。如果用户具有对目录的写访问权限,那么为什么他们不能取消链接testdir/childdir呢?
jcarpenter2

用户没有写权限testdir- 因此他无法从中删除任何内容(包括testdir/childdir)。用户确实拥有对其主目录的写权限,因此他可以从中删除testdir,这显然会使下面的所有内容都无法访问。
Eugen Rieck

是的-但为什么用户必须删除childdirtestdir第一才可以删除testdir从自己的主目录?
jcarpenter2

您无法删除指向非空目录的链接。这与权限无关,即使root也不能rmdir为非空目录。
Eugen Rieck

花式。似乎很好。
jcarpenter2
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.